public IHttpActionResult CreateByPattern([FromBody] CreatePersonnelShiftByPatternDto personnelShift) { if (personnelShift == null) { return(BadRequest()); } //custom validations var validator = new CreatePersonnelShiftByPatternDtoValidator(); var results = validator.Validate(personnelShift); if (!results.IsValid) { foreach (var failure in results.Errors) { ModelState.AddModelError(failure.PropertyName, failure.ErrorMessage); } } if (!ModelState.IsValid) { string errorMessage = new ModelStateError(_logger).OutputMessage(ModelState); return(BadRequest(errorMessage)); } try { var result = _personnelShiftService.CreateByPattern(personnelShift); if (!result.IsValid) { return(BadRequest(result.Message)); } } catch (LogicalException ex) { return(BadRequest(ex.Message)); } catch { return(BadRequest(AppSettings.INTERNAL_SERVER_ERROR_MESSAGE)); } return(Ok()); }
public CustomResult CreateByPattern(CreatePersonnelShiftByPatternDto dto) { if (dto.DaysOfWeek.Count == 0 && !dto.RepeatPattern.HasValue) { return(new CustomResult { Message = "please choose repeat pattern or days of week" }); } if (dto.PersonnelIdList.Count == 0) { return(new CustomResult { Message = "please choose the personnel" }); } foreach (var personnelId in dto.PersonnelIdList) { var shiftAssignments = new List <PersonnelShiftAssignment>(); //build assignments var fromDate = dto.FromDate; var toDate = dto.ToDate; if (dto.RepeatPattern.HasValue) //check repeat patterns { switch (dto.RepeatPattern) { case RepeatPattern.EveryDay: shiftAssignments = BuildPattern(fromDate, toDate, dto.IncludeFridays , dto.IncludeHolidays, 1); break; case RepeatPattern.OneDayAfter: shiftAssignments = BuildPattern(fromDate, toDate, dto.IncludeFridays , dto.IncludeHolidays, 2); break; case RepeatPattern.TowDaysAfter: shiftAssignments = BuildPattern(fromDate, toDate, dto.IncludeFridays , dto.IncludeHolidays, 3); break; case RepeatPattern.WeekAfter: shiftAssignments = BuildPattern(fromDate, toDate, dto.IncludeFridays , dto.IncludeHolidays, 7); break; case RepeatPattern.TwoWeeksAfter: shiftAssignments = BuildPattern(fromDate, toDate, dto.IncludeFridays , dto.IncludeHolidays, 14); break; default: break; } } else if (dto.DaysOfWeek.Count > 0) //check day of week { for (DateTime date = fromDate; date <= toDate; date = date.AddDays(1)) { if (dto.DaysOfWeek.Contains(date.DayOfWeek)) { if (!dto.IncludeFridays && date.DayOfWeek == DayOfWeek.Friday) { continue; } if (!dto.IncludeHolidays && _calendarDateService.IsHoliday(date)) { continue; } shiftAssignments.Add(new PersonnelShiftAssignment { Date = date.Date }); } } } //check for same exists if (AnotherShiftForSameDayExists(personnelId, shiftAssignments)) { return(new CustomResult { Message = "cannot add another shift for the same day" }); } if (shiftAssignments.Count > 0) { //save personnel shift var personnelShift = new PersonnelShift { PersonnelId = personnelId, ShiftId = dto.ShiftId, DateAssigned = DateTime.Now }; _personnelShiftRepository.Insert(personnelShift); //save shift assignments foreach (var personnelShiftAssignment in shiftAssignments) { personnelShiftAssignment.PersonnelShiftId = personnelShift.Id; _personnelShiftAssignmentRepository.Insert(personnelShiftAssignment); } } else { return(new CustomResult { Message = "according to your filtering choices, could not assign shifts" }); } } return(new CustomResult { IsValid = true }); }