/// <summary> /// Определяем состояние согласования заявки. /// </summary> /// <param name="model">Модель</param> /// <param name="entity">Данные заявки</param> protected void SetApprovalFlags(StaffDepartmentRequestModel model, StaffDepartmentRequest entity) { User curUser = UserDao.Get(AuthenticationService.CurrentUser.Id);//текущий пользователь //заполняем списки согласовантов GetApprovalLists(model, entity); model.IsImportance = true; //за согласовантов могут отработать кураторы и кадровики банка. model.IsCurator = (AuthenticationService.CurrentUser.UserRole == UserRole.Inspector); model.IsPersonnelBank = (AuthenticationService.CurrentUser.UserRole == UserRole.ConsultantPersonnel); model.IsConsultant = (AuthenticationService.CurrentUser.UserRole == UserRole.ConsultantOutsourcing); model.IsTaxCollector = (AuthenticationService.CurrentUser.UserRole == UserRole.TaxCollector); model.IsOrder = (AuthenticationService.CurrentUser.UserRole == UserRole.StaffListOrder); model.IsSoftAdmin = (AuthenticationService.CurrentUser.UserRole == UserRole.SoftAdmin); model.IsAgreeButtonAvailable = false; //разбираемся с состоянием птиц //выбираем из согласования не архивные записи. IList<DocumentApproval> DocApproval = DocumentApprovalDao.GetDocumentApproval(entity.Id, (int)ApprovalTypeEnum.StaffDepartmentRequest); //для новых/автоматически сформированных заявок if (DocApproval == null || DocApproval.Where(x => x.IsImportance).Count() == 0) { model.IsInitiatorApproveAvailable = entity.IsUsed ? false : (model.Initiators.Count != 0 && (model.IsCurator || model.IsPersonnelBank || model.IsConsultant || 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; if (item.IsImportance) { 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; //entity.StaffRequestPyrusTasks.Where(x => x.DocumentApproval.Number == 1) if (!string.IsNullOrEmpty(PyrusNumber)) { model.InitiatorPyrusName = "Задача в Пайрус № " + PyrusNumber; model.InitiatorPyrusRef = @"https://pyrus.com/t#id" + PyrusNumber; } //открываем согласование для следующего участника процесса if (entity.DepartmentAccessory != null) { if (entity.DepartmentAccessory.Id == 2 || entity.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; } //открываем согласование для следующего участника процесса if (entity.DepartmentAccessory != null) { if (entity.DepartmentAccessory.Id == 1)//кадровики согласуют только бэк { model.IsPersonnelBankApproveAvailable = model.IsPersonnelBank || model.IsConsultant ? true : false; model.IsAgreeButtonAvailable = model.IsPersonnelBankApproveAvailable; } else { 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 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 5://вышестоящий руководитель 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 6://член правления 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; } } else { model.IsTaxCollectorApproveAvailable = model.IsTaxCollector || model.IsConsultant ? true : false; model.IsOrderApproveAvailable = model.IsOrder || model.IsConsultant ? true : false; switch (item.Number) { case 4://налоговик model.IsTaxCollectorApprove = true; model.IsTaxCollectorApproveAvailable = false; model.TaxCollectorApproveName = "Заявка согласована " + item.CreateDate.Value.ToShortDateString() + " " + "Налоговик: " + item.ApproveUser.Name; //если попали сюда, значит согласование данной цепочки уже прошло, задраиваем люки //model.IsAgreeButtonAvailable = model.IsTaxCollectorApproveAvailable; break; case 7://приказы model.IsOrderApprove = true; model.IsOrderApproveAvailable = false; model.OrderApproveName = "Приказы составлены " + item.CreateDate.Value.ToShortDateString() + " " + "Ответственный за составление приказов: " + item.ApproveUser.Name; //если попали сюда, значит согласование данной цепочки уже прошло, задраиваем люки //model.IsAgreeButtonAvailable = model.IsOrderApproveAvailable; break; } } } } //налоговик if (model.IsTaxCollector && DocApproval.Where(x => x.Number == 4).Count() == 0) { //model.IsTaxCollectorApprove = true; model.IsTaxCollectorApproveAvailable = true; model.IsAgreeButtonAvailable = model.IsTaxCollectorApproveAvailable; model.IsImportance = false; } //приказы if (model.IsOrder && DocApproval.Where(x => x.Number == 7).Count() == 0) { //model.IsOrderApprove = true; model.IsOrderApproveAvailable = true; model.IsAgreeButtonAvailable = model.IsOrderApproveAvailable; model.IsImportance = false; } //для администратора ПО банка if (model.IsSoftAdmin || model.IsCurator || model.IsConsultant) { model.IsSoftAdminApprove = true; model.IsSoftAdminApproveAvailable = true; if (model.IsSoftAdmin) { model.IsDraftButtonAvailable = false; model.IsAgreeButtonAvailable = false; model.IsImportance = false; } } 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 && UserRole.TaxCollector != AuthenticationService.CurrentUser.UserRole) { model.IsAgreeButtonAvailable = false; } if (entity.DeleteDate.HasValue) { model.IsDraftButtonAvailable = false; model.IsAgreeButtonAvailable = false; } }
/// <summary> /// Заполняем модель заявки для подразделения. /// </summary> /// <param name="model">Модель заявки.</param> /// <returns></returns> public StaffDepartmentRequestModel GetDepartmentRequest(StaffDepartmentRequestModel model) { //готовая заявка грузиться из реестра //создание заявки на создание подразделения, идет по ветке где Id = 0 //создание заявки на изменение/удаление, нужно заполнить текущими даными, но с обнуленным Id, чтобы создалась новая заявка //для заявок на редактирование надо сделать поиск текущей заявки по Id подразделения, для того чтобы ее заполнить только данными, а Id самой заявки обнулить, чтобы запись добавилась, а не редактировалась bool IsRequestExists = model.Id == 0 ? false : true; if (model.Id == 0) model.Id = StaffDepartmentRequestDao.GetCurrentRequestId(model.DepartmentId); //заполняем заявку на все случаи жизни if (model.Id == 0) { //Общие реквизиты model.DateState = null; model.DepartmentId = model.RequestTypeId == 1 ? 0 : model.DepartmentId; model.ParentId = model.RequestTypeId != 1 ? DepartmentDao.GetByCode(DepartmentDao.Load(model.DepartmentId).ParentId.ToString()).Id : model.ParentId; model.DepParentName = model.RequestTypeId != 1 ? DepartmentDao.GetByCode(DepartmentDao.Load(model.DepartmentId).ParentId.ToString()).Name : DepartmentDao.Get(model.ParentId).Name; model.ItemLevel = model.RequestTypeId == 1 ? DepartmentDao.Load(model.ParentId).ItemLevel + 1 : DepartmentDao.Load(model.DepartmentId).ItemLevel; model.Name = model.RequestTypeId == 1 ? string.Empty : DepartmentDao.Load(model.DepartmentId).Name;//string.Empty; model.BFGId = 0; model.OrderNumber = string.Empty; model.OrderDate = null; model.LegalAddressId = 0; model.LegalAddress = string.Empty; model.IsTaxAdminAccount = false; model.IsEmployeAvailable = false; model.DepNextId = 0; model.IsPlan = false; //налоговые реквизиты model.KPP = string.Empty; model.OKTMO = string.Empty; model.OKATO = string.Empty; model.RegionCode = string.Empty; model.TaxAdminCode = string.Empty; model.TaxAdminName = string.Empty; model.PostAddress = string.Empty; //ЦБ реквизиты model.ATMCountTotal = 0; model.ATMCashInStarted = 0; model.ATMCashInCount = 0; model.ATMCount = 0; model.DepCachinId = 0; model.DepATMId = 0; model.CashInStartedDate = null; model.ATMStartedDate = null; //Управленческие реквизиты model.NameShort = string.Empty; model.DepCode = string.Empty; model.PrevDepCode = string.Empty; model.ReasonId = 0; model.FactAddressId = 0; model.DepStatus = string.Empty; model.DepTypeId = 0; model.SKB_GE_Id = 0; model.OpenDate = null; model.CloseDate = null; model.OperationMode = string.Empty; model.OperationModeCash = string.Empty; model.OperationModeATM = string.Empty; model.OperationModeCashIn = string.Empty; model.BeginIdleDate = null; model.EndIdleDate = null; model.RentPlaceId = 0; model.AgreementDetails = string.Empty; model.DivisionArea = 0; model.AmountPayment = 0; model.Phone = string.Empty; model.IsBlocked = false; model.NetShopId = 0; model.IsLegalEntity = false; model.PlanEPCount = 0; model.PlanSalaryFund = 0; model.Note = string.Empty; model.CDAvailableId = 0; LoadDictionaries(model); //кнопки //сохранение/черновик if (UserRole.Manager == AuthenticationService.CurrentUser.UserRole || UserRole.Inspector == AuthenticationService.CurrentUser.UserRole || UserRole.ConsultantOutsourcing == AuthenticationService.CurrentUser.UserRole || UserRole.ConsultantPersonnel == AuthenticationService.CurrentUser.UserRole) model.IsDraftButtonAvailable = true; model.IsAgreeButtonAvailable = false; } else { StaffDepartmentRequest entity = StaffDepartmentRequestDao.Get(model.Id); if (entity == null) //если нет заявки с таким идентификатором, грузим новую заявку на создание подразделения { model.Id = 0; return GetDepartmentRequest(model); } if (!IsRequestExists) { model.Id = 0; } //Общие реквизиты model.DateRequest = entity.DateRequest; model.UserId = entity.Creator != null ? entity.Creator.Id : 0; model.DateState = entity.DateState; model.DepartmentId = entity.Department != null ? entity.Department.Id : 0; model.ParentId = entity.ParentDepartment != null ? entity.ParentDepartment.Id : 0; model.DepParentName = entity.ParentDepartment != null ? entity.ParentDepartment.Name : string.Empty; model.ItemLevel = entity.ItemLevel; model.Name = entity.Name; model.BFGId = entity.DepartmentAccessory != null ? entity.DepartmentAccessory.Id : 0; model.OrderNumber = entity.OrderNumber; model.OrderDate = entity.OrderDate; model.BeginAccountDate = entity.BeginAccountDate; if (entity.LegalAddress != null) { model.LegalAddressId = entity.LegalAddress.Id; model.LegalAddress = entity.LegalAddress.Address; model.LegalPostIndex = entity.LegalAddress.PostIndex; model.LegalRegionCode = entity.LegalAddress.RegionCode; model.LegalAreaCode = entity.LegalAddress.AreaCode; model.LegalCityCode = entity.LegalAddress.CityCode; model.LegalSettlementCode = entity.LegalAddress.SettlementCode; model.LegalStreetCode = entity.LegalAddress.StreetCode; model.LegalHouseType = entity.LegalAddress.HouseType; model.LegalHouseNumber = entity.LegalAddress.HouseNumber; model.LegalBuildType = entity.LegalAddress.BuildType; model.LegalBuildNumber = entity.LegalAddress.BuildNumber; model.LegalFlatType = entity.LegalAddress.FlatType; model.LegalFlatNumber = entity.LegalAddress.FlatNumber; } model.IsTaxAdminAccount = entity.IsTaxAdminAccount; model.IsEmployeAvailable = entity.IsEmployeAvailable; model.DepNextId = entity.DepNext != null ? entity.DepNext.Id : 0; model.DepNextName = entity.DepNext != null ? entity.DepNext.Name : string.Empty; model.DepDepositId = entity.DepDeposit != null ? entity.DepDeposit.Id : 0; model.DepDepositName = entity.DepDeposit != null ? entity.DepDeposit.Name : string.Empty; model.IsPlan = entity.IsPlan; model.IsUsed = entity.IsUsed; model.IsTaxRequest = entity.IsTaxRequest; //налоговые реквизиты if (entity.Department != null) { //entity.Department StaffDepartmentTaxDetails dt = StaffDepartmentTaxDetailsDao.GetDetailsByDepartmentId(entity.Department); model.KPP = dt != null ? dt.KPP : string.Empty; model.OKTMO = dt != null ? dt.OKTMO : string.Empty; model.OKATO = dt != null ? dt.OKATO : string.Empty; model.OKPO = dt != null ? dt.OKPO : string.Empty; model.RegionCode = dt != null ? dt.RegionCode : string.Empty; model.TaxAdminCode = dt != null ? dt.TaxAdminCode : string.Empty; model.TaxAdminName = dt != null ? dt.TaxAdminName : string.Empty; model.PostAddress = dt != null ? dt.PostAddress : string.Empty; } //ЦБ реквизиты if (entity.DepartmentCBDetails.Count != 0) { StaffDepartmentCBDetails cbd = entity.DepartmentCBDetails[0]; model.ATMCountTotal = cbd.ATMCountTotal.HasValue ? cbd.ATMCountTotal.Value : 0; model.ATMCashInStarted = cbd.ATMCashInStarted.HasValue ? cbd.ATMCashInStarted.Value : 0; model.ATMCashInCount = cbd.ATMCashInCount.HasValue ? cbd.ATMCashInCount.Value : 0; model.ATMCount = cbd.ATMCount.HasValue ? cbd.ATMCount.Value : 0; model.DepCachinId = cbd.DepCashin != null ? cbd.DepCashin.Id : 0; model.DepATMId = cbd.DepATM != null ? cbd.DepATM.Id : 0; model.DepCachinName = cbd.DepCashin != null ? cbd.DepCashin.Name : string.Empty; model.DepATMName = cbd.DepATM != null ? cbd.DepATM.Name : string.Empty; model.CashInStartedDate = cbd.CashInStartedDate; model.ATMStartedDate = cbd.ATMStartedDate; } //Управленческие реквизиты if (entity.DepartmentManagerDetails.Count != 0) { StaffDepartmentManagerDetails dmd = entity.DepartmentManagerDetails[0]; model.DMDetailId = dmd.Id; model.NameShort = dmd.NameShort; model.DepCode = dmd.DepCode; model.PrevDepCode = dmd.PrevDepCode; model.ReasonId = dmd.DepartmentReasons != null ? dmd.DepartmentReasons.Id : 0; model.ReasonIdOld = dmd.DepartmentReasons != null ? dmd.DepartmentReasons.Id : 0; if (dmd.FactAddress != null) { model.FactAddressId = dmd.FactAddress.Id; model.FactAddress = dmd.FactAddress.Address; model.FactPostIndex = dmd.FactAddress.PostIndex; model.FactRegionCode = dmd.FactAddress.RegionCode; model.FactAreaCode = dmd.FactAddress.AreaCode; model.FactCityCode = dmd.FactAddress.CityCode; model.FactSettlementCode = dmd.FactAddress.SettlementCode; model.FactStreetCode = dmd.FactAddress.StreetCode; model.FactHouseType = dmd.FactAddress.HouseType; model.FactHouseNumber = dmd.FactAddress.HouseNumber; model.FactBuildType = dmd.FactAddress.BuildType; model.FactBuildNumber = dmd.FactAddress.BuildNumber; model.FactFlatType = dmd.FactAddress.FlatType; model.FactFlatNumber = dmd.FactAddress.FlatNumber; } model.DepStatus = dmd.DepStatus; model.DepTypeId = dmd.DepartmentType != null ? dmd.DepartmentType.Id : 0; model.DepTypeIdOld = dmd.DepartmentType != null ? dmd.DepartmentType.Id : 0; model.SKB_GE_Id = dmd.SKB_GE != null ? dmd.SKB_GE.Id : 0; model.OpenDate = dmd.OpenDate; model.CloseDate = dmd.CloseDate; model.OperationMode = dmd.OperationMode; model.OperationModeCash = dmd.OperationModeCash; model.OperationModeATM = dmd.OperationModeATM; model.OperationModeCashIn = dmd.OperationModeCashIn; model.BeginIdleDate = dmd.BeginIdleDate; model.EndIdleDate = dmd.EndIdleDate; model.RentPlaceId = dmd.RentPlace != null ? dmd.RentPlace.Id : 0; model.AgreementDetails = dmd.AgreementDetails; model.DivisionArea = dmd.DivisionArea; model.AmountPayment = dmd.AmountPayment; model.Phone = dmd.Phone; model.IsBlocked = dmd.IsBlocked; model.NetShopId = dmd.NetShopIdentification != null ? dmd.NetShopIdentification.Id : 0; model.IsLegalEntity = dmd.IsLegalEntity; model.PlanEPCount = dmd.PlanEPCount; model.PlanSalaryFund = dmd.PlanSalaryFund; model.Note = dmd.Note; model.CDAvailableId = dmd.CashDeskAvailable != null ? dmd.CashDeskAvailable.Id : 0; model.OperGroupId = dmd.DepartmentOperationGroup != null ? dmd.DepartmentOperationGroup.Id : 0; } model.PyrusNumber = ""; //заполнение справочников LoadDictionaries(model); //кнопки //сохранение/черновик if (UserRole.Manager == AuthenticationService.CurrentUser.UserRole || UserRole.Inspector == AuthenticationService.CurrentUser.UserRole || UserRole.ConsultantOutsourcing == AuthenticationService.CurrentUser.UserRole || UserRole.ConsultantPersonnel == AuthenticationService.CurrentUser.UserRole) model.IsDraftButtonAvailable = true; else model.IsDraftButtonAvailable = false; } //model.IsTaxCollector = AuthenticationService.CurrentUser.UserRole == UserRole.TaxCollector; return model; }
/// <summary> /// Процедура заполняет списки согласовантов, на случай, если за них согласовывают кураторы или кадровики банка. /// </summary> /// <param name="model">Модель</param> /// <param name="entity">Данные заявки.</param> protected void GetApprovalLists(StaffDepartmentRequestModel model, StaffDepartmentRequest entity) { //если заявка на создание, то подразделения еще нет, есть только родительское Department Parentdep = null; if (entity.RequestType.Id != 1 && entity.Department != null) Parentdep = DepartmentDao.GetByCode(entity.Department.ParentId.ToString());//родительское подразделение else Parentdep = DepartmentDao.Get(entity.ParentDepartment.Id); //относительно родительского ищем руководителей //помним, что начальника может не быть в родительском подразделении, по этому ищем вверх по ветке всех руководителей IList<User> Initiators = DepartmentDao.GetDepartmentManagersWithManualLinks(model.DepartmentId != 0 ? model.DepartmentId : model.ParentId)//DepartmentDao.GetDepartmentManagers(Parentdep.Id, true) .OrderByDescending<User, int?>(manager => manager.Level) .ToList<User>(); if (entity.Creator != null) //у заявок созданных при переходе нет создателя { ////если инициатором является куратор или кадровик банка, то по ветке подразделения находим руководителей на уровень выше создаваемого подразделения 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 (model.Initiators == null || model.Initiators.Count == 0) model.Initiators = Initiators.Where(x => x.Level >= 2).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="entity">Текущая заявка.</param> /// <param name="curUser">текущий пользователь.</param> /// <param name="error">Сообщение об ошибке.</param> /// <returns></returns> protected int SaveDepartmentApprovals(StaffDepartmentRequestModel model, StaffDepartmentRequest 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 || AuthenticationService.CurrentUser.UserRole == UserRole.TaxCollector ? curUser : null;//куратор/кадровик банка/консультант РК //список руководителей по по ветке IList<User> Initiators = DepartmentDao.GetDepartmentManagers(entity.ParentDepartment.Id, true) .OrderByDescending<User, int?>(manager => manager.Level) .ToList<User>(); bool IsInitiator = Initiators.Where(x => x.Id == AuthenticationService.CurrentUser.Id).Count() != 0 ? true : false; bool IsTopManager = Initiators.Where(x => x.Id == AuthenticationService.CurrentUser.Id && x.Level <= 3).Count() != 0 ? true : false; bool IsBoardMember = AuthenticationService.CurrentUser.UserRole == UserRole.Director; bool IsCurator = (AuthenticationService.CurrentUser.UserRole == UserRole.Inspector); bool IsPersonnelBank = (AuthenticationService.CurrentUser.UserRole == UserRole.ConsultantPersonnel); bool IsConsultant = (AuthenticationService.CurrentUser.UserRole == UserRole.ConsultantOutsourcing); bool IsTaxCollector = (AuthenticationService.CurrentUser.UserRole == UserRole.TaxCollector); bool IsStaffListOrder = (AuthenticationService.CurrentUser.UserRole == UserRole.StaffListOrder); //вышестоящее руководство model.TopManagers = Initiators.Where(x => x.Level <= 3).ToList().ConvertAll(x => new IdNameDto { Id = x.Id, Name = x.Name + " - " + x.Position.Name }); //выбираем из согласования не архивные записи. IList<DocumentApproval> DocApproval = DocumentApprovalDao.GetDocumentApproval(entity.Id, (int)ApprovalTypeEnum.StaffDepartmentRequest); DocumentApproval da = new DocumentApproval(); da.ApprovalType = (int)ApprovalTypeEnum.StaffDepartmentRequest; da.DocId = entity.Id; da.IsArchive = false; da.CreateDate = DateTime.Now; if (model.IsImportance)//обязательное согласование { if (DocApproval.Where(x => x.Number == 1).Count() == 0 && (IsInitiator || IsCurator || IsPersonnelBank || IsConsultant))//инициатор, куратор, кадровик, консультант { //если иницатор не выбран, это значит, что инициатор действует сам User Initiator = model.InitiatorId != 0 ? UserDao.Get(model.InitiatorId) : curUser;//инициатор da.ApproveUser = Initiator; da.AssistantUser = Assistant; da.Number = 1; da.IsImportance = true; error = "Заявка создана!"; } if (DocApproval.Where(x => x.Number == 1).Count() == 1 && DocApproval.Where(x => x.Number == 2).Count() == 0 && (entity.DepartmentAccessory.Id == 2 || entity.DepartmentAccessory.Id == 6) && IsCurator)//только фронты и БэкФронты { da.ApproveUser = curUser; da.AssistantUser = null; da.Number = 2; da.IsImportance = true; error = "Заявка проверена куратором!"; } //if (DocApproval.Where(x => x.Number == 2).Count() == 1 && DocApproval.Where(x => x.Number == 3).Count() == 0) if (DocApproval.Where(x => x.Number == 1).Count() == 1 && DocApproval.Where(x => x.Number == 3).Count() == 0 && entity.DepartmentAccessory.Id == 1 && IsPersonnelBank)//только бэки { da.ApproveUser = curUser; da.AssistantUser = null; da.Number = 3; da.IsImportance = true; error = "Заявка проверена кадровиком банка!"; } if (DocApproval.Where(x => x.Number == 3 || x.Number == 2).Count() == 1 && DocApproval.Where(x => x.Number == 5).Count() == 0 && (IsTopManager || IsCurator || IsPersonnelBank || IsConsultant))//высший руководитель, куратор, кадровик, консультант { //если согласовант не выбран, это значит, что он действует сам User TopManager = model.TopManagerId != 0 ? UserDao.Get(model.TopManagerId) : curUser;//высший руководитель da.ApproveUser = TopManager; da.AssistantUser = Assistant; da.Number = 5; da.IsImportance = true; error = "Заявка согласована!"; } if (DocApproval.Where(x => x.Number == 5).Count() == 1 && DocApproval.Where(x => x.Number == 6).Count() == 0 && (IsBoardMember || IsCurator || IsPersonnelBank || IsConsultant))//член правления, куратор, кадровик, консультант { //если утверждающий не выбран, это значит, что он действует сам User BoardMember = model.BoardMemberId != 0 ? UserDao.Get(model.BoardMemberId) : curUser;//член правления da.ApproveUser = BoardMember; da.AssistantUser = Assistant; da.IsImportance = true; da.Number = 6; error = "Заявка утверждена!"; } } else //согласование специалистами { if (DocApproval.Where(x => x.Number == 7).Count() == 0 && (IsStaffListOrder || IsConsultant)) { da.ApproveUser = curUser; da.AssistantUser = null; da.Number = 7; error = "Приказ составлен!"; } if (DocApproval.Where(x => x.Number == 4).Count() == 0 && (IsTaxCollector || IsConsultant)) { da.ApproveUser = curUser; da.AssistantUser = null; da.Number = 4; error = "Заявка согласована налоговиком!"; } } try { DocumentApprovalDao.SaveAndFlush(da); //сохраняем здачу пайруса if (!string.IsNullOrEmpty(model.PyrusNumber)) { entity.StaffRequestPyrusTasks.Add(new StaffRequestPyrusTasks() { DepRequest = 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 < 6) return da.Number; if (da.Number == 6) { entity.DateState = 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="error">Сообщение</param> /// <returns></returns> public bool SaveProgramCodes(StaffDepartmentRequestModel model, out string error) { //этот кусок есть в общем сохранении, но когда решили дать админам отдельную кнопку, то вынес его сюда. error = string.Empty; User curUser = UserDao.Get(AuthenticationService.CurrentUser.Id); StaffDepartmentRequest entity = StaffDepartmentRequestDao.Get(model.Id); if (entity.DepartmentManagerDetails[0].ProgramCodes == null) entity.DepartmentManagerDetails[0].ProgramCodes = new List<StaffProgramCodes>(); if (model.ProgramCodes != null) { foreach (var item in model.ProgramCodes) { StaffProgramCodes pc = new StaffProgramCodes(); //если была запись и убрали значение кода, то удаляем if (item.Id != 0 && item.Code == null) { pc = entity.DepartmentManagerDetails[0].ProgramCodes.Where(x => x.Id == item.Id && x.Code != null).Single(); entity.DepartmentManagerDetails[0].ProgramCodes.Remove(pc); } //если не было записи и ввели код, то добавляем if (item.Id == 0 && item.Code != null) { pc.DepartmentManagerDetail = entity.DepartmentManagerDetails[0]; pc.Program = StaffProgramReferenceDao.Load(item.ProgramId); pc.Code = item.Code; pc.Creator = curUser; pc.CreateDate = DateTime.Now; entity.DepartmentManagerDetails[0].ProgramCodes.Add(pc); } //запись была и есть код, то предпологаем, что это редактирование if (item.Id != 0 && item.Code != null) { entity.DepartmentManagerDetails[0].ProgramCodes.Where(x => x.Id == item.Id).Single().Code = item.Code; entity.DepartmentManagerDetails[0].ProgramCodes.Where(x => x.Id == item.Id).Single().Editor = curUser; entity.DepartmentManagerDetails[0].ProgramCodes.Where(x => x.Id == item.Id).Single().EditDate = DateTime.Now; } } try { StaffDepartmentRequestDao.SaveAndFlush(entity); model.Id = entity.Id; error = "Данные сохранены!"; } catch (Exception ex) { StaffDepartmentRequestDao.RollbackTran(); RefAddressesDao.RollbackTran(); error = string.Format("Произошла ошибка при сохранении данных! Исключение:{0}", ex.GetBaseException().Message); return false; } } return true; }
/// <summary> /// Процедура отклонения существующей заявки для подразделения. /// </summary> /// <param name="model">Модель заявки.</param> /// <param name="error">Сообщенио об ошибке.</param> /// <returns></returns> public bool DeleteDepartmentRequest(StaffDepartmentRequestModel model, out string error) { error = string.Empty; StaffDepartmentRequest entity = StaffDepartmentRequestDao.Get(model.Id); if (entity == null) { error = "Заявка не найдена! Обратитесь к разработчикам!"; return false; } User curUser = UserDao.Load(AuthenticationService.CurrentUser.Id); //отклонение заявки if (model.IsDelete) { entity.IsUsed = false; entity.DeleteDate = DateTime.Now; entity.RejectUser = curUser; error = "Заявка отклонена!"; if (model.Id != 0) { try { StaffDepartmentRequestDao.SaveAndFlush(entity); model.Id = entity.Id; } catch (Exception ex) { StaffDepartmentRequestDao.RollbackTran(); error = string.Format("Произошла ошибка при сохранении данных! Исключение:{0}", ex.GetBaseException().Message); return false; } return true; } } //если не по той ветке пошли error = "Произошла ошибка при сохранении данных! Обратитесь к разработчикам!"; return false; }
/// <summary> /// Процедура сохранения существующей заявки для подразделения. /// </summary> /// <param name="model">Модель заявки.</param> /// <param name="error">Сообщенио об ошибке.</param> /// <returns></returns> public bool SaveEditDepartmentRequest(StaffDepartmentRequestModel model, out string error) { error = string.Empty; //несогласованная заявка для штатной единицы должна быть только одна if (model.RequestTypeId != 1)//для редактирования и сокращения { if (!StaffDepartmentRequestDao.CheckEnabeldCreateNewRequest(model.DepartmentId, model.Id)) { error = "Редактировать/Согласовать заявку для данного подразделения невозможно, так как для него уже существует неутвержденная заявка!"; return false; } } StaffDepartmentRequest entity = StaffDepartmentRequestDao.Get(model.Id); if (entity == null) { error = "Заявка не найдена! Обратитесь к разработчикам!"; return false; } User curUser = UserDao.Load(AuthenticationService.CurrentUser.Id); //поля общих реквизитов entity.Name = model.Name; //в действующих заявках редактируем название в справочнике if (entity.Department != null && entity.IsUsed) entity.Department.Name = entity.Name; entity.DepartmentAccessory = model.BFGId == 0 ? null : StaffDepartmentAccessoryDao.Load(model.BFGId); if (entity.Department != null) { entity.Department.DepartmentAccessory = StaffDepartmentAccessoryDao.Load(model.BFGId); } entity.OrderNumber = model.OrderNumber; entity.OrderDate = model.OrderDate; entity.BeginAccountDate = model.BeginAccountDate; entity.IsTaxAdminAccount = model.IsTaxAdminAccount; entity.IsEmployeAvailable = model.IsEmployeAvailable; entity.IsPlan = model.IsPlan; entity.IsDraft = entity.IsUsed ? false : model.IsDraft; entity.Editor = curUser; entity.EditDate = DateTime.Now; entity.ParentDepartment = model.ParentId == 0 ? null : DepartmentDao.Load(model.ParentId); entity.DepNext = model.DepNextId == 0 ? null : DepartmentDao.Load(model.DepNextId); entity.DepDeposit = model.DepDepositId == 0 ? null : DepartmentDao.Load(model.DepDepositId); entity.IsTaxRequest = model.IsTaxRequest; //юридический адрес RefAddresses la = null; //создаем новую запись или редактируем старую if (!string.IsNullOrEmpty(model.LegalAddress) && entity.LegalAddress == null) la = new RefAddresses(); else { if (entity.LegalAddress != null) la = RefAddressesDao.Get(entity.LegalAddress.Id); } if (la != null) { la.Address = model.LegalAddress; la.PostIndex = model.LegalPostIndex; la.RegionCode = model.LegalRegionCode; if (!string.IsNullOrEmpty(model.LegalRegionCode)) { KladrDto kd = KladrDao.GetKladrByCode(model.LegalRegionCode).Single(); la.RegionName = kd.Name + " " + kd.ShortName; } la.AreaCode = model.LegalAreaCode; if (!string.IsNullOrEmpty(model.LegalAreaCode)) { KladrDto kd = KladrDao.GetKladrByCode(model.LegalAreaCode).Single(); la.AreaName = kd.Name + " " + kd.ShortName; } la.CityCode = model.LegalCityCode; if (!string.IsNullOrEmpty(model.LegalCityCode)) { KladrDto kd = KladrDao.GetKladrByCode(model.LegalCityCode).Single(); la.CityName = kd.Name + " " + kd.ShortName; } la.SettlementCode = model.LegalSettlementCode; if (!string.IsNullOrEmpty(model.LegalSettlementCode)) { KladrDto kd = KladrDao.GetKladrByCode(model.LegalSettlementCode).Single(); la.SettlementName = kd.Name + " " + kd.ShortName; } la.StreetCode = model.LegalStreetCode; if (!string.IsNullOrEmpty(model.LegalStreetCode)) { KladrDto kd = KladrDao.GetKladrByCode(model.LegalStreetCode).Single(); la.StreetName = kd.Name + " " + kd.ShortName; } la.HouseType = model.LegalHouseType; la.HouseNumber = model.LegalHouseNumber; la.BuildType = model.LegalBuildType; la.BuildNumber = model.LegalBuildNumber; la.FlatType = model.LegalFlatType; la.FlatNumber = model.LegalFlatNumber; la.IsUsed = true; if (la.Id == 0) { la.Creator = curUser; la.CreateDate = DateTime.Now; } else { la.Editor = curUser; la.EditDate = DateTime.Now; } RefAddressesDao.SaveAndFlush(la); entity.LegalAddress = la; } //поля ЦБ реквизитов if (entity.DepartmentCBDetails == null || entity.DepartmentCBDetails.Count == 0)//если в виду какого нить сбоя при первичном сохранении не добавлиась запись, то создаем ее { if (entity.DepartmentCBDetails == null) entity.DepartmentCBDetails = new List<StaffDepartmentCBDetails>(); entity.DepartmentCBDetails.Add(new StaffDepartmentCBDetails { DepRequest = entity, ATMCountTotal = model.ATMCountTotal, ATMCashInStarted = model.ATMCashInStarted, ATMCashInCount = model.ATMCashInCount, ATMCount = model.ATMCount, DepCashin = model.DepCachinId == 0 ? null : DepartmentDao.Load(model.DepCachinId), DepATM = model.DepATMId == 0 ? null : DepartmentDao.Load(model.DepATMId), CashInStartedDate = model.CashInStartedDate, ATMStartedDate = model.ATMStartedDate, Creator = curUser, CreateDate = DateTime.Now }); } else { entity.DepartmentCBDetails[0].ATMCountTotal = model.ATMCountTotal; entity.DepartmentCBDetails[0].ATMCashInStarted = model.ATMCashInStarted; entity.DepartmentCBDetails[0].ATMCashInCount = model.ATMCashInCount; entity.DepartmentCBDetails[0].ATMCount = model.ATMCount; entity.DepartmentCBDetails[0].DepCashin = model.DepCachinId == 0 ? null : DepartmentDao.Load(model.DepCachinId); entity.DepartmentCBDetails[0].DepATM = model.DepATMId == 0 ? null : DepartmentDao.Load(model.DepATMId); entity.DepartmentCBDetails[0].CashInStartedDate = model.CashInStartedDate; entity.DepartmentCBDetails[0].ATMStartedDate = model.ATMStartedDate; entity.DepartmentCBDetails[0].Editor = curUser; entity.DepartmentCBDetails[0].EditDate = DateTime.Now; } //поля управленческих реквизитов if (entity.DepartmentManagerDetails == null || entity.DepartmentManagerDetails.Count == 0) //если в виду какого нить сбоя при первичном сохранении не добавлиась управленческие реквизиты, то создаем их { if (entity.DepartmentManagerDetails == null) entity.DepartmentManagerDetails = new List<StaffDepartmentManagerDetails>(); StaffDepartmentManagerDetails dmd = new StaffDepartmentManagerDetails(); dmd.DepRequest = entity; dmd.NameShort = model.NameShort; dmd.DepartmentReasons = model.ReasonId == 0 ? null : StaffDepartmentReasonsDao.Load(model.ReasonId.Value); //фактический адрес if (!string.IsNullOrEmpty(model.FactAddress)) { RefAddresses fa = new RefAddresses(); fa.Address = model.FactAddress; fa.PostIndex = model.FactPostIndex; fa.RegionCode = model.FactRegionCode; if (!string.IsNullOrEmpty(model.FactRegionCode)) { KladrDto kd = KladrDao.GetKladrByCode(model.FactRegionCode).Single(); fa.RegionName = kd.Name + " " + kd.ShortName; } fa.AreaCode = model.FactAreaCode; if (!string.IsNullOrEmpty(model.FactAreaCode)) { KladrDto kd = KladrDao.GetKladrByCode(model.FactAreaCode).Single(); fa.AreaName = kd.Name + " " + kd.ShortName; } fa.CityCode = model.FactCityCode; if (!string.IsNullOrEmpty(model.FactCityCode)) { KladrDto kd = KladrDao.GetKladrByCode(model.FactCityCode).Single(); fa.CityName = kd.Name + " " + kd.ShortName; } fa.SettlementCode = model.FactSettlementCode; if (!string.IsNullOrEmpty(model.FactSettlementCode)) { KladrDto kd = KladrDao.GetKladrByCode(model.FactSettlementCode).Single(); fa.SettlementName = kd.Name + " " + kd.ShortName; } fa.StreetCode = model.FactStreetCode; if (!string.IsNullOrEmpty(model.FactStreetCode)) { KladrDto kd = KladrDao.GetKladrByCode(model.FactStreetCode).Single(); fa.StreetName = kd.Name + " " + kd.ShortName; } fa.HouseType = model.FactHouseType; fa.HouseNumber = model.FactHouseNumber; fa.BuildType = model.FactBuildType; fa.BuildNumber = model.FactBuildNumber; fa.FlatType = model.FactFlatType; fa.FlatNumber = model.FactFlatNumber; fa.IsUsed = true; fa.Creator = curUser; fa.CreateDate = DateTime.Now; RefAddressesDao.SaveAndFlush(fa); dmd.FactAddress = fa; } dmd.DepStatus = model.DepStatus; dmd.DepartmentType = model.DepTypeId.Value == 0 ? null : StaffDepartmentTypesDao.Load(model.DepTypeId.Value); dmd.SKB_GE = model.SKB_GE_Id.Value == 0 ? null : StaffDepartmentSKB_GEDao.Load(model.SKB_GE_Id.Value); dmd.OpenDate = model.OpenDate; dmd.CloseDate = model.CloseDate; dmd.OperationMode = model.OperationMode; dmd.OperationModeCash = model.OperationModeCash; dmd.OperationModeATM = model.OperationModeATM; dmd.OperationModeCashIn = model.OperationModeCashIn; dmd.BeginIdleDate = model.BeginIdleDate; dmd.EndIdleDate = model.EndIdleDate; dmd.RentPlace = model.RentPlaceId.Value == 0 ? null : StaffDepartmentRentPlaceDao.Load(model.RentPlaceId.Value); dmd.AgreementDetails = model.AgreementDetails; dmd.DivisionArea = model.DivisionArea; dmd.AmountPayment = model.AmountPayment; dmd.Phone = model.Phone; dmd.IsBlocked = model.IsBlocked; dmd.NetShopIdentification = model.NetShopId.Value == 0 ? null : StaffNetShopIdentificationDao.Load(model.NetShopId.Value); dmd.CashDeskAvailable = model.CDAvailableId.Value == 0 ? null : StaffDepartmentCashDeskAvailableDao.Load(model.CDAvailableId.Value); dmd.IsLegalEntity = model.IsLegalEntity; dmd.PlanEPCount = model.PlanEPCount; dmd.PlanSalaryFund = model.PlanSalaryFund; dmd.Note = model.Note; dmd.Creator = curUser; dmd.CreateDate = DateTime.Now; //режим работы dmd.DepOperationModes = new List<StaffDepartmentOperationModes>(); foreach (var item in model.OperationModes) { dmd.DepOperationModes.Add(new StaffDepartmentOperationModes { DepartmentManagerDetail = dmd, ModeType = item.ModeType, WorkBegin = item.WorkBegin, WorkEnd = item.WorkEnd, BreakBegin = item.BreakBegin, BreakEnd = item.BreakEnd, IsWorkDay = item.IsWorkDay, Creator = curUser, CreateDate = DateTime.Now }); } //операции dmd.DepartmentOperationGroup = model.OperGroupId == 0 ? null : StaffDepartmentOperationGroupsDao.Get(model.OperGroupId); //коды программ dmd.ProgramCodes = new List<StaffProgramCodes>(); foreach (var item in model.ProgramCodes.Where(x => x.Code != null)) { dmd.ProgramCodes.Add(new StaffProgramCodes { DepartmentManagerDetail = dmd, Program = StaffProgramReferenceDao.Load(item.ProgramId), Code = item.Code, Creator = curUser, CreateDate = DateTime.Now }); } //ориентиры dmd.DepartmentLandmarks = new List<StaffDepartmentLandmarks>(); foreach (var item in model.DepLandmarks.Where(x => x.Description != null)) { dmd.DepartmentLandmarks.Add(new StaffDepartmentLandmarks { DepartmentManagerDetail = dmd, LandmarkTypes = StaffLandmarkTypesDao.Load(item.LandmarkId), Description = item.Description, Creator = curUser, CreateDate = DateTime.Now }); } //entity.DepartmentManagerDetails.Add(dmd); entity.DepartmentManagerDetails.Add(dmd); } else { entity.DepartmentManagerDetails[0].NameShort = model.NameShort; entity.DepartmentManagerDetails[0].DepartmentReasons = !model.ReasonId.HasValue || model.ReasonId == 0 ? null : StaffDepartmentReasonsDao.Load(model.ReasonId.Value); //фактический адрес RefAddresses fa = null; //создаем новую запись или рекдактируем старую if (!string.IsNullOrEmpty(model.FactAddress) && entity.DepartmentManagerDetails[0].FactAddress == null) fa = new RefAddresses(); else { if (entity.DepartmentManagerDetails[0].FactAddress != null) fa = RefAddressesDao.Get(entity.DepartmentManagerDetails[0].FactAddress.Id); } if (fa != null) { fa.Address = model.FactAddress; fa.PostIndex = model.FactPostIndex; fa.RegionCode = model.FactRegionCode; if (!string.IsNullOrEmpty(model.FactRegionCode)) { KladrDto kd = KladrDao.GetKladrByCode(model.FactRegionCode).Single(); fa.RegionName = kd.Name + " " + kd.ShortName; } fa.AreaCode = model.FactAreaCode; if (!string.IsNullOrEmpty(model.FactAreaCode)) { KladrDto kd = KladrDao.GetKladrByCode(model.FactAreaCode).Single(); fa.AreaName = kd.Name + " " + kd.ShortName; } fa.CityCode = model.FactCityCode; if (!string.IsNullOrEmpty(model.FactCityCode)) { KladrDto kd = KladrDao.GetKladrByCode(model.FactCityCode).Single(); fa.CityName = kd.Name + " " + kd.ShortName; } fa.SettlementCode = model.FactSettlementCode; if (!string.IsNullOrEmpty(model.FactSettlementCode)) { KladrDto kd = KladrDao.GetKladrByCode(model.FactSettlementCode).Single(); fa.SettlementName = kd.Name + " " + kd.ShortName; } fa.StreetCode = model.FactStreetCode; if (!string.IsNullOrEmpty(model.FactStreetCode)) { KladrDto kd = KladrDao.GetKladrByCode(model.FactStreetCode).Single(); fa.StreetName = kd.Name + " " + kd.ShortName; } fa.HouseType = model.FactHouseType; fa.HouseNumber = model.FactHouseNumber; fa.BuildType = model.FactBuildType; fa.BuildNumber = model.FactBuildNumber; fa.FlatType = model.FactFlatType; fa.FlatNumber = model.FactFlatNumber; fa.IsUsed = true; if (fa.Id == 0) { fa.Creator = curUser; fa.CreateDate = DateTime.Now; } else { fa.Editor = curUser; fa.EditDate = DateTime.Now; } RefAddressesDao.SaveAndFlush(fa); entity.DepartmentManagerDetails[0].FactAddress = fa; } entity.DepartmentManagerDetails[0].DepStatus = model.DepStatus; entity.DepartmentManagerDetails[0].DepartmentType = !model.DepTypeId.HasValue || model.DepTypeId.Value == 0 ? null : StaffDepartmentTypesDao.Load(model.DepTypeId.Value); entity.DepartmentManagerDetails[0].SKB_GE = !model.SKB_GE_Id.HasValue || model.SKB_GE_Id.Value == 0 ? null : StaffDepartmentSKB_GEDao.Load(model.SKB_GE_Id.Value); entity.DepartmentManagerDetails[0].OpenDate = model.OpenDate; entity.DepartmentManagerDetails[0].CloseDate = model.CloseDate; entity.DepartmentManagerDetails[0].OperationMode = model.OperationMode; entity.DepartmentManagerDetails[0].OperationModeCash = model.OperationModeCash; entity.DepartmentManagerDetails[0].OperationModeATM = model.OperationModeATM; entity.DepartmentManagerDetails[0].OperationModeCashIn = model.OperationModeCashIn; entity.DepartmentManagerDetails[0].BeginIdleDate = model.BeginIdleDate; entity.DepartmentManagerDetails[0].EndIdleDate = model.EndIdleDate; entity.DepartmentManagerDetails[0].RentPlace = !model.RentPlaceId.HasValue || model.RentPlaceId.Value == 0 ? null : StaffDepartmentRentPlaceDao.Load(model.RentPlaceId.Value); entity.DepartmentManagerDetails[0].AgreementDetails = model.AgreementDetails; entity.DepartmentManagerDetails[0].DivisionArea = model.DivisionArea; entity.DepartmentManagerDetails[0].AmountPayment = model.AmountPayment; entity.DepartmentManagerDetails[0].Phone = model.Phone; entity.DepartmentManagerDetails[0].IsBlocked = model.IsBlocked; entity.DepartmentManagerDetails[0].NetShopIdentification = !model.NetShopId.HasValue || model.NetShopId.Value == 0 ? null : StaffNetShopIdentificationDao.Load(model.NetShopId.Value); entity.DepartmentManagerDetails[0].CashDeskAvailable = !model.CDAvailableId.HasValue || model.CDAvailableId.Value == 0 ? null : StaffDepartmentCashDeskAvailableDao.Load(model.CDAvailableId.Value); entity.DepartmentManagerDetails[0].IsLegalEntity = model.IsLegalEntity; entity.DepartmentManagerDetails[0].PlanEPCount = model.PlanEPCount; entity.DepartmentManagerDetails[0].PlanSalaryFund = model.PlanSalaryFund; entity.DepartmentManagerDetails[0].Note = model.Note; entity.DepartmentManagerDetails[0].Editor = curUser; entity.DepartmentManagerDetails[0].EditDate = DateTime.Now; //режим работы if (entity.DepartmentManagerDetails[0].DepOperationModes == null) entity.DepartmentManagerDetails[0].DepOperationModes = new List<StaffDepartmentOperationModes>(); if (model.OperationModes != null) { foreach (var item in model.OperationModes) { StaffDepartmentOperationModes dom = new StaffDepartmentOperationModes(); //если не было, добавляем if (item.Id == 0) { dom.DepartmentManagerDetail = entity.DepartmentManagerDetails[0]; dom.ModeType = item.ModeType; dom.WeekDay = item.WeekDay; dom.WorkBegin = item.WorkBegin; dom.WorkEnd = item.WorkEnd; dom.BreakBegin = item.BreakBegin; dom.BreakEnd = item.BreakEnd; dom.IsWorkDay = item.IsWorkDay; dom.Creator = curUser; dom.CreateDate = DateTime.Now; entity.DepartmentManagerDetails[0].DepOperationModes.Add(dom); } else//редактируем { entity.DepartmentManagerDetails[0].DepOperationModes.Where(x => x.Id == item.Id).Single().WorkBegin = item.WorkBegin; entity.DepartmentManagerDetails[0].DepOperationModes.Where(x => x.Id == item.Id).Single().WorkEnd = item.WorkEnd; entity.DepartmentManagerDetails[0].DepOperationModes.Where(x => x.Id == item.Id).Single().BreakBegin = item.BreakBegin; entity.DepartmentManagerDetails[0].DepOperationModes.Where(x => x.Id == item.Id).Single().BreakEnd = item.BreakEnd; entity.DepartmentManagerDetails[0].DepOperationModes.Where(x => x.Id == item.Id).Single().IsWorkDay = item.IsWorkDay; entity.DepartmentManagerDetails[0].DepOperationModes.Where(x => x.Id == item.Id).Single().Editor = curUser; entity.DepartmentManagerDetails[0].DepOperationModes.Where(x => x.Id == item.Id).Single().EditDate = DateTime.Now; } } } //операции entity.DepartmentManagerDetails[0].DepartmentOperationGroup = model.OperGroupId == 0 ? null : StaffDepartmentOperationGroupsDao.Get(model.OperGroupId); //коды программ //могут редактировать только администраторы ПО банка (переменная определяется в процедуре определения состояния согласования) if (model.IsSoftAdminApproveAvailable) { if (entity.DepartmentManagerDetails[0].ProgramCodes == null) entity.DepartmentManagerDetails[0].ProgramCodes = new List<StaffProgramCodes>(); if (model.ProgramCodes != null) { foreach (var item in model.ProgramCodes) { StaffProgramCodes pc = new StaffProgramCodes(); //если была запись и убрали значение кода, то удаляем if (item.Id != 0 && item.Code == null) { pc = entity.DepartmentManagerDetails[0].ProgramCodes.Where(x => x.Id == item.Id && x.Code != null).Single(); entity.DepartmentManagerDetails[0].ProgramCodes.Remove(pc); } //если не было записи и ввели код, то добавляем if (item.Id == 0 && item.Code != null) { pc.DepartmentManagerDetail = entity.DepartmentManagerDetails[0]; pc.Program = StaffProgramReferenceDao.Load(item.ProgramId); pc.Code = item.Code; pc.Creator = curUser; pc.CreateDate = DateTime.Now; entity.DepartmentManagerDetails[0].ProgramCodes.Add(pc); } //запись была и есть код, то предпологаем, что это редактирование if (item.Id != 0 && item.Code != null) { entity.DepartmentManagerDetails[0].ProgramCodes.Where(x => x.Id == item.Id).Single().Code = item.Code; entity.DepartmentManagerDetails[0].ProgramCodes.Where(x => x.Id == item.Id).Single().Editor = curUser; entity.DepartmentManagerDetails[0].ProgramCodes.Where(x => x.Id == item.Id).Single().EditDate = DateTime.Now; } } } } //ориентиры if (entity.DepartmentManagerDetails[0].DepartmentLandmarks == null) entity.DepartmentManagerDetails[0].DepartmentLandmarks = new List<StaffDepartmentLandmarks>(); if (model.DepLandmarks != null) { foreach (var item in model.DepLandmarks) { StaffDepartmentLandmarks lm = new StaffDepartmentLandmarks(); //если была запись и убрали значение кода, то удаляем if (item.Id != 0 && item.Description == null) { lm = entity.DepartmentManagerDetails[0].DepartmentLandmarks.Where(x => x.Id == item.Id && x.Description != null).Single(); entity.DepartmentManagerDetails[0].DepartmentLandmarks.Remove(lm); } //если не было записи и ввели код, то добавляем if (item.Id == 0 && item.Description != null) { lm.DepartmentManagerDetail = entity.DepartmentManagerDetails[0]; lm.LandmarkTypes = StaffLandmarkTypesDao.Load(item.LandmarkId); lm.Description = item.Description; lm.Creator = curUser; lm.CreateDate = DateTime.Now; entity.DepartmentManagerDetails[0].DepartmentLandmarks.Add(lm); } //запись была и есть код, то предпологаем, что это редактирование if (item.Id != 0 && item.Description != null) { entity.DepartmentManagerDetails[0].DepartmentLandmarks.Where(x => x.Id == item.Id).Single().Description = item.Description; entity.DepartmentManagerDetails[0].DepartmentLandmarks.Where(x => x.Id == item.Id).Single().Editor = curUser; entity.DepartmentManagerDetails[0].DepartmentLandmarks.Where(x => x.Id == item.Id).Single().EditDate = DateTime.Now; } } } } //находим действующую заявку и убираем у нее признак использования if (entity.DepNext != null && entity.DepartmentAccessory.Id == 2) { if (string.IsNullOrEmpty(entity.DepNext.DepartmentTaxDetails[0].TaxAdminCode) || string.IsNullOrWhiteSpace(entity.DepNext.DepartmentTaxDetails[0].TaxAdminCode)) { error = "Выбранное подразделение с налоговыми реквизитами не имеет таковых!"; return false; } } //int OldRequestId = StaffDepartmentRequestDao.GetCurrentRequestId(entity.Department != null ? entity.Department.Id : 0); StaffDepartmentRequest OldEntity = null; //Утверждение if (!model.IsDraft) { //проверки для текущей заявки if (!ValidateDepartmentRequest(entity, out error)) { return false; } //только после утверждения заявки можно редактировать справочник подразделений. //ветка срабатывает только после последней фазы согласования (на данный момент это утверждение заявки) //пока данные корректируются после начальной загрузки, то для таких заявок согласования не нужно int Result = entity.RequestType.Id == 4 ? 0 : SaveDepartmentApprovals(model, entity, curUser, out error); if (Result == -1) return false; if (Result == 0) { //для первоначальных данных if (entity.RequestType.Id == 4) { entity.DateState = DateTime.Now; entity.DateSendToApprove = DateTime.Now; } //занесение данных по подразделению в справочник подазделений и создание кодов для подразделений if (!SaveDepartmentReference(entity, curUser, out error)) { return false; } //находим действующую заявку и убираем у нее признак использования int OldRequestId = StaffDepartmentRequestDao.GetCurrentRequestId(entity.Department != null ? entity.Department.Id : 0); OldEntity = StaffDepartmentRequestDao.Get(OldRequestId); //если заявка на изменение/удаление подразделения if (entity.RequestType.Id != 1 && entity.RequestType.Id != 4) { if (OldEntity != null) { //если переезд, то у старой заявки ставим дату закрытия автоматически OldEntity.DepartmentManagerDetails[0].CloseDate = DateTime.Now; OldEntity.IsUsed = false; OldEntity.Editor = curUser; OldEntity.EditDate = DateTime.Now; //записываем предыдущий код entity.DepartmentManagerDetails[0].PrevDepCode = OldEntity.DepartmentManagerDetails[0].DepCode; } } //у текущей заявки ставим признак использования entity.IsUsed = true; error = "Заявка утверждена!"; } } if (model.Id != 0) { try { if (OldEntity != null) StaffDepartmentRequestDao.SaveAndFlush(OldEntity); StaffDepartmentRequestDao.SaveAndFlush(entity); model.Id = entity.Id; if (model.IsDraft) error = "Данные сохранены!"; } catch (Exception ex) { StaffDepartmentRequestDao.RollbackTran(); RefAddressesDao.RollbackTran(); error = string.Format("Произошла ошибка при сохранении данных! Исключение:{0}", ex.GetBaseException().Message); return false; } return true; } //если не по той ветке пошли error = "Произошла ошибка при сохранении данных! Обратитесь к разработчикам!"; return false; }
/// <summary> /// Процедура сохранения новой заявки для подразделения. /// </summary> /// <param name="model">Модель заявки.</param> /// <param name="error">Сообщенио об ошибке.</param> /// <returns></returns> public bool SaveNewDepartmentRequest(StaffDepartmentRequestModel model, out string error) { //несогласованная заявка для штатной единицы должна быть только одна if (model.RequestTypeId != 1)//для редактирования и сокращения { if (!StaffDepartmentRequestDao.CheckEnabeldCreateNewRequest(model.DepartmentId, model.Id)) { error = "Создать новую заявку для данного подразделения невозможно, так как для него уже существует неутвержденная заявка!"; return false; } } error = string.Empty; StaffDepartmentRequest entity;// = StaffDepartmentRequestDao.Load(model.Id.HasValue ? model.Id.Value : 0); User curUser = UserDao.Load(AuthenticationService.CurrentUser.Id); if (model.Id == 0) { //поля общих реквизитов entity = new StaffDepartmentRequest { RequestType = StaffDepartmentRequestTypesDao.Load(model.RequestTypeId), DateRequest = DateTime.Now, Department = model.DepartmentId == 0 ? null : DepartmentDao.Get(model.DepartmentId), ParentDepartment = model.ParentId == 0 ? null : DepartmentDao.Load(model.ParentId), DepNext = model.DepNextId == 0 ? null : DepartmentDao.Load(model.DepNextId), DepDeposit = model.DepDepositId == 0 ? null : DepartmentDao.Load(model.DepDepositId), ItemLevel = model.ItemLevel.Value, Name = model.Name, DepartmentAccessory = model.BFGId == 0 ? null : StaffDepartmentAccessoryDao.Load(model.BFGId), OrderNumber = model.OrderNumber, OrderDate = model.OrderDate, BeginAccountDate = model.BeginAccountDate, IsTaxAdminAccount = model.IsTaxAdminAccount, IsEmployeAvailable = model.IsEmployeAvailable, IsPlan = model.IsPlan, IsUsed = false, IsDraft = true, IsTaxRequest = false, Creator = curUser, CreateDate = DateTime.Now }; //юридический адрес if (!string.IsNullOrEmpty(model.LegalAddress)) { RefAddresses la = new RefAddresses(); la.Address = model.LegalAddress; la.PostIndex = model.LegalPostIndex; la.RegionCode = model.LegalRegionCode; if (!string.IsNullOrEmpty(model.LegalRegionCode)) { KladrDto kd = KladrDao.GetKladrByCode(model.LegalRegionCode).Single(); la.RegionName = kd.Name + " " + kd.ShortName; } la.AreaCode = model.LegalAreaCode; if (!string.IsNullOrEmpty(model.LegalAreaCode)) { KladrDto kd = KladrDao.GetKladrByCode(model.LegalAreaCode).Single(); la.AreaName = kd.Name + " " + kd.ShortName; } la.CityCode = model.LegalCityCode; if (!string.IsNullOrEmpty(model.LegalCityCode)) { KladrDto kd = KladrDao.GetKladrByCode(model.LegalCityCode).Single(); la.CityName = kd.Name + " " + kd.ShortName; } la.SettlementCode = model.LegalSettlementCode; if (!string.IsNullOrEmpty(model.LegalSettlementCode)) { KladrDto kd = KladrDao.GetKladrByCode(model.LegalSettlementCode).Single(); la.SettlementName = kd.Name + " " + kd.ShortName; } la.StreetCode = model.LegalStreetCode; if (!string.IsNullOrEmpty(model.LegalStreetCode)) { KladrDto kd = KladrDao.GetKladrByCode(model.LegalStreetCode).Single(); la.StreetName = kd.Name + " " + kd.ShortName; } la.HouseType = model.LegalHouseType; la.HouseNumber = model.LegalHouseNumber; la.BuildType = model.LegalBuildType; la.BuildNumber = model.LegalBuildNumber; la.FlatType = model.LegalFlatType; la.FlatNumber = model.LegalFlatNumber; la.IsUsed = true; la.Creator = curUser; la.CreateDate = DateTime.Now; RefAddressesDao.SaveAndFlush(la); entity.LegalAddress = la; } //entity.ParentDepartment = model.ParentId == 0 ? null : DepartmentDao.Load(model.ParentId); //entity.DepNext = model.DepNextId == 0 ? null : DepartmentDao.Load(model.DepNextId); //поля ЦБ реквизитов entity.DepartmentCBDetails = new List<StaffDepartmentCBDetails>(); entity.DepartmentCBDetails.Add(new StaffDepartmentCBDetails { DepRequest = entity, ATMCountTotal = model.ATMCountTotal, ATMCashInStarted = model.ATMCashInStarted, ATMCashInCount = model.ATMCashInCount, ATMCount = model.ATMCount, DepCashin = model.DepCachinId == 0 ? null : DepartmentDao.Load(model.DepCachinId), DepATM = model.DepATMId == 0 ? null : DepartmentDao.Load(model.DepATMId), CashInStartedDate = model.CashInStartedDate, ATMStartedDate = model.ATMStartedDate, Creator = curUser, CreateDate = DateTime.Now }); //поля управленческих реквизитов entity.DepartmentManagerDetails = new List<StaffDepartmentManagerDetails>(); StaffDepartmentManagerDetails dmd = new StaffDepartmentManagerDetails(); dmd.DepRequest = entity; dmd.NameShort = model.NameShort; dmd.DepartmentReasons = !model.ReasonId.HasValue || model.ReasonId.Value == 0 ? null : StaffDepartmentReasonsDao.Load(model.ReasonId.Value); //фактический адрес if (!string.IsNullOrEmpty(model.FactAddress)) { RefAddresses fa = new RefAddresses(); fa.Address = model.FactAddress; fa.PostIndex = model.FactPostIndex; fa.RegionCode = model.FactRegionCode; if (!string.IsNullOrEmpty(model.FactRegionCode)) { KladrDto kd = KladrDao.GetKladrByCode(model.FactRegionCode).Single(); fa.RegionName = kd.Name + " " + kd.ShortName; } fa.AreaCode = model.FactAreaCode; if (!string.IsNullOrEmpty(model.FactAreaCode)) { KladrDto kd = KladrDao.GetKladrByCode(model.FactAreaCode).Single(); fa.AreaName = kd.Name + " " + kd.ShortName; } fa.CityCode = model.FactCityCode; if (!string.IsNullOrEmpty(model.FactCityCode)) { KladrDto kd = KladrDao.GetKladrByCode(model.FactCityCode).Single(); fa.CityName = kd.Name + " " + kd.ShortName; } fa.SettlementCode = model.FactSettlementCode; if (!string.IsNullOrEmpty(model.FactSettlementCode)) { KladrDto kd = KladrDao.GetKladrByCode(model.FactSettlementCode).Single(); fa.SettlementName = kd.Name + " " + kd.ShortName; } fa.StreetCode = model.FactStreetCode; if (!string.IsNullOrEmpty(model.FactStreetCode)) { KladrDto kd = KladrDao.GetKladrByCode(model.FactStreetCode).Single(); fa.StreetName = kd.Name + " " + kd.ShortName; } fa.HouseType = model.FactHouseType; fa.HouseNumber = model.FactHouseNumber; fa.BuildType = model.FactBuildType; fa.BuildNumber = model.FactBuildNumber; fa.FlatType = model.FactFlatType; fa.FlatNumber = model.FactFlatNumber; fa.IsUsed = true; fa.Creator = curUser; fa.CreateDate = DateTime.Now; RefAddressesDao.SaveAndFlush(fa); dmd.FactAddress = fa; } dmd.DepStatus = model.DepStatus; dmd.DepartmentType = !model.DepTypeId.HasValue || model.DepTypeId.Value == 0 ? null : StaffDepartmentTypesDao.Load(model.DepTypeId.Value); dmd.SKB_GE = !model.SKB_GE_Id.HasValue || model.SKB_GE_Id.Value == 0 ? null : StaffDepartmentSKB_GEDao.Load(model.SKB_GE_Id.Value); dmd.OpenDate = model.OpenDate; dmd.CloseDate = model.CloseDate; dmd.OperationMode = model.OperationMode; dmd.OperationModeCash = model.OperationModeCash; dmd.OperationModeATM = model.OperationModeATM; dmd.OperationModeCashIn = model.OperationModeCashIn; dmd.BeginIdleDate = model.BeginIdleDate; dmd.EndIdleDate = model.EndIdleDate; dmd.RentPlace = !model.RentPlaceId.HasValue || model.RentPlaceId.Value == 0 ? null : StaffDepartmentRentPlaceDao.Load(model.RentPlaceId.Value); dmd.AgreementDetails = model.AgreementDetails; dmd.DivisionArea = model.DivisionArea; dmd.AmountPayment = model.AmountPayment; dmd.Phone = model.Phone; dmd.IsBlocked = model.IsBlocked; dmd.NetShopIdentification = !model.NetShopId.HasValue || model.NetShopId.Value == 0 ? null : StaffNetShopIdentificationDao.Load(model.NetShopId.Value); dmd.CashDeskAvailable = !model.CDAvailableId.HasValue || model.CDAvailableId.Value == 0 ? null : StaffDepartmentCashDeskAvailableDao.Load(model.CDAvailableId.Value); dmd.IsLegalEntity = model.IsLegalEntity; dmd.PlanEPCount = model.PlanEPCount; dmd.PlanSalaryFund = model.PlanSalaryFund; dmd.Note = model.Note; dmd.Creator = curUser; dmd.CreateDate = DateTime.Now; //режим работы dmd.DepOperationModes = new List<StaffDepartmentOperationModes>(); if (model.OperationModes != null) { foreach (var item in model.OperationModes) { dmd.DepOperationModes.Add(new StaffDepartmentOperationModes { DepartmentManagerDetail = dmd, ModeType = item.ModeType, WeekDay = item.WeekDay, WorkBegin = item.WorkBegin, WorkEnd = item.WorkEnd, BreakBegin = item.BreakBegin, BreakEnd = item.BreakEnd, IsWorkDay = item.IsWorkDay, Creator = curUser, CreateDate = DateTime.Now }); } } //операции dmd.DepartmentOperationGroup = model.OperGroupId == 0 ? null : StaffDepartmentOperationGroupsDao.Get(model.OperGroupId); //foreach (var item in model.Operations.Where(x => x.IsUsed == true)) //{ // dmd.DepOperations.Add(new StaffDepartmentOperationLinks { // DepartmentManagerDetail = dmd, // DepartmentOperation = StaffDepartmentOperationsDao.Load(item.OperationId), // Creator = curUser, // CreateDate = DateTime.Now // }); //} //коды программ //могут редактировать только администраторы ПО банка (переменная определяется в процедуре определения состояния согласования) if (model.IsSoftAdminApproveAvailable) { dmd.ProgramCodes = new List<StaffProgramCodes>(); if (model.ProgramCodes != null) { foreach (var item in model.ProgramCodes.Where(x => x.Code != null)) { dmd.ProgramCodes.Add(new StaffProgramCodes { DepartmentManagerDetail = dmd, Program = StaffProgramReferenceDao.Load(item.ProgramId), Code = item.Code, Creator = curUser, CreateDate = DateTime.Now }); } } } //ориентиры dmd.DepartmentLandmarks = new List<StaffDepartmentLandmarks>(); if (model.DepLandmarks != null) { foreach (var item in model.DepLandmarks.Where(x => x.Description != null)) { dmd.DepartmentLandmarks.Add(new StaffDepartmentLandmarks { DepartmentManagerDetail = dmd, LandmarkTypes = StaffLandmarkTypesDao.Load(item.LandmarkId), Description = item.Description, Creator = curUser, CreateDate = DateTime.Now }); } } //entity.DepartmentManagerDetails.Add(dmd); entity.DepartmentManagerDetails.Add(dmd); try { StaffDepartmentRequestDao.SaveAndFlush(entity); model.Id = entity.Id; error = "Данные сохранены!"; return true; } catch (Exception ex) { StaffDepartmentRequestDao.RollbackTran(); RefAddressesDao.RollbackTran(); error = string.Format("Произошла ошибка при сохранении данных! Исключение:{0}", ex.GetBaseException().Message); return false; } } //если не по той ветке пошли error = "Произошла ошибка при сохранении данных! Обратитесь к разработчикам!"; return false; }
/// <summary> /// Загрузка справочников модели для заявок к подразделениям. /// </summary> /// <param name="model">Модель заявки.</param> public void LoadDictionaries(StaffDepartmentRequestModel model) { //реквизиты инициатора model.DepRequestInfo = GetDepRequestInfo(model.Id, model.DateRequest, model.Id == 0 ? AuthenticationService.CurrentUser.Id : model.UserId); model.RequestTypes = StaffDepartmentRequestTypesDao.LoadAll(); model.DepLandmarks = StaffDepartmentLandmarksDao.GetDepartmentLandmarks(model.DMDetailId); model.DepTypes = StaffDepartmentTypesDao.GetDepartmentTypes(); model.ProgramCodes = StaffProgramCodesDao.GetProgramCodes(model.DMDetailId); model.OperationGroups = StaffDepartmentOperationGroupsDao.GetOperationGroups(); model.OperationGroups.Insert(0, new StaffDepartmentOperationGroupsDto { gId = 0, gName = "" }); model.OperationModes = StaffDepartmentOperationModesDao.GetDepartmentOperationModes(model.DMDetailId); model.Reasons = StaffDepartmentReasonsDao.GetDepartmentReasons(); model.NetShopTypes = StaffNetShopIdentificationDao.GetNetShopTypes(); model.CashDeskAvailables = StaffDepartmentCashDeskAvailableDao.GetCashDeskAvailable(); model.RentPlace = StaffDepartmentRentPlaceDao.GetRentPlace(); model.SKB_GE = StaffDepartmentSKB_GEDao.GetSKB_GE(); model.SoftGroups = StaffDepartmentSoftGroupDao.GetSoftGroups(); model.SoftGroups.Insert(0, new StaffDepartmentSoftGroupDto { gId = 0, gName = "" }); model.Accessoryes = StaffDepartmentAccessoryDao.GetAccessoryes(); model.Accessoryes.Insert(0, new IdNameDto { Id = 0, Name = "" }); //список руководителей IList<User> managers = DepartmentDao.GetDepartmentManagersWithManualLinks(model.DepartmentId != 0 ? model.DepartmentId : model.ParentId); StringBuilder managersBuilder = new StringBuilder(); foreach (var manager in managers) { managersBuilder.AppendFormat("{0} ({1}), ", manager.Name, manager.Position == null ? "<не указана>" : manager.Position.Name); } model.Managers = managersBuilder.ToString(); //согласование - расстановка флажков и т.д. StaffDepartmentRequest entity = StaffDepartmentRequestDao.Get(model.Id); if (entity != null) SetApprovalFlags(model, entity); else { model.IsCurator = (AuthenticationService.CurrentUser.UserRole == UserRole.Inspector); model.IsPersonnelBank = (AuthenticationService.CurrentUser.UserRole == UserRole.ConsultantPersonnel); model.IsConsultant = (AuthenticationService.CurrentUser.UserRole == UserRole.ConsultantOutsourcing); } //отображение куска структуры для этого подразделения StaffDepartmentFingradStructureDto FinStructure = StaffDepartmentRPLinkDao.GetFingradStructureForDeparment(model.ParentId); if (FinStructure != null) { model.ManagementCode = FinStructure.ManagementCode; model.ManagementName = FinStructure.ManagementName; model.ManagementNameSKD = FinStructure.ManagementNameSKD; model.AdminCode = FinStructure.AdminCode; model.AdminName = FinStructure.AdminName; model.AdminNameSKD = FinStructure.AdminNameSKD; model.BGCode = FinStructure.BGCode; model.BGName = FinStructure.BGName; model.BGNameSKD = FinStructure.BGNameSKD; model.RPLInkCode = FinStructure.RPLinkCode; model.RPLInkName = FinStructure.RPLinkName; model.RPLInkNameSKD = FinStructure.RPLinkNameSKD; } }
public ActionResult StaffDepartmentRequest(StaffDepartmentRequestModel model) { ModelState.Clear(); string error = string.Empty; bool IsComplete = false; ViewBag.Title = model.RequestTypeId == 1 ? "Заявка на создание нового подразделения" : (model.RequestTypeId == 2 ? "Заявка на изменение подразделения" : "Заявка на удаление продразделения"); if (ValidateModel(model))//проверки { if (model.IsDraft) //сохранение черновика { if (!model.IsDelete) IsComplete = model.Id == 0 ? StaffListBl.SaveNewDepartmentRequest(model, out error) : StaffListBl.SaveEditDepartmentRequest(model, out error); else IsComplete = model.Id == 0 ? false : StaffListBl.DeleteDepartmentRequest(model, out error); if (!IsComplete) { StaffListBl.LoadDictionaries(model); ModelState.AddModelError("MessageStr", error); } else { model = StaffListBl.GetDepartmentRequest(model); ModelState.AddModelError("MessageStr", error); } } else { IsComplete = model.IsSoftAdminApprove && model.IsSoftAdmin ? StaffListBl.SaveProgramCodes(model, out error) : StaffListBl.SaveEditDepartmentRequest(model, out error); if (!IsComplete) { StaffListBl.LoadDictionaries(model); ModelState.AddModelError("MessageStr", error); } else { model = StaffListBl.GetDepartmentRequest(model); ModelState.AddModelError("MessageStr", error); } } } else StaffListBl.LoadDictionaries(model); //для комментариев ViewBag.PlaceId = model.Id; ViewBag.PlaceTypeId = 2; return View(model); }
public ActionResult StaffDepartmentRequest(int RequestType, int? DepartmentId, int? Id) { ModelState.Clear(); StaffDepartmentRequestModel model = new StaffDepartmentRequestModel(); ViewBag.Title = RequestType == 1 ? "Заявка на создание нового подразделения" : (RequestType == 2 ? "Заявка на изменение подразделения" : "Заявка на удаление подразделения"); model.RequestTypeId = RequestType; if (model.RequestTypeId == 1) model.ParentId = DepartmentId.Value; else model.DepartmentId = DepartmentId.Value; model.Id = Id.HasValue ? Id.Value : 0; model = StaffListBl.GetDepartmentRequest(model); //для комментариев ViewBag.PlaceId = model.Id; ViewBag.PlaceTypeId = 2; return View(model); }
public ActionResult RefreshDepartmentRequestReference(int SwitchReference) { StaffDepartmentRequestModel model = new StaffDepartmentRequestModel(); model.RequestTypeId = 1; model.Id = 0; StaffListBl.LoadDictionaries(model); if (SwitchReference == 1) return Json(new { ok = true, msg = "", model.SoftGroups }); else return Json(new { ok = true, msg = "", model.OperationGroups }); }
protected bool ValidateModel(StaffDepartmentRequestModel model) { //добавление //если по данному подразделению это не первая заявка, то нужно достать предыдущий код для финграда if (string.IsNullOrEmpty(model.Name) || string.IsNullOrWhiteSpace(model.Name)) { ModelState.AddModelError("Name", "Введите название подразделения!"); ModelState.AddModelError("MessageStr", "Введите название подразделения!"); } if (model.BFGId == 0) { ModelState.AddModelError("BFGId", "Укажите принадлежность подразделения!"); ModelState.AddModelError("MessageStr", "Укажите принадлежность подразделения!"); } //для налоговиков при согласовании if (!model.IsDraft) { if (model.DepNextId == 0 && (model.ItemLevel <= 2 || model.ItemLevel == 7) && AuthenticationService.CurrentUser.UserRole == UserRole.TaxCollector && model.BFGId == 2) { ModelState.AddModelError("DepNextId", "Укажите подразделение с налоговыми рекизитами!"); ModelState.AddModelError("MessageStr", "Укажите подразделение с налоговыми рекизитами!"); } } //проверки при редактировании действующей заявки if (model.IsUsed) { //если меняется тип подразделения на определенные виды (КК/ОО/ДО в МО и обратно) if ((model.DepTypeId == 9 && (model.DepTypeIdOld == 8 || model.DepTypeIdOld == 14 || model.DepTypeIdOld == 7)) || (model.DepTypeIdOld == 9 && (model.DepTypeId == 8 || model.DepTypeId == 14 || model.DepTypeId == 7))) { ModelState.AddModelError("DepTypeId", "В действующей заявке нельзя изменить текущий тип подразделения!"); ModelState.AddModelError("MessageStr", "В действующей заявке нельзя изменить текущий тип подразделения!"); } //если меняется причина внесения в справочник (9, 10, 11, 12 - виды переездов) if (((model.ReasonId == 9 || model.ReasonId == 10 || model.ReasonId == 11 || model.ReasonId == 12) && model.ReasonId != model.ReasonIdOld) || ((model.ReasonIdOld == 9 || model.ReasonIdOld == 10 || model.ReasonIdOld == 11 || model.ReasonIdOld == 12) && model.ReasonId != model.ReasonIdOld)) { ModelState.AddModelError("ReasonId", "В действующей заявке нельзя изменить текущую причину внесения в справочник!"); ModelState.AddModelError("MessageStr", "В действующей заявке нельзя изменить текущую причину внесения в справочник!"); } } if (!string.IsNullOrEmpty(model.PyrusNumber)) { try { Convert.ToInt32(model.PyrusNumber); } catch { ModelState.AddModelError("PyrusNumber", "Номер задачи в системе Пайрус должен состоять из цифр!"); ModelState.AddModelError("MessageStr", "Номер задачи в системе Пайрус должен состоять из цифр!"); } } return ModelState.IsValid; }