public ActionResult DocumentEdit(EmployeeDocumentEditModel model) { try { CorrectCheckboxes(model); UploadFileDto fileDto = GetFileContext(); if (ModelState.IsValid) { string error; if (!EmployeeBl.SaveEditDocument(model, fileDto,out error)) { if(!string.IsNullOrEmpty(error)) ModelState.AddModelError("",error); if (model.ReloadPage) return View(EmployeeBl.GetDocumentEditModel(model.DocumentId, model.UserId.Value)); } } else EmployeeBl.SetStaticDataToModel(model); return View(model); } catch (Exception ex) { Log.Error("Error on DocumentEdit:", ex); throw; } }
protected void CorrectCheckboxes(EmployeeDocumentEditModel model) { if (!model.IsApprovedByManagerEnable && model.IsApprovedByManagerHidden) { if (ModelState.ContainsKey("IsApprovedByManager")) ModelState.Remove("IsApprovedByManager"); model.IsApprovedByManager = model.IsApprovedByManagerHidden; } if (!model.IsApprovedByPersonnelManagerEnable && model.IsApprovedByPersonnelManagerHidden) { if (ModelState.ContainsKey("IsApprovedByPersonnelManager")) ModelState.Remove("IsApprovedByPersonnelManager"); model.IsApprovedByPersonnelManager = model.IsApprovedByPersonnelManagerHidden; } if (!model.IsApprovedByBudgetManagerEnable && model.IsApprovedByBudgetManagerHidden) { if (ModelState.ContainsKey("IsApprovedByBudgetManager")) ModelState.Remove("IsApprovedByBudgetManager"); model.IsApprovedByBudgetManager = model.IsApprovedByBudgetManagerHidden; } if (!model.IsApprovedByOutsorsingManagerEnable && model.IsApprovedByOutsorsingManagerHidden) { if (ModelState.ContainsKey("IsApprovedByOutsorsingManager")) ModelState.Remove("IsApprovedByOutsorsingManager"); model.IsApprovedByOutsorsingManager = model.IsApprovedByOutsorsingManagerHidden; } }
protected void SetControlsState(EmployeeDocumentEditModel model, User owner) { switch (CurrentUser.UserRole) { case UserRole.Employee: if (owner.Id != CurrentUser.Id) throw new ArgumentException("Доступ к документу запрещен."); model.IsEditable = !model.IsApprovedByManager; model.IsSaveAvailable = !model.IsApprovedByManager; break; case UserRole.Manager: if (owner.Manager.Id != CurrentUser.Id) throw new ArgumentException("Доступ к документу запрещен."); model.IsApprovedByManagerEnable = !model.IsApprovedByManager; model.IsSaveAvailable = !model.IsApprovedByManager; break; case UserRole.BudgetManager: //if (owner.BudgetManager.Id != CurrentUser.Id) // throw new ArgumentException("Доступ к документу запрещен."); model.IsApprovedByBudgetManagerEnable = !model.IsApprovedByBudgetManager; model.IsSaveAvailable = !model.IsApprovedByBudgetManager; break; case UserRole.PersonnelManager: if (owner.Personnels.Where(x => x.Id == CurrentUser.Id).FirstOrDefault() == null ) throw new ArgumentException("Доступ к документу запрещен."); model.IsApprovedByPersonnelManagerEnable = !model.IsApprovedByPersonnelManager; model.IsSaveAvailable = !model.IsApprovedByPersonnelManager; break; case UserRole.Estimator: case UserRole.OutsourcingManager: //if (owner.OutsourcingManager.Id != CurrentUser.Id) // throw new ArgumentException("Доступ к документу запрещен."); model.IsApprovedByOutsorsingManagerEnable = !model.IsApprovedByOutsorsingManager; model.IsSaveAvailable = !model.IsApprovedByOutsorsingManager; model.IsSendToBillingAvailable = model.IsApprovedByOutsorsingManager && !model.SendEmailToBilling; break; } }
protected Document SetDocumentFromModel(EmployeeDocumentEditModel model, UploadFileDto fileDto, Document doc, EmployeeDocumentType type, IList<EmployeeDocumentSubType> subTypes, out Attachment attach) { doc.Comment = model.EditComment; doc.LastModifiedDate = DateTime.Now; doc.Type = type; doc.SubType = subTypes.Where(x => x.Id == model.DocumentSubTypeId).FirstOrDefault(); doc = DocumentDao.MergeAndFlush(doc); attach = null; if (model.DocumentId != 0) attach = AttachmentDao.FindByDocumentId(doc.Id); if (fileDto != null) { if (attach == null) attach = new Attachment(); attach.Context = fileDto.Context; attach.ContextType = fileDto.ContextType; attach.FileName = fileDto.FileName; attach.Document = doc; AttachmentDao.SaveAndFlush(attach); } return doc; }
public void SetStaticDataToModel(EmployeeDocumentEditModel model) { SetUserModel(model, model.UserId.Value); model.CommentsModel = SetCommentsModel(model.DocumentId); //SetControlsState(model, owner); List<EmployeeDocumentType> types = GetEmployeeDocumentTypes(); model.DocumentTypes = types.ConvertAll(x => new IdNameDto(x.Id, x.Name)); EmployeeDocumentType type = types.Where(x => x.Id == model.DocumentTypeId).First(); IList<EmployeeDocumentSubType> subTypes = type.SubTypes.OrderBy(x => x.Name).ToList(); model.DocumentSubTypes = subTypes.ToList().ConvertAll(x => new IdNameDto(x.Id, x.Name)); EmployeeDocumentSubType subtype = subTypes.Where(x => x.Id == model.DocumentSubTypeId).FirstOrDefault(); model.DocumentSubTypeId = subtype == null ? 0 : subtype.Id; }
public bool SaveEditDocumentInternal(EmployeeDocumentEditModel model, UploadFileDto fileDto, User owner, out string Error) { try { bool isNewDocument = false; Error = null; List<EmployeeDocumentType> types = GetEmployeeDocumentTypes(); model.DocumentTypes = types.ConvertAll(x => new IdNameDto(x.Id, x.Name)); EmployeeDocumentType type = types.Where(x => x.Id == model.DocumentTypeId).First(); IList<EmployeeDocumentSubType> subTypes = type.SubTypes.OrderBy(x => x.Name).ToList(); model.DocumentSubTypes = subTypes.ToList().ConvertAll(x => new IdNameDto(x.Id, x.Name)); Document doc = null; if (model.DocumentId != 0) { doc = DocumentDao.Load(model.DocumentId); if (model.Version != doc.Version) { model.ReloadPage = true; Error = "Документ был изменен."; return false; } //throw new ModifyDocumentException("Документ был изменен."); } IUser user = AuthenticationService.CurrentUser; if (((user.UserRole & UserRole.Employee) != UserRole.Employee) && (model.DocumentId == 0)) throw new ArgumentException("Новый документ может быть создан только сотрудником"); if ((user.UserRole & UserRole.Employee) == UserRole.Employee) { if (user.Id != owner.Id) throw new ArgumentException("Доступ к документу запрещен."); if (doc == null) { doc = new Document {Type = type, User = owner}; isNewDocument = true; } if (doc.ManagerDateAccept.HasValue) { model.ReloadPage = true; Error = "Документ уже был одобрен руководителем, его изменение невозможно"; return false; } //throw new ModifyDocumentException("Документ уже был одобрен руководителем, его изменение невозможно"); Attachment attach; doc = SetDocumentFromModel(model, fileDto, doc, type, subTypes, out attach); model.Date = doc.LastModifiedDate; model.DocumentId = doc.Id; if (attach != null) { model.AttachmentId = attach.Id; model.Attachment = attach.FileName; } } else if ((user.UserRole & UserRole.Manager) == UserRole.Manager) { if (user.Id != owner.Manager.Id) throw new ArgumentException("Доступ к документу запрещен."); if (doc.ManagerDateAccept.HasValue) { Error = "Документ уже был одобрен."; return false; } if (model.IsApprovedByManager) { doc.ManagerDateAccept = DateTime.Now; doc = DocumentDao.MergeAndFlush(doc); } } else if ((user.UserRole & UserRole.PersonnelManager) == UserRole.PersonnelManager) { if (owner.Personnels.Where(x => x.Id == user.Id).FirstOrDefault() == null) throw new ArgumentException("Доступ к документу запрещен."); if (doc.PersonnelManagerDateAccept.HasValue) { Error = "Документ уже был одобрен."; return false; } if (model.IsApprovedByPersonnelManager) { doc.PersonnelManagerDateAccept = DateTime.Now; doc = DocumentDao.MergeAndFlush(doc); } } else if ((user.UserRole & UserRole.BudgetManager) == UserRole.BudgetManager) { //if (user.Id != owner.BudgetManager.Id) // throw new ArgumentException("Доступ к документу запрещен."); if (doc.BudgetManagerDateAccept.HasValue) { Error = "Документ уже был одобрен."; return false; } if (model.IsApprovedByBudgetManager) { doc.BudgetManagerDateAccept = DateTime.Now; doc = DocumentDao.MergeAndFlush(doc); } } else if ((user.UserRole & UserRole.OutsourcingManager) == UserRole.OutsourcingManager || (user.UserRole & UserRole.Estimator) == UserRole.Estimator) { //if (user.Id != owner.OutsourcingManager.Id) // throw new ArgumentException("Доступ к документу запрещен."); if (doc.OutsourcingManagerDateAccept.HasValue) { Error = "Документ уже был обработан."; return false; } if (model.IsApprovedByOutsorsingManager) { doc.OutsourcingManagerDateAccept = DateTime.Now; doc = DocumentDao.MergeAndFlush(doc); } } model.Version = doc.Version; if(isNewDocument) { Settings settings = SettingsDao.LoadFirst(); if(settings == null) Log.Error("Отсутствуют настройки в базе данных."); else if (settings.SendEmailToManagerAboutNew) { if (doc.User.Manager == null || string.IsNullOrEmpty(doc.User.Manager.Email)) Log.WarnFormat("У пользователя {0} (Id {1}) отсутствует руководитель или e-mail руководителя не указан.", doc.User.FullName, doc.User.Id); else { SendEmail(settings, model, doc.User.Manager.Email, "Новая заявка", string.Format("Пользователем {0} создана новая заявка.", doc.User.FullName)); if (!string.IsNullOrEmpty(model.EmailDto.Error)) Log.WarnFormat( "Письмо о новой заявке пользователя {0}(Id {1}) не было отправлено руководителю {2}.Ошибка: {3}", doc.User.FullName, doc.User.Id, doc.User.Manager.FullName, model.EmailDto.Error); } } } return true; } catch (Exception ex) { Log.Error("Error on DocumentEdit:", ex); Error = string.Format("Исключение:{0}", ex.GetBaseException().Message); return false; } }
public bool SaveEditDocument(EmployeeDocumentEditModel model, UploadFileDto fileDto, out string Error) { User owner = SetUserModel(model, model.UserId.Value); bool result = SaveEditDocumentInternal(model, fileDto, owner, out Error); model.CommentsModel = SetCommentsModel(model.DocumentId); //SetCommentsModel(model, model.DocumentId); SetControlsState(model, owner); return result; }
public EmployeeDocumentEditModel GetDocumentEditModel(int id, int ownerId) { EmployeeDocumentEditModel model = new EmployeeDocumentEditModel { UserId = ownerId }; User owner = SetUserModel(model, ownerId); SetEditModel(model, id); //SetCommentsModel(model, id); model.CommentsModel = SetCommentsModel(id); SetControlsState(model, owner); return model; }
protected void SetEditModel(EmployeeDocumentEditModel model, int id) { List<EmployeeDocumentType> types = GetEmployeeDocumentTypes(); model.DocumentTypes = types.ConvertAll(x => new IdNameDto(x.Id, x.Name)); if (id > 0) { DocumentAndAttachmentDto doc = DocumentDao.GetDocumentAndAttachmentForId(id); if (doc == null) throw new ArgumentException(string.Format("Не могу найти документ с Id {0} в базе данных.", id)); model.Date = doc.Date; model.DocumentId = doc.Id; model.DocumentTypeId = doc.TypeId; model.DocumentSubTypeId = doc.SubTypeId; model.DocumentSubTypes = GetDocumentSubTypes(types, doc.TypeId);//subTypes.ToList().ConvertAll(x => new IdNameDto(x.Id, x.Name)); model.EditComment = doc.Comment; model.IsApprovedByManager = doc.ManagerDateAccept.HasValue; model.IsApprovedByPersonnelManager = doc.PersonnelManagerDateAccept.HasValue; model.IsApprovedByBudgetManager = doc.BudgetManagerDateAccept.HasValue; model.IsApprovedByOutsorsingManager = doc.OutsourcingManagerDateAccept.HasValue; model.Attachment = doc.AttachName; model.AttachmentId = doc.AttachId; model.Version = doc.Version; model.SendEmailToBilling = doc.SendEmailToBilling; } else { model.DocumentId = 0; model.Date = DateTime.Today; model.DocumentTypeId = model.DocumentTypes[0].Id; model.DocumentSubTypes = GetDocumentSubTypes(types, model.DocumentTypeId); //subTypes.ToList().ConvertAll(x => new IdNameDto(x.Id, x.Name)); model.DocumentSubTypeId = model.DocumentSubTypes[0].Id; } }