protected void CorrectDropdowns(VacationEditModel model)
 {
     if (!model.IsVacationTypeEditable)
          model.VacationTypeId = model.VacationTypeIdHidden;
      if (!model.IsTimesheetStatusEditable)
          model.TimesheetStatusId = model.TimesheetStatusIdHidden;
      model.DaysCount = model.DaysCountHidden;
 }
        protected bool ValidateVacationEditModel(VacationEditModel model, UploadFileDto fileDto)
        {
            ModelState.Clear();
             UserRole role = AuthenticationService.CurrentUser.UserRole;
             if (model.Id > 0 && fileDto == null)
             {
                 int attachmentCount = RequestBl.GetAttachmentsCount(model.Id, RequestAttachmentTypeEnum.Vacation);
                 if (attachmentCount <= 0)
                 {
                     if ((role == UserRole.Employee && model.IsApprovedByUser) ||
                         (role == UserRole.Manager && model.IsApprovedByManager) ||
                         (role == UserRole.PersonnelManager && 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;
                         }
                     }
                 }
             }

             if(model.BeginDate.HasValue && model.EndDate.HasValue)
             {
                 if(model.BeginDate > model.EndDate)
                    ModelState.AddModelError("BeginDate", "Дата начала отпуска не может превышать дату окончания отпуска.");
                 else if(!model.IsDelete)
                 {
                     int requestCount = RequestBl.GetOtherRequestCountsForUserAndDates
                         (model.BeginDate.Value, model.EndDate.Value,
                         model.UserId, model.Id, false);
                     if(requestCount > 0)
                         ModelState.AddModelError("BeginDate",
                      "Для данного пользователя существуют другие заявки в указанном интервале дат.");
                 }
             }
             CheckBeginDate(model);
             return ModelState.IsValid;
        }
        public ActionResult VacationEdit(VacationEditModel model)
        {
            string source = Newtonsoft.Json.JsonConvert.SerializeObject(model);
             CorrectCheckboxes(model);
             CorrectDropdowns(model);
             UploadFileDto fileDto = GetFileContext();
             UploadFileDto orderScanFileDto = GetFileContext("orderScanFile");
             UploadFileDto unsignedOrderScanFileDto = GetFileContext("unsignedOrderScanFile");
             #region Для сохранения файла после выгрузки в 1с #Заплатка
             bool IsSaveFileAfterSendTo1C = false;
             if(orderScanFileDto!=null && model.Id>0)
             RequestBl.SaveVacationFileAfter1C(model, orderScanFileDto)
                 .OnSuccess(x =>
                     {
                         RequestBl.ReloadDictionariesToModel(model);
                         IsSaveFileAfterSendTo1C = true;
                     }
             );
             if (IsSaveFileAfterSendTo1C) return View(model);
             #endregion
             if (!ValidateVacationEditModel(model,fileDto))
             {
                 model.IsApproved = false;
                 model.IsApprovedForAll = false;

                     RequestBl.ReloadDictionariesToModel(model);

                 return View(model);
             }

             string error;
             if (!RequestBl.SaveVacationEditModel(model, fileDto, unsignedOrderScanFileDto, orderScanFileDto, out error))
             {

                 if (model.ReloadPage)
                 {
                     ModelState.Clear();
                     if (!string.IsNullOrEmpty(error))
                         ModelState.AddModelError("", error);
                     return View(RequestBl.GetVacationEditModel(model.Id, model.UserId));
                 }
                 if (!string.IsNullOrEmpty(error))
                     ModelState.AddModelError("", error);
             }
             return View(model);
        }