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)); }
public IActionResult Week(int organizationId, string date) { WeekScheduleReportViewModel model = CalculateWeekModel(organizationId, date); return(View(model)); }
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); }