/// <summary> /// Сохраняем изменения в справочнике штатных единиц. /// </summary> /// <param name="entity">Текущая заявка.</param> /// <param name="curUser">текущий пользователь.</param> /// <param name="error">Сообщение об ошибке.</param> /// <returns></returns> protected bool SaveStaffEstablishedPostReference(StaffEstablishedPostRequest entity, User curUser, out string error) { error = string.Empty; StaffEstablishedPost sep = entity.StaffEstablishedPost != null ? StaffEstablishedPostDao.Get(entity.StaffEstablishedPost.Id) : new StaffEstablishedPost(); //если заявка на создание, создаем новую запись и делаем в заявке на нее ссылку if (entity.RequestType.Id == 1 || entity.RequestType.Id == 4) { sep.Position = entity.Position; sep.Department = entity.Department; sep.Quantity = 0;// entity.Quantity; sep.Salary = entity.Salary; sep.IsUsed = true; sep.BeginAccountDate = entity.BeginAccountDate; sep.Creator = curUser; sep.CreateDate = DateTime.Now; } //изменилось количество изменяем количество связей if (!SaveStaffEstablishedPostChangeUserLinks(entity, sep, curUser, out error)) { return false; } else sep.Quantity = entity.Quantity; //если заявка на редактирование/удаление, редактируем текущую запись в справочнике if (entity.RequestType.Id != 1 && entity.RequestType.Id != 4) { if (entity.RequestType.Id == 2) { sep.Position = entity.Position; //пока решили не менять количество в заявках наизменение //sep.Quantity = entity.Quantity; sep.Salary = entity.Salary; } else if (entity.RequestType.Id == 3 && entity.StaffEstablishedPost.EstablishedPostUserLinks.Where(x => !x.IsDismissal).Count() == 0) { sep.IsUsed = false; //делаем неактивной текущую запись в справочнике, если больше нет в расстановке несокращенных записей } sep.BeginAccountDate = entity.BeginAccountDate; sep.Editor = curUser; sep.EditDate = DateTime.Now; } //для создания/изменения в надбавках делаем ссылку на штатную единицу if (entity.RequestType.Id != 3) { if (entity.PostChargeLinks.Count != 0) { foreach (var item in entity.PostChargeLinks) { item.EstablishedPost = sep; item.Editor = curUser; item.EditDate = DateTime.Now; } } } //архивируем изменения if (sep.EstablishedPostArchive == null) sep.EstablishedPostArchive = new List<StaffEstablishedPostArchive>(); sep.EstablishedPostArchive.Add(new StaffEstablishedPostArchive { StaffEstablishedPost = sep, Position = sep.Position, Department = sep.Department, Quantity = sep.Quantity, Salary = sep.Salary, IsUsed = sep.IsUsed, BeginAccountDate = sep.BeginAccountDate, Priority = sep.Priority, Creator = curUser, CreateDate = DateTime.Now }); try { StaffEstablishedPostDao.SaveAndFlush(sep); if (entity.StaffEstablishedPost == null) entity.StaffEstablishedPost = new StaffEstablishedPost(); entity.StaffEstablishedPost = sep; entity.DateSendToApprove = !entity.DateSendToApprove.HasValue ? DateTime.Now : entity.DateSendToApprove.Value;//отправлено на согласование entity.DateAccept = DateTime.Now;//согласовано //если создается новая штатная единица и в ней нет сотрудников, то надо указать признак выгрузки в 1С, чтобы пустые заявки не попали в выгрузку кадровых перемещений. //или сокращаются пустые места в расстановке if (entity.StaffEstablishedPost.EstablishedPostUserLinks.Where(x => x.User != null).Count() == 0 && entity.StaffEstablishedPost.EstablishedPostUserLinks.Where(x => x.User != null && x.IsDismissal && x.IsUsed).Count() == 0) { entity.SendTo1C = DateTime.Now; } //если заявка на сокращение или создание if (entity.RequestType.Id == 3 || entity.RequestType.Id == 1) entity.SendTo1C = DateTime.Now; } catch (Exception ex) { StaffEstablishedPostDao.RollbackTran(); error = string.Format("Произошла ошибка при сохранении данных! Исключение:{0}", ex.GetBaseException().Message); return false; } return true; }
/// <summary> /// Определяем состояние согласования заявки. /// </summary> /// <param name="model">Модель</param> /// <param name="entity">Данные заявки</param> protected void SetApprovalFlags(StaffEstablishedPostRequestModel model, StaffEstablishedPostRequest entity) { User curUser = UserDao.Get(AuthenticationService.CurrentUser.Id);//текущий пользователь //заполняем списки согласовантов if (entity.Creator != null) GetApprovalLists(model, entity); //за согласовантов могут отработать кураторы и кадровики банка. model.IsCurator = (AuthenticationService.CurrentUser.UserRole == UserRole.Inspector); model.IsPersonnelBank = (AuthenticationService.CurrentUser.UserRole == UserRole.ConsultantPersonnel); model.IsConsultant = (AuthenticationService.CurrentUser.UserRole == UserRole.ConsultantOutsourcing); //разбираемся с состоянием птиц //выбираем из согласования не архивные записи. IList<DocumentApproval> DocApproval = DocumentApprovalDao.GetDocumentApproval(entity.Id, (int)ApprovalTypeEnum.StaffEstablishedPostRequest); //для новых/автоматически сформированных заявок if (DocApproval == null || DocApproval.Count == 0) { model.IsInitiatorApproveAvailable = entity.IsUsed ? false : (model.Initiators.Count != 0 && (model.IsCurator || model.IsPersonnelBank || model.IsConsultant || (model.Initiators != null && model.Initiators.Where(x => x.Id == curUser.Id).Count() != 0)) ? true : false); model.IsTopManagerApproveAvailable = false; model.IsBoardMemberApproveAvailable = false; model.IsAgreeButtonAvailable = model.IsInitiatorApproveAvailable; } else { //потом проводим слесарную обработку по состоянию согласования foreach (DocumentApproval item in DocApproval.OrderBy(x => x.Number)) { string PyrusNumber = entity.StaffRequestPyrusTasks.Where(x => x.DocumentApproval.Number == item.Number).Count() != 0 ? entity.StaffRequestPyrusTasks.Where(x => x.DocumentApproval.Number == item.Number).Single().NumberTask : string.Empty; switch (item.Number) { case 1://инициатор model.IsInitiatorApprove = true; model.IsInitiatorApproveAvailable = false; model.InitiatorApproveName = "Заявка создана " + item.CreateDate.Value.ToShortDateString() + " " + (item.AssistantUser == null ? "Инициатор: " + item.ApproveUser.Name + " - " + item.ApproveUser.Position.Name : "Автор заявки: " + item.AssistantUser.Name + "; Инициатор: " + item.ApproveUser.Name + " - " + item.ApproveUser.Position.Name); model.InitiatorId = item.AssistantUser == null ? item.ApproveUser.Id : item.AssistantUser.Id; if (!string.IsNullOrEmpty(PyrusNumber)) { model.InitiatorPyrusName = "Задача в Пайрус № " + PyrusNumber; model.InitiatorPyrusRef = @"https://pyrus.com/t#id" + PyrusNumber; } //открываем согласование для следующего участника процесса model.IsCuratorApproveAvailable = model.IsCurator || model.IsConsultant ? true : false; model.IsAgreeButtonAvailable = model.IsCuratorApproveAvailable; //открываем согласование для следующего участника процесса if (entity.Department.DepartmentAccessory != null) { if (entity.Department.DepartmentAccessory.Id == 2 || entity.Department.DepartmentAccessory.Id == 6)//кураторы согласуют фронты и бэкфронты { model.IsCuratorApproveAvailable = model.IsCurator || model.IsConsultant ? true : false; model.IsAgreeButtonAvailable = model.IsCuratorApproveAvailable; } else { model.IsPersonnelBankApproveAvailable = model.IsPersonnelBank || model.IsConsultant ? true : false; model.IsAgreeButtonAvailable = model.IsPersonnelBankApproveAvailable; } } break; case 2://куратор model.IsCuratorApprove = true; model.IsCuratorApproveAvailable = false; model.CuratorApproveName = "Заявка проверена " + item.CreateDate.Value.ToShortDateString() + " " + "Куратор: " + item.ApproveUser.Name; if (!string.IsNullOrEmpty(PyrusNumber)) { model.CuratorPyrusName = "Задача в Пайрус № " + PyrusNumber; model.CuratorPyrusRef = @"https://pyrus.com/t#id" + PyrusNumber; } //открываем согласование для следующего участника процесса model.IsPersonnelBankApproveAvailable = model.IsPersonnelBank || model.IsConsultant ? true : false; model.IsAgreeButtonAvailable = model.IsPersonnelBankApproveAvailable; break; case 3://кадровик model.IsPersonnelBankApprove = true; model.IsPersonnelBankApproveAvailable = false; model.PersonnelBankApproveName = "Заявка проверена " + item.CreateDate.Value.ToShortDateString() + " " + "Кадровик банка: " + item.ApproveUser.Name; if (!string.IsNullOrEmpty(PyrusNumber)) { model.PersonnelBankPyrusName = "Задача в Пайрус № " + PyrusNumber; model.PersonnelBankPyrusRef = @"https://pyrus.com/t#id" + PyrusNumber; } //открываем согласование для следующего участника процесса model.IsTopManagerApproveAvailable = model.TopManagers.Count != 0 && (model.IsCurator || model.IsPersonnelBank || model.IsConsultant || model.TopManagers.Where(x => x.Id == curUser.Id).Count() != 0) ? true : false; model.IsAgreeButtonAvailable = model.IsTopManagerApproveAvailable; break; case 4://вышестоящий руководитель model.IsTopManagerApprove = true; model.IsTopManagerApproveAvailable = false; model.TopManagerApproveName = "Заявка согласована " + item.CreateDate.Value.ToShortDateString() + " " + (item.AssistantUser == null ? "Согласовант: " + item.ApproveUser.Name + " - " + item.ApproveUser.Position.Name : "Согласовал: " + item.AssistantUser.Name + "; Согласовант: " + item.ApproveUser.Name + " - " + item.ApproveUser.Position.Name); model.TopManagerId = item.AssistantUser == null ? item.ApproveUser.Id : item.AssistantUser.Id; if (!string.IsNullOrEmpty(PyrusNumber)) { model.TopManagerPyrusName = "Задача в Пайрус № " + PyrusNumber; model.TopManagerPyrusRef = @"https://pyrus.com/t#id" + PyrusNumber; } //открываем согласование для следующего участника процесса model.IsBoardMemberApproveAvailable = model.BoardMembers.Count != 0 && (model.IsCurator || model.IsPersonnelBank || model.IsConsultant || model.BoardMembers.Where(x => x.Id == curUser.Id).Count() != 0) ? true : false; model.IsAgreeButtonAvailable = model.IsBoardMemberApproveAvailable; break; case 5://член правления model.IsBoardMemberApprove = true; model.IsBoardMemberApproveAvailable = false; model.BoardMemberApproveName = "Заявка утверждена " + item.CreateDate.Value.ToShortDateString() + " " + (item.AssistantUser == null ? "Утвердил: " + item.ApproveUser.Name + " - Член правления банка"// + item.ApproveUser.Position.Name : "Утвердил: " + item.AssistantUser.Name + "; Утверждающий: " + item.ApproveUser.Name + " - Член правления банка"); model.BoardMemberId = item.AssistantUser == null ? item.ApproveUser.Id : item.AssistantUser.Id; model.IsAgreeButtonAvailable = false; if (!string.IsNullOrEmpty(PyrusNumber)) { model.BoardMemberPyrusName = "Задача в Пайрус № " + PyrusNumber; model.BoardMemberPyrusRef = @"https://pyrus.com/t#id" + PyrusNumber; } break; } } } if (UserRole.Manager != AuthenticationService.CurrentUser.UserRole && UserRole.Inspector != AuthenticationService.CurrentUser.UserRole && UserRole.ConsultantOutsourcing != AuthenticationService.CurrentUser.UserRole && UserRole.ConsultantPersonnel != AuthenticationService.CurrentUser.UserRole && UserRole.Director != AuthenticationService.CurrentUser.UserRole) { model.IsAgreeButtonAvailable = false; } if (entity.DeleteDate.HasValue) { model.IsDraftButtonAvailable = false; model.IsAgreeButtonAvailable = false; } }
/// <summary> /// Меняем количество связей штатной единицы с сотрудниками. /// </summary> /// <param name="entity">Заявка</param> /// <param name="sep">Штатная единица</param> /// <param name="curUser">Текущий пользователь</param> /// <param name="error">Для сообщений</param> /// <returns></returns> protected bool SaveStaffEstablishedPostChangeUserLinks(StaffEstablishedPostRequest entity, StaffEstablishedPost sep, User curUser, out string error) { error = string.Empty; int CountLinks = sep.EstablishedPostUserLinks != null ? sep.EstablishedPostUserLinks.Count() : 0; //если количество штатных единиц увеличилось, то нужно добавить необходимое количество записей для связей if (entity.Quantity > CountLinks) { CountLinks = entity.Quantity - CountLinks; if(sep.EstablishedPostUserLinks == null) sep.EstablishedPostUserLinks = new List<StaffEstablishedPostUserLinks>(); for (int i = 0; i < CountLinks; i++) { sep.EstablishedPostUserLinks.Add(new StaffEstablishedPostUserLinks() { StaffEstablishedPost = sep, User = null, IsUsed = true, Creator = curUser, CreateDate = DateTime.Now }); } } ////редактирование временных вакансий //if ((entity.RequestType.Id == 1 || entity.RequestType.Id == 2 || entity.RequestType.Id == 4) && sep.EstablishedPostUserLinks.Where(x => !x.IsDismissal && x.IsTemporary).Count() != 0) //{ // //на случай добавления временной вакансии // CountLinks = sep.EstablishedPostUserLinks != null ? sep.EstablishedPostUserLinks.Count() : 0; // if (entity.Quantity > CountLinks) // { // CountLinks = entity.Quantity - CountLinks; // for (int i = 0; i < CountLinks; i++) // { // sep.EstablishedPostUserLinks.Add(new StaffEstablishedPostUserLinks() // { // StaffEstablishedPost = sep, // User = null, // IsUsed = true, // Creator = curUser, // CreateDate = DateTime.Now // }); // } // } // foreach (var item in sep.EstablishedPostUserLinks // .Where(x => x.IsUsed && x.IsDismissal)) // { // item.IsUsed = false; // item.Editor = curUser; // item.EditDate = DateTime.Now; // } //} //сокращение if ((entity.RequestType.Id == 3 || entity.RequestType.Id == 4) && sep.EstablishedPostUserLinks.Where(x => x.IsUsed && x.IsDismissal).Count() != 0) { //если частичное сокращение в расстановке, то меняем количество единиц в заявке if (sep.EstablishedPostUserLinks.Where(x => x.IsUsed && x.IsDismissal).Count() != 0 && sep.EstablishedPostUserLinks.Where(x => x.IsUsed && !x.IsDismissal).Count() != 0) { entity.Quantity = sep.EstablishedPostUserLinks.Where(x => x.IsUsed && !x.IsDismissal).Count(); } foreach (var item in sep.EstablishedPostUserLinks .Where(x => x.IsUsed && x.IsDismissal)) { item.IsUsed = false; item.Editor = curUser; item.EditDate = DateTime.Now; } } return true; }
/// <summary> /// Сохраняем согласования. /// </summary> /// <param name="model">Модель</param> /// <param name="entity">Текущая заявка.</param> /// <param name="curUser">текущий пользователь.</param> /// <param name="error">Сообщение об ошибке.</param> /// <returns></returns> protected int SaveStaffEstablishedPostApprovals(StaffEstablishedPostRequestModel model, StaffEstablishedPostRequest entity, User curUser, out string error) { //возвращает значения от 1 до 4 - этап согласования прошел успешно, 0 - согласование завершено, заявка утверждена, -1 - ошибка при сохранении данных //только после утверждения заявки можно редактировать справочник подразделений. error = string.Empty; //в каждой ветке определяемся с участниками групповухи под кодовым названием согласование/утверждение заявки для подразделения //текущим пользователем может быть куратор ии кадровик, которые могут действовать за согласовантов User Assistant = AuthenticationService.CurrentUser.UserRole == UserRole.Inspector || AuthenticationService.CurrentUser.UserRole == UserRole.ConsultantPersonnel || AuthenticationService.CurrentUser.UserRole == UserRole.ConsultantOutsourcing ? curUser : null;//куратор/кадровик банка/консультант РК //выбираем из согласования не архивные записи. IList<DocumentApproval> DocApproval = DocumentApprovalDao.GetDocumentApproval(entity.Id, (int)ApprovalTypeEnum.StaffEstablishedPostRequest); DocumentApproval da = new DocumentApproval(); da.ApprovalType = (int)ApprovalTypeEnum.StaffEstablishedPostRequest; da.DocId = entity.Id; da.IsArchive = false; da.CreateDate = DateTime.Now; switch (DocApproval.Count) { case 0: //если иницатор не выбран, это значит, что инициатор действует сам User Initiator = model.InitiatorId != 0 ? UserDao.Get(model.InitiatorId) : curUser;//инициатор da.ApproveUser = Initiator; da.AssistantUser = Assistant; da.Number = 1; error = "Заявка создана!"; break; case 1: da.ApproveUser = curUser; da.AssistantUser = null; da.Number = 2; error = "Заявка проверена куратором!"; break; case 2: da.ApproveUser = curUser; da.AssistantUser = null; da.Number = 3; error = "Заявка проверена кадровиком банка!"; break; case 3: //если согласовант не выбран, это значит, что он действует сам User TopManager = model.TopManagerId != 0 ? UserDao.Get(model.TopManagerId) : curUser;//высший руководитель da.ApproveUser = TopManager; da.AssistantUser = Assistant; da.Number = 4; error = "Заявка согласована!"; break; case 4: //если утверждающий не выбран, это значит, что он действует сам User BoardMember = model.BoardMemberId != 0 ? UserDao.Get(model.BoardMemberId) : curUser;//член правления da.ApproveUser = BoardMember; da.AssistantUser = Assistant; da.Number = 5; error = "Заявка утверждена!"; break; } try { DocumentApprovalDao.SaveAndFlush(da); //сохраняем здачу пайруса if (!string.IsNullOrEmpty(model.PyrusNumber)) { entity.StaffRequestPyrusTasks.Add(new StaffRequestPyrusTasks() { EPRequest = entity, DocumentApproval = da, NumberTask = model.PyrusNumber, Creator = curUser, CreateDate = DateTime.Now }); } if (da.Number == 1) { entity.DateSendToApprove = DateTime.Now; return da.Number; } if (da.Number > 1 && da.Number < 5) return da.Number; if (da.Number == 5) { //entity.BeginAccountDate = DateTime.Now; entity.DateAccept = DateTime.Now; } } catch (Exception ex) { DocumentApprovalDao.RollbackTran(); error = string.Format("Произошла ошибка при сохранении данных! Исключение:{0}", ex.GetBaseException().Message); return -1; } return 0; }
/// <summary> /// Процедура заполняет списки согласовантов, на случай, если за них согласовывают кураторы или кадровики банка. /// </summary> /// <param name="model">Модель</param> /// <param name="entity">Данные заявки.</param> protected void GetApprovalLists(StaffEstablishedPostRequestModel model, StaffEstablishedPostRequest entity) { //определяем родительское подразделение Department Parentdep = DepartmentDao.GetByCode(entity.Department.ParentId.ToString()); //относительно родительского ищем руководителей //помним, что начальника может не быть в родительском подразделении, по этому ищем вверх по ветке всех руководителей IList<User> Initiators = DepartmentDao.GetDepartmentManagersWithManualLinks(model.DepartmentId)//DepartmentDao.GetDepartmentManagers(Parentdep.Id, true) .OrderByDescending<User, int?>(manager => manager.Level) .ToList<User>(); ////если инициатором является куратор или кадровик банка, то по ветке подразделения находим руководителей на уровень выше создаваемого подразделения if (entity.Creator.Id == AuthenticationService.CurrentUser.Id && AuthenticationService.CurrentUser.UserRole == UserRole.Manager) { model.Initiators = Initiators.Where(x => x.Id == AuthenticationService.CurrentUser.Id).ToList().ConvertAll(x => new IdNameDto { Id = x.Id, Name = x.Name + " - " + x.Position.Name }); } else { model.Initiators = Initiators.Where(x => x.Level >= 3).ToList().ConvertAll(x => new IdNameDto { Id = x.Id, Name = x.Name + " - " + x.Position.Name }); //если создатель заявки руководитель, то позиционируемся на нем if (entity.Creator.UserRole == UserRole.Manager) model.InitiatorId = entity.Creator.Id; } //вышестоящее руководство model.TopManagers = Initiators.Where(x => x.Level <= 3).ToList().ConvertAll(x => new IdNameDto { Id = x.Id, Name = x.Name + " - " + x.Position.Name }); //члены правления model.BoardMembers = UserDao.GetUsersWithRole(UserRole.Director) .Where(x => x.IsActive && x.DirectorsRight.Count != 0) .ToList() .ConvertAll(x => new IdNameDto { Id = x.Id, Name = x.Name + " - Член правления банка" }); }
/// <summary> /// Процедура сохранения новой заявки для штатной единицы. /// </summary> /// <param name="model">Модель заявки.</param> /// <param name="error">Сообщенио об ошибке.</param> /// <returns></returns> public bool SaveNewEstablishedPostRequest(StaffEstablishedPostRequestModel model, out string error) { error = string.Empty; StaffEstablishedPostRequest entity; User curUser = UserDao.Load(AuthenticationService.CurrentUser.Id); //несогласованная заявка для штатной единицы должна быть только одна if (model.RequestTypeId != 1)//для редактирования и сокращения { if (!StaffEstablishedPostRequestDao.CheckEnabeldCreateNewRequest(model.SEPId, model.Id)) { error = "Создать новую заявку для данной штатной единицы невозможно, так как уже существует неутвержденная заявка!"; return false; } } if (model.Id == 0) { entity = new StaffEstablishedPostRequest { RequestType = StaffEstablishedPostRequestTypesDao.Load(model.RequestTypeId), DateRequest = DateTime.Now, StaffEstablishedPost = model.RequestTypeId == 1 ? null : StaffEstablishedPostDao.Get(model.SEPId), Position = PositionDao.Get(model.PositionId), Department = model.DepartmentId != 0 ? DepartmentDao.Get(model.DepartmentId) : null, Schedule = model.ScheduleId != 0 ? ScheduleDao.Get(model.ScheduleId) : null, WorkingCondition = model.WCId != 0 ? StaffWorkingConditionsDao.Get(model.WCId) : null, Quantity = model.RequestTypeId != 3 ? model.Quantity : model.QuantityPrev, Salary = model.RequestTypeId != 3 ? model.Salary : model.SalaryPrev, BeginAccountDate = model.BeginAccountDate, IsUsed = false, IsDraft = true, Reason = model.ReasonId.HasValue ? AppointmentReasonDao.Get(model.ReasonId.Value) : null, Creator = curUser, CreateDate = DateTime.Now }; //надбавки entity.PostChargeLinks = new List<StaffEstablishedPostChargeLinks>(); foreach (var item in model.PostChargeLinks.Where(x => x.Amount != 0 || x.IsUsed)) { entity.PostChargeLinks.Add(new StaffEstablishedPostChargeLinks { EstablishedPostRequest = entity, EstablishedPost = entity.StaffEstablishedPost, ExtraCharges = StaffExtraChargesDao.Get(item.ChargeId), Amount = item.Amount, ExtraChargeActions = StaffExtraChargeActionsDao.Get(item.ActionId), IsUsed = item.IsUsed, Creator = curUser, CreateDate = DateTime.Now }); } //расстановка //при сокращении или вводе ременной вакансии ставим метки в расстановке if (entity.RequestType.Id == 2 || entity.RequestType.Id == 3 || (entity.RequestType.Id == 4 && (model.Personnels != null && model.Personnels.Count != 0))) { ////на случай добавления вакансии //if (entity.RequestType.Id == 2 || (entity.RequestType.Id == 4 && model.Personnels.Count != 0)) //{ // int CountLinks = entity.StaffEstablishedPost.EstablishedPostUserLinks != null ? entity.StaffEstablishedPost.EstablishedPostUserLinks.Count() : 0; // if (entity.Quantity > CountLinks) // { // CountLinks = entity.Quantity - CountLinks; // for (int i = 0; i < CountLinks; i++) // { // entity.StaffEstablishedPost.EstablishedPostUserLinks.Add(new StaffEstablishedPostUserLinks() // { // StaffEstablishedPost = entity.StaffEstablishedPost, // User = null, // IsUsed = false, // Creator = curUser, // CreateDate = DateTime.Now // }); // } // } //} foreach (StaffEstablishedPostUserLinks ul in entity.StaffEstablishedPost.EstablishedPostUserLinks) { if (model.Personnels.Where(x => x.Id == ul.Id).Count() != 0) { StaffUserLinkDto item = model.Personnels.Where(x => x.Id == ul.Id).FirstOrDefault(); if (entity.RequestType.Id == 3 || entity.RequestType.Id == 4) { ul.IsDismissal = item.IsDismissal;//model.Personnels.Where(x => x.Id == ul.Id).Single().IsDismissal; ul.DateDistribNote = item.DateDistribNote; ul.DateReceivNote = item.DateReceivNote; } ul.Editor = curUser; ul.EditDate = DateTime.Now; } } } try { StaffEstablishedPostRequestDao.SaveAndFlush(entity); model.Id = entity.Id; error = "Данные сохранены!"; return true; } catch (Exception ex) { StaffEstablishedPostRequestDao.RollbackTran(); error = string.Format("Произошла ошибка при сохранении данных! Исключение:{0}", ex.GetBaseException().Message); return false; } } //если не по той ветке пошли error = "Произошла ошибка при сохранении данных! Обратитесь к разработчикам!"; return false; }
/// <summary> /// Заполняем модель заявки для штатной единицы. /// </summary> /// <param name="model">Модель заявки.</param> /// <returns></returns> public StaffEstablishedPostRequestModel GetEstablishedPostRequest(StaffEstablishedPostRequestModel model) { //готовая заявка грузиться по Id //создание заявки на создание ШЕ, идет по ветке где Id = 0 //создание заявки на изменение/удаление, нужно заполнить текущими даными, но с обнуленным Id, чтобы создалась новая заявка //для заявок на редактирование надо сделать поиск текущей заявки по Id штатной единицы, для того чтобы ее заполнить только данными, а Id самой заявки обнулить, чтобы запись добавилась, а не редактировалась bool IsRequestExists = model.Id == 0 ? false : true; if (model.Id == 0) model.Id = StaffEstablishedPostRequestDao.GetCurrentRequestId(model.SEPId); //заполняем заявку на все случаи жизни if (model.Id == 0) { Department CurDep = DepartmentDao.Get(model.DepartmentId); model.DateRequest = null; model.UserId = AuthenticationService.CurrentUser.Id; model.PositionId = 0; model.PositionName = string.Empty; model.Quantity = 0; model.Salary = 0; model.ReasonId = 0; model.ScheduleId = 0; model.WCId = 0; model.BeginAccountDate = DateTime.Now; model.EPInfo = string.Empty; model.ItemLevel = CurDep == null || !CurDep.ItemLevel.HasValue ? 0 : CurDep.ItemLevel.Value; //кнопки model.IsDraftButtonAvailable = true; model.IsAgreeButtonAvailable = false; } else { StaffEstablishedPostRequest PrevEntity = new StaffEstablishedPostRequest(); //для заявок на изменение нужно показать предыдущий оклад StaffEstablishedPostRequest entity = StaffEstablishedPostRequestDao.Get(model.Id); if (entity == null) //если нет заявки с таким идентификатором, грузим новую заявку на создание штатной единицы { model.Id = 0; return GetEstablishedPostRequest(model); } if (model.SEPId != 0) PrevEntity = StaffEstablishedPostRequestDao.GetPrevEstablishedPostRequest(model.SEPId, entity.Id); if (!IsRequestExists) { model.Id = 0; } model.IsUsed = entity.IsUsed; model.RequestTypeId = model.Id == 0 ? model.RequestTypeId : entity.RequestType.Id; model.UserId = entity.Creator != null ? entity.Creator.Id : 0; model.DateRequest = entity.DateRequest; model.DepartmentId = entity.Department != null ? entity.Department.Id : 0; model.ItemLevel = entity.Department != null ? entity.Department.ItemLevel.Value : 0; model.BFGId = entity.Department != null && entity.Department.DepartmentAccessory != null ? entity.Department.DepartmentAccessory.Id : 0; model.PositionId = entity.Position != null ? entity.Position.Id : 0; model.PositionName = entity.Position != null ? entity.Position.Name : string.Empty; model.Quantity = entity.Quantity; model.QuantityPrev = entity.Quantity; model.Salary = entity.Salary; model.SalaryPrev = PrevEntity != null ? PrevEntity.Salary : 0; model.ReasonId = entity.Reason == null ? 0 : entity.Reason.Id; model.ScheduleId = entity.Schedule == null ? 0 : entity.Schedule.Id; model.WCId = entity.WorkingCondition == null ? 0 : entity.WorkingCondition.Id; model.BeginAccountDate = model.Id == 0 ? model.BeginAccountDate : entity.BeginAccountDate; int UsersCount = StaffEstablishedPostDao.GetEstablishedPostUsed(entity.StaffEstablishedPost != null ? entity.StaffEstablishedPost.Id : 0); model.EPInfo = "Занято - " + (UsersCount).ToString() + "; Вакантно - " + (entity.Quantity - UsersCount).ToString(); //кнопки model.IsDraftButtonAvailable = entity.DeleteDate.HasValue ? false : true; model.IsAgreeButtonAvailable = entity.DeleteDate.HasValue ? false : !entity.DateAccept.HasValue; } model.PyrusNumber = ""; LoadDictionaries(model); //для новых заявок надо подгружать надбавки от текущего состояния штатной единицы, берем действующую заявку, иначе по заполняем по текущей заявке model.PostChargeLinks = StaffEstablishedPostChargeLinksDao.GetChargesForRequests(model.RequestTypeId != 1 && model.Id == 0 ? StaffEstablishedPostRequestDao.GetCurrentRequestId(model.SEPId) : model.Id).OrderBy(x => x.ChargeName).ToList(); return model; }