示例#1
0
        public IActionResult SendWeekSMS(int id, [FromBody] SendSMSModel sendModel)
        {
            UserCanAccessOrganization(id);

            WeekScheduleReportViewModel model = CalculateWeekModel(id, sendModel.ScheduleDate.ToString("MM/dd/yyyy"));

            foreach (EmployeeScheduleReportViewModel employee in model.Employees)
            {
                if (employee.TotalHours == 0)
                {
                    continue;
                }

                string message = null;

                foreach (var day in employee.Days)
                {
                    if (day.Shifts.Count == 0)
                    {
                        continue;
                    }

                    message += "---------------\n";
                    message += day.Day + " " + day.DayDate.ToString("MM/dd/yyyy");
                    message += "\n";

                    foreach (var shift in day.Shifts)
                    {
                        message += shift.Name + " - ";
                        message += shift.StartTime.ConvertFromUTC(false).ToString("t") + "-" + shift.EndTime.ConvertFromUTC(false).ToString("t");
                        message += "\n";
                    }
                }

                // send for employee
                if (!string.IsNullOrEmpty(employee.SendPhoneNumber) && employee.SendPhoneNumber.Length == 10)
                {
                    _smsSender.SendSmsAsync(employee.SendPhoneNumber, message);
                    System.Diagnostics.Debug.Write(message);
                }
            }

            return(new ObjectResult(true));
        }
示例#2
0
        public IActionResult Week(int organizationId, string date)
        {
            WeekScheduleReportViewModel model = CalculateWeekModel(organizationId, date);

            return(View(model));
        }
示例#3
0
        protected WeekScheduleReportViewModel CalculateWeekModel(int organizationId, string date)
        {
            WeekScheduleReportViewModel model = new WeekScheduleReportViewModel();

            DateTime startTime = DateTime.Parse(date);

            startTime = StartOfWeek(startTime, DayOfWeek.Sunday);
            DateTime endTime = startTime.AddDays(7);

            endTime = endTime.AddHours(6);

            UserCanAccessOrganization(organizationId);

            var organization = _schedulerContext.Organizations.Single(o => o.OrganizationId == organizationId);

            var employeeShifts = _schedulerContext.EmployeeShifts
                                 .Include(es => es.Employee)
                                 .Include(es => es.Employee.Organization)
                                 .Include(es => es.Shift)
                                 .Include(es => es.Shift.Position)
                                 .Where(es => es.Employee.Organization.OrganizationId == organizationId && es.ShiftStartTime > startTime.ToUniversalTime() && es.ShiftEndTime < endTime.ToUniversalTime())
                                 .ToList();

            var employees = employeeShifts.GroupBy(employeeGroup => employeeGroup.Employee);

            model.Organization    = organization.Name;
            model.WeekDescription = startTime.ToString("MM/dd/yyyy") + " - " + endTime.ToString("MM/dd/yyyy");

            model.Employees = new List <EmployeeScheduleReportViewModel>();
            foreach (var employeeGroup in employees)
            {
                EmployeeScheduleReportViewModel employeeModel = new EmployeeScheduleReportViewModel();
                employeeModel.EmployeeNumber = employeeGroup.Key.EmployeeNumber;
                employeeModel.FirstName      = employeeGroup.Key.FirstName;
                employeeModel.LastName       = employeeGroup.Key.LastName;

                var phone = employeeGroup.Key.PhoneNumber;
                employeeModel.PhoneNumber     = string.Format("{0}-{1}-{2}", phone.Substring(0, 3), phone.Substring(3, 3), phone.Substring(6, 4));
                employeeModel.SendPhoneNumber = phone;
                employeeModel.TotalShifts     = employeeGroup.Count();

                employeeModel.TotalHours = CalculateTotalHours(employeeGroup.ToList());

                var days = employeeGroup.GroupBy(es => es.ShiftStartTime.ConvertFromUTC(false).Date);
                employeeModel.Days = new List <EmployeeDayReportViewModel>();
                foreach (var dayOfWeek in Enum.GetValues(typeof(DayOfWeek)))
                {
                    var dayGroup = days.SingleOrDefault(dg => dg.Key.DayOfWeek == (DayOfWeek)dayOfWeek);

                    EmployeeDayReportViewModel dayModel = new EmployeeDayReportViewModel();
                    dayModel.DayDate = GetDateOfDay((DayOfWeek)dayOfWeek, startTime);
                    dayModel.Day     = dayOfWeek.ToString();
                    dayModel.Shifts  = new List <EmployeeShiftReportViewModel>();

                    if (dayGroup == null)
                    {
                        employeeModel.Days.Add(dayModel);
                        continue;
                    }

                    foreach (var shift in dayGroup)
                    {
                        EmployeeShiftReportViewModel shiftModel = new EmployeeShiftReportViewModel();

                        shiftModel.Name      = shift.Shift.Position.Name;
                        shiftModel.Category  = shift.Shift.Position.Category;
                        shiftModel.StartTime = shift.AdjustedStartTime ?? shift.ShiftStartTime;
                        shiftModel.EndTime   = shift.AdjustedEndTime ?? shift.ShiftEndTime;

                        dayModel.Shifts.Add(shiftModel);
                    }

                    employeeModel.Days.Add(dayModel);
                }
                model.Employees.Add(employeeModel);
            }

            model.Employees = model.Employees.OrderBy(e => e.FirstName).ThenBy(e => e.LastName).ToList();

            return(model);
        }