protected bool ValidateModel(ScanOriginalDocumentsModel model)
        {
            ValidateFileLength(model.INNScanFile, "INNScanFile", 2);
            ValidateFileLength(model.SNILSScanFile, "SNILSScanFile", 2);
            ValidateFileLength(model.DisabilityCertificateScanFile, "DisabilityCertificateScanFile", 2);
            ValidateFileLength(model.InternalPassportScanFile, "InternalPassportScanFile", 20);
            ValidateFileLength(model.HigherEducationDiplomaScanFile, "HigherEducationDiplomaScanFile", 5);
            ValidateFileLength(model.PostGraduateEducationDiplomaScanFile, "PostGraduateEducationDiplomaScanFile", 2);
            ValidateFileLength(model.CertificationScanFile, "CertificationScanFile", 2);
            ValidateFileLength(model.TrainingScanFile, "TrainingScanFile", 2);
            ValidateFileLength(model.MarriageCertificateScanFile, "MarriageCertificateScanFile", 2);
            ValidateFileLength(model.ChildBirthCertificateScanFile, "ChildBirthCertificateScanFile", 2);
            ValidateFileLength(model.MilitaryCardScanFile, "MilitaryCardScanFile", 20);
            ValidateFileLength(model.MobilizationTicketScanFile, "MobilizationTicketScanFile", 2);
            ValidateFileLength(model.WorkBookScanFile, "WorkBookScanFile", 20);
            ValidateFileLength(model.WorkBookSupplementScanFile, "WorkBookSupplementScanFile", 20);
            ValidateFileLength(model.PersonalDataProcessingScanFile, "PersonalDataProcessingScanFile", 1);
            ValidateFileLength(model.InfoValidityScanFile, "InfoValidityScanFile", 1);

            if (!model.AgreedToPersonalDataProcessing)
                ModelState.AddModelError("AgreedToPersonalDataProcessing", "Подтвердите правильность предоставленных данных! Подтвердив правильность предоставленных данных, Вы не сможете больше вносить изменения в данную часть анкеты!");

            if (!model.IsScanFinal && model.IsAgree)
            {
                ModelState.AddModelError("IsScanFinal", "Подтвердите достоверность всех приложенных сканов документов! Подтвердив данный пункт, Вы не сможете больше вносить изменения в данную часть анкеты!");
            }

            if (model.IsScanFinal && model.IsAgree)
            {
                ScanOriginalDocumentsModel mt = EmploymentBl.GetScanOriginalDocumentsModel(model.UserId);

                if (model.SNILSScanFile == null && string.IsNullOrEmpty(mt.SNILSScanAttachmentFilename))
                {
                    ModelState.AddModelError("SNILSScanFile", "Не выбран файл скана СНИЛС для загрузки!");
                }

                if (model.InternalPassportScanFile == null && string.IsNullOrEmpty(mt.InternalPassportScanAttachmentFilename))
                {
                    ModelState.AddModelError("InternalPassportScanFile", "Не выбран файл скана документа для загрузки!");
                }

                if (!model.IsVolga)
                {
                    if (model.HigherEducationDiplomaScanFile == null && string.IsNullOrEmpty(mt.HigherEducationDiplomaScanFileName))
                    {
                        ModelState.AddModelError("HigherEducationDiplomaScanFile", "Не выбран файл скана документа об образовании для загрузки!");
                    }
                }

                if (!model.IsVolga)
                {
                    if (model.WorkBookScanFile == null && string.IsNullOrEmpty(mt.WorkBookScanAttachmentFilename))
                    {
                        ModelState.AddModelError("WorkBookScanFile", "Не выбран файл скана трудовой книжки/заявления для загрузки!");
                    }
                }

                if (model.PersonalDataProcessingScanFile == null && string.IsNullOrEmpty(mt.PersonalDataProcessingScanAttachmentFilename))
                {
                    ModelState.AddModelError("PersonalDataProcessingScanFile", "Не выбран файл скана для загрузки!");
                }

                if (model.InfoValidityScanFile == null && string.IsNullOrEmpty(mt.InfoValidityScanAttachmentFilename))
                {
                    ModelState.AddModelError("InfoValidityScanFile", "Не выбран файл скана для загрузки!");
                }
            }

            return ModelState.IsValid;
        }
        public ActionResult ScanOriginalDocuments(ScanOriginalDocumentsModel model)
        {
            string error = String.Empty;
            string SPPath = AuthenticationService.CurrentUser.Id.ToString();

            if (model.DeleteAttachmentId != 0)
            {
                if (((AuthenticationService.CurrentUser.UserRole == UserRole.PersonnelManager) && !EmploymentBl.IsUnlimitedEditAvailable()) || AuthenticationService.CurrentUser.UserRole == UserRole.ConsultantOutsourcing)
                {
                    ModelState.AddModelError("ErrorMessage", "У вас нет прав для редактирования данных!");
                    model = EmploymentBl.GetScanOriginalDocumentsModel(model.UserId);
                }
                else
                {
                    DeleteAttacmentModel modelDel = new DeleteAttacmentModel { Id = model.DeleteAttachmentId };
                    EmploymentBl.DeleteAttachment(modelDel);
                    model = EmploymentBl.GetScanOriginalDocumentsModel(model.UserId);
                    ModelState.AddModelError("ErrorMessage", "Файл удален!");
                }
            }
            else
            {
                ModelState.Clear();
                //кадровик не может менять список документов после выгрузки кандидата в 1С
                if (model.SendTo1C.HasValue)
                {
                    //model = EmploymentBl.GetScanOriginalDocumentsModel(model.UserId);
                    ModelState.AddModelError("ErrorMessage", "Кандидат выгружен в 1С! Любые изменения на данной страницы не возможны!");
                }
                else
                {
                    if (AuthenticationService.CurrentUser.UserRole == UserRole.PersonnelManager && !EmploymentBl.IsUnlimitedEditAvailable())
                    {
                        //model = EmploymentBl.GetScanOriginalDocumentsModel(model.UserId);
                        ModelState.AddModelError("ErrorMessage", "У вас нет прав для редактирования данных!");
                    }
                    else
                    {
                        if (ValidateModel(model))
                        {
                            string str = model.IsAgree ? "Данные сохранены!" : "Файл загружен!";
                            EmploymentBl.SaveScanOriginalDocumentsModelAttachments(model, out error);
                            //model = EmploymentBl.GetScanOriginalDocumentsModel(model.UserId);
                            ModelState.AddModelError("ErrorMessage", string.IsNullOrEmpty(error) ? str : error);
                        }
                        else
                        {   //так как при использования вкладок, страницу приходится перезагружать с потерей данных, то передаем модель с библиотекой ошибок через переменную сессии
                            //model = EmploymentBl.GetScanOriginalDocumentsModel(model.UserId);
                        }
                    }
                }
                model = EmploymentBl.GetScanOriginalDocumentsModel(model.UserId);
            }

            if (Session["ScanOriginalDocumentsM" + SPPath] != null)
                Session.Remove("ScanOriginalDocumentsM" + SPPath);
            if (Session["ScanOriginalDocumentsM" + SPPath] == null)
                Session.Add("ScanOriginalDocumentsM" + SPPath, model);

            if (Session["ScanOriginalDocumentsMS" + SPPath] != null)
                Session.Remove("ScanOriginalDocumentsMS" + SPPath);
            if (Session["ScanOriginalDocumentsMS" + SPPath] == null)
            {
                ModelStateDictionary mst = ModelState;
                Session.Add("ScanOriginalDocumentsMS" + SPPath, mst);
            }

            if ((AuthenticationService.CurrentUser.UserRole & UserRole.PersonnelManager) > 0 && EmploymentBl.IsUnlimitedEditAvailable())
                return Redirect("PersonnelInfo?id=" + model.UserId + "&IsCandidateInfoAvailable=true&IsBackgroundCheckAvailable=true&IsManagersAvailable=true&IsPersonalManagersAvailable=true&TabIndex=0");
            else
                return model.IsFinal && !EmploymentBl.IsUnlimitedEditAvailable() ? View("ScanOriginalDocumentsReadOnly", model) : View(model);
        }