protected void CorrectDropdowns(SicklistEditModel model) { if (!model.IsTypeEditable) { model.TypeId = model.TypeIdHidden; model.BabyMindingTypeId = model.BabyMindingTypeIdHidden; } if(!model.IsDatesEditable) model.IsContinued = model.IsContinuedHidden; /*if (!model.IsBabyMindingTypeEditable) model.BabyMindingTypeId = model.BabyMindingTypeIdHidden;*/ if (!model.IsTimesheetStatusEditable) model.TimesheetStatusId = model.TimesheetStatusIdHidden; model.DaysCount = model.DaysCountHidden; if(!model.IsPersonnelFieldsEditable) { model.PaymentRestrictTypeId = model.PaymentRestrictTypeIdHidden; model.PaymentPercentTypeId = model.PaymentPercentTypeIdHidden; } }
protected bool ValidateSicklistEditModel(SicklistEditModel model, UploadFileDto fileDto /*out bool needToReload,out string error*/) { //needToReload = false; //error = string.Empty; if (model.Id > 0 && fileDto == null) { int attachmentCount = RequestBl.GetAttachmentsCount(model.Id,RequestAttachmentTypeEnum.Sicklist); if (attachmentCount <= 0) { UserRole role = AuthenticationService.CurrentUser.UserRole; if ((role == UserRole.Employee && model.IsApprovedByUser) || (role == UserRole.Manager && model.IsApprovedByManager) || ((role == UserRole.PersonnelManager || role == UserRole.OutsourcingManager || role == UserRole.Estimator) && model.IsApprovedByPersonnelManager)) { ModelState.AddModelError(string.Empty, "Заявка не может быть согласована без прикрепленого скана больничного."); if (role == UserRole.Employee && model.IsApprovedByUser) { ModelState.Remove("IsApprovedByUser"); model.IsApprovedByUser = false; } if (role == UserRole.Manager && model.IsApprovedByManager) { ModelState.Remove("IsApprovedByManager"); model.IsApprovedByManager = false; } if (role == UserRole.PersonnelManager && model.IsApprovedByPersonnelManager) { ModelState.Remove("IsApprovedByPersonnelManager"); model.IsApprovedByPersonnelManager = false; } //error = "Заявка не может быть согласована без прикрепленого скана больничного."; //needToReload = true; //return false; } } } if (model.BeginDate.HasValue && model.EndDate.HasValue) { UserRole role = AuthenticationService.CurrentUser.UserRole; // Проверка на дубликаты int requestCount = RequestBl.GetOtherRequestCountsForUserAndDates(model.BeginDate.Value, model.EndDate.Value, model.UserId, model.Id, RequestTypeEnum.Sicklist); if (requestCount > 0) ModelState.AddModelError("BeginDate", "Для данного пользователя существуют другие заявки в указанном интервале дат."); if(model.BeginDate > model.EndDate) ModelState.AddModelError("BeginDate", "Дата начала отпуска не может превышать дату окончания отпуска."); else if (!model.IsDelete && model.IsApproved) { DateTime beginDate = model.BeginDate.Value; DateTime current = DateTime.Today; DateTime monthBegin = new DateTime(current.Year, current.Month, 1); bool isValid = true; if ((current.Day != 1) && monthBegin > beginDate) { isValid = RequestBl.HaveAbsencesForPeriod(model.BeginDate.Value, model.EndDate.Value, model.UserId, AuthenticationService.CurrentUser.Id,role); //ModelState.AddModelError(string.Empty, "Создание/изменение заявки в прошлом запрещено ."); //return; } if ((current.Day == 1) && monthBegin.AddMonths(-1) > beginDate) { isValid = RequestBl.HaveAbsencesForPeriod(model.BeginDate.Value, model.EndDate.Value, model.UserId, AuthenticationService.CurrentUser.Id,role); //ModelState.AddModelError(string.Empty, "Создание/изменение заявки в прошлом запрещено ."); //return; } if(!isValid) { Log.InfoFormat("Absence not found for sicklist {0}",model.Id); ModelState.AddModelError(string.Empty, "Период, указанный в заявке,не соответствует данным по неявкам в табеле.Вы не можете согласовать эту заявку."); } } } if (!string.IsNullOrEmpty(model.SicklistNumber)) { Regex r = new Regex(@"^\d{12}$"); if(!r.IsMatch(model.SicklistNumber)) ModelState.AddModelError("SicklistNumber", "Номер больничного листа должен содержать 12 цифр"); } if (model.IsPersonnelFieldsEditable && AuthenticationService.CurrentUser.UserRole != UserRole.OutsourcingManager && AuthenticationService.CurrentUser.UserRole != UserRole.Estimator) { if (string.IsNullOrEmpty(model.ExperienceYears) && string.IsNullOrEmpty(model.ExperienceYears) && !(model.ExperienceIn1C == true)) ModelState.AddModelError("ExperienceYears", "Необходимо заполнить хотя бы одно из полей стажа."); if (!string.IsNullOrEmpty(model.ExperienceYears)) { int experienceYears; if (!Int32.TryParse(model.ExperienceYears, out experienceYears)) ModelState.AddModelError("ExperienceYears", "Неправильно указано число лет стажа."); else if (experienceYears < 0) ModelState.AddModelError("ExperienceYears", "Число лет стажа должно быть неотрицательным числом."); } if (!string.IsNullOrEmpty(model.ExperienceMonthes)) { int experienceMonth; if (!Int32.TryParse(model.ExperienceMonthes, out experienceMonth)) ModelState.AddModelError("ExperienceMonthes", "Неправильно указано число месяцев стажа."); else if (experienceMonth < 0 || experienceMonth > 11) ModelState.AddModelError("ExperienceMonthes", "Число месяцев стажа должно быть неотрицательным числом меньшим 12."); } } if (model.IsPersonnelFieldsEditable) { if (!model.PaymentBeginDate.HasValue) ModelState.AddModelError("PaymentBeginDate","'Назначить с даты' - обязательное поле."); if(model.PaymentBeginDate.HasValue && model.BeginDate.HasValue && model.BeginDate.Value > model.PaymentBeginDate.Value) ModelState.AddModelError("PaymentBeginDate", "Поле 'Назначить с даты' не должно быть меньше поля 'Дата начала'."); if (model.PaymentBeginDate.HasValue && model.EndDate.HasValue && model.EndDate.Value < model.PaymentBeginDate.Value) ModelState.AddModelError("PaymentBeginDate", "Поле 'Назначить с даты' не должно быть больше поля 'Дата окончания'."); if (model.PaymentDecreaseDate.HasValue && model.BeginDate.HasValue && model.BeginDate.Value > model.PaymentDecreaseDate.Value) ModelState.AddModelError("PaymentDecreaseDate", "Поле 'Снизить пособие за нарушение режима с' не должно быть меньше поля 'Дата начала'."); if (model.PaymentDecreaseDate.HasValue && model.EndDate.HasValue && model.EndDate.Value < model.PaymentDecreaseDate.Value) ModelState.AddModelError("PaymentBeginDate", "Поле 'Снизить пособие за нарушение режима с' не должно быть больше поля 'Дата окончания'."); } return ModelState.IsValid; }
public ActionResult SicklistEdit(SicklistEditModel model) { CorrectCheckboxes(model); CorrectDropdowns(model); UploadFileDto fileDto = GetFileContext(); //bool needToReload; //string error; if (!ValidateSicklistEditModel(model, fileDto/*,out needToReload,out error*/)) { model.IsApproved = false; model.IsApprovedForAll = false; //if(needToReload) //{ // ModelState.Clear(); // if (!string.IsNullOrEmpty(error)) // ModelState.AddModelError("", error); // return View(RequestBl.GetSicklistEditModel(model.Id, model.UserId)); //} RequestBl.ReloadDictionariesToModel(model); return View(model); } string error; if (!RequestBl.SaveSicklistEditModel(model, fileDto, out error)) { //HttpContext.AddError(new Exception(error)); if (model.ReloadPage) { ModelState.Clear(); if (!string.IsNullOrEmpty(error)) ModelState.AddModelError("", error); return View(RequestBl.GetSicklistEditModel(model.Id, model.UserId)); } if (!string.IsNullOrEmpty(error)) ModelState.AddModelError("", error); } return View(model); }