예제 #1
0
        /// <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;
            }
        }
예제 #2
0
        /// <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;
        }
예제 #3
0
        /// <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 + " - Член правления банка" });
        }
예제 #4
0
        /// <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;
        }
예제 #5
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;
        }
예제 #6
0
        /// <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;
        }
예제 #7
0
        /// <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;
        }
예제 #8
0
        /// <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;
        }
예제 #9
0
        /// <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;
            }
        }
예제 #10
0
        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);
        }
예제 #11
0
        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);
        }
예제 #12
0
        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 });
        }
예제 #13
0
        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;
        }