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;
     }
 }
Exemple #3
0
 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;
     }
 }
Exemple #4
0
 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;
 }
Exemple #5
0
 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;
 }
Exemple #6
0
        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;
            }
        }
Exemple #7
0
 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;
 }
Exemple #8
0
 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;
 }
Exemple #9
0
 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;
     }
 }