Beispiel #1
0
        /// <summary>
        /// Определяем состояние согласования заявки.
        /// </summary>
        /// <param name="model">Модель</param>
        /// <param name="entity">Данные заявки</param>
        protected void SetApprovalFlags(StaffEstablishedPostRequestModel model, StaffEstablishedPostRequest entity)
        {
            User curUser = UserDao.Get(AuthenticationService.CurrentUser.Id);//текущий пользователь

            //заполняем списки согласовантов
            if (entity.Creator != null)
                GetApprovalLists(model, entity);

            //за согласовантов могут отработать кураторы и кадровики банка.
            model.IsCurator = (AuthenticationService.CurrentUser.UserRole == UserRole.Inspector);
            model.IsPersonnelBank = (AuthenticationService.CurrentUser.UserRole == UserRole.ConsultantPersonnel);
            model.IsConsultant = (AuthenticationService.CurrentUser.UserRole == UserRole.ConsultantOutsourcing);

            //разбираемся с состоянием птиц
            //выбираем из согласования не архивные записи.
            IList<DocumentApproval> DocApproval = DocumentApprovalDao.GetDocumentApproval(entity.Id, (int)ApprovalTypeEnum.StaffEstablishedPostRequest);

            //для новых/автоматически сформированных заявок
            if (DocApproval == null || DocApproval.Count == 0)
            {
                model.IsInitiatorApproveAvailable = entity.IsUsed ? false : (model.Initiators.Count != 0 && (model.IsCurator || model.IsPersonnelBank || model.IsConsultant || (model.Initiators != null && model.Initiators.Where(x => x.Id == curUser.Id).Count() != 0)) ? true : false);
                model.IsTopManagerApproveAvailable = false;
                model.IsBoardMemberApproveAvailable = false;
                model.IsAgreeButtonAvailable = model.IsInitiatorApproveAvailable;
            }
            else
            {
                //потом проводим слесарную обработку по состоянию согласования
                foreach (DocumentApproval item in DocApproval.OrderBy(x => x.Number))
                {
                    string PyrusNumber = entity.StaffRequestPyrusTasks.Where(x => x.DocumentApproval.Number == item.Number).Count() != 0 ? entity.StaffRequestPyrusTasks.Where(x => x.DocumentApproval.Number == item.Number).Single().NumberTask : string.Empty;
                    switch (item.Number)
                    {
                        case 1://инициатор
                            model.IsInitiatorApprove = true;
                            model.IsInitiatorApproveAvailable = false;
                            model.InitiatorApproveName = "Заявка создана " + item.CreateDate.Value.ToShortDateString() + " " + (item.AssistantUser == null ? "Инициатор: " + item.ApproveUser.Name + " - " + item.ApproveUser.Position.Name
                                : "Автор заявки: " + item.AssistantUser.Name + "; Инициатор: " + item.ApproveUser.Name + " - " + item.ApproveUser.Position.Name);
                            model.InitiatorId = item.AssistantUser == null ? item.ApproveUser.Id : item.AssistantUser.Id;

                            if (!string.IsNullOrEmpty(PyrusNumber))
                            {
                                model.InitiatorPyrusName = "Задача в Пайрус № " + PyrusNumber;
                                model.InitiatorPyrusRef = @"https://pyrus.com/t#id" + PyrusNumber;
                            }

                            //открываем согласование для следующего участника процесса
                            model.IsCuratorApproveAvailable = model.IsCurator || model.IsConsultant ? true : false;
                            model.IsAgreeButtonAvailable = model.IsCuratorApproveAvailable;

                            //открываем согласование для следующего участника процесса
                            if (entity.Department.DepartmentAccessory != null)
                            {
                                if (entity.Department.DepartmentAccessory.Id == 2 || entity.Department.DepartmentAccessory.Id == 6)//кураторы согласуют фронты и бэкфронты
                                {
                                    model.IsCuratorApproveAvailable = model.IsCurator || model.IsConsultant ? true : false;
                                    model.IsAgreeButtonAvailable = model.IsCuratorApproveAvailable;
                                }
                                else
                                {
                                    model.IsPersonnelBankApproveAvailable = model.IsPersonnelBank || model.IsConsultant ? true : false;
                                    model.IsAgreeButtonAvailable = model.IsPersonnelBankApproveAvailable;
                                }
                            }
                            break;
                        case 2://куратор
                            model.IsCuratorApprove = true;
                            model.IsCuratorApproveAvailable = false;
                            model.CuratorApproveName = "Заявка проверена " + item.CreateDate.Value.ToShortDateString() + " " + "Куратор: " + item.ApproveUser.Name;
                            if (!string.IsNullOrEmpty(PyrusNumber))
                            {
                                model.CuratorPyrusName = "Задача в Пайрус № " + PyrusNumber;
                                model.CuratorPyrusRef = @"https://pyrus.com/t#id" + PyrusNumber;
                            }

                            //открываем согласование для следующего участника процесса
                            model.IsPersonnelBankApproveAvailable = model.IsPersonnelBank || model.IsConsultant ? true : false;
                            model.IsAgreeButtonAvailable = model.IsPersonnelBankApproveAvailable;
                            break;
                        case 3://кадровик
                            model.IsPersonnelBankApprove = true;
                            model.IsPersonnelBankApproveAvailable = false;
                            model.PersonnelBankApproveName = "Заявка проверена " + item.CreateDate.Value.ToShortDateString() + " " + "Кадровик банка: " + item.ApproveUser.Name;
                            if (!string.IsNullOrEmpty(PyrusNumber))
                            {
                                model.PersonnelBankPyrusName = "Задача в Пайрус № " + PyrusNumber;
                                model.PersonnelBankPyrusRef = @"https://pyrus.com/t#id" + PyrusNumber;
                            }

                            //открываем согласование для следующего участника процесса
                            model.IsTopManagerApproveAvailable = model.TopManagers.Count != 0 && (model.IsCurator || model.IsPersonnelBank || model.IsConsultant || model.TopManagers.Where(x => x.Id == curUser.Id).Count() != 0) ? true : false;
                            model.IsAgreeButtonAvailable = model.IsTopManagerApproveAvailable;
                            break;
                        case 4://вышестоящий руководитель
                            model.IsTopManagerApprove = true;
                            model.IsTopManagerApproveAvailable = false;
                            model.TopManagerApproveName = "Заявка согласована " + item.CreateDate.Value.ToShortDateString() + " " + (item.AssistantUser == null ? "Согласовант: " + item.ApproveUser.Name + " - " + item.ApproveUser.Position.Name
                                : "Согласовал: " + item.AssistantUser.Name + "; Согласовант: " + item.ApproveUser.Name + " - " + item.ApproveUser.Position.Name);
                            model.TopManagerId = item.AssistantUser == null ? item.ApproveUser.Id : item.AssistantUser.Id;
                            if (!string.IsNullOrEmpty(PyrusNumber))
                            {
                                model.TopManagerPyrusName = "Задача в Пайрус № " + PyrusNumber;
                                model.TopManagerPyrusRef = @"https://pyrus.com/t#id" + PyrusNumber;
                            }

                            //открываем согласование для следующего участника процесса
                            model.IsBoardMemberApproveAvailable = model.BoardMembers.Count != 0 && (model.IsCurator || model.IsPersonnelBank || model.IsConsultant || model.BoardMembers.Where(x => x.Id == curUser.Id).Count() != 0) ? true : false;
                            model.IsAgreeButtonAvailable = model.IsBoardMemberApproveAvailable;
                            break;
                        case 5://член правления
                            model.IsBoardMemberApprove = true;
                            model.IsBoardMemberApproveAvailable = false;
                            model.BoardMemberApproveName = "Заявка утверждена " + item.CreateDate.Value.ToShortDateString() + " " + (item.AssistantUser == null ? "Утвердил: " + item.ApproveUser.Name + " - Член правления банка"// + item.ApproveUser.Position.Name
                                : "Утвердил: " + item.AssistantUser.Name + "; Утверждающий: " + item.ApproveUser.Name + " - Член правления банка");
                            model.BoardMemberId = item.AssistantUser == null ? item.ApproveUser.Id : item.AssistantUser.Id;
                            model.IsAgreeButtonAvailable = false;

                            if (!string.IsNullOrEmpty(PyrusNumber))
                            {
                                model.BoardMemberPyrusName = "Задача в Пайрус № " + PyrusNumber;
                                model.BoardMemberPyrusRef = @"https://pyrus.com/t#id" + PyrusNumber;
                            }
                            break;
                    }
                }
            }

            if (UserRole.Manager != AuthenticationService.CurrentUser.UserRole && UserRole.Inspector != AuthenticationService.CurrentUser.UserRole
                    && UserRole.ConsultantOutsourcing != AuthenticationService.CurrentUser.UserRole && UserRole.ConsultantPersonnel != AuthenticationService.CurrentUser.UserRole
                    && UserRole.Director != AuthenticationService.CurrentUser.UserRole)
            {
                model.IsAgreeButtonAvailable = false;
            }

            if (entity.DeleteDate.HasValue)
            {
                model.IsDraftButtonAvailable = false;
                model.IsAgreeButtonAvailable = false;
            }
        }
Beispiel #2
0
        /// <summary>
        /// Загрузка реквизитов инициатора и подразделения к заявкам для штатных единиц
        /// </summary>
        /// <param name="model">Заполняемая модель заявки.</param>
        /// <returns></returns>
        protected void GetDepRequestInfo(StaffEstablishedPostRequestModel model)
        {
            User curUser = UserDao.Load(model.UserId != 0 ? model.UserId : AuthenticationService.CurrentUser.Id);
            model.DepartmentName = curUser.Department != null ? curUser.Department.Name : string.Empty;
            model.RequestInitiator = curUser.Name + " - " + (curUser.Position != null ? curUser.Position.Name : string.Empty);

            if (model.DepartmentId != 0)
            {
                Department dep = DepartmentDao.Get(model.DepartmentId);
                model.DepartmentName = dep.Name;
                model.FingradCode = dep.FingradCode;
                int DepId = StaffDepartmentRequestDao.GetCurrentRequestId(dep != null ? dep.Id : 0);
                if (DepId != 0)
                {
                    StaffDepartmentRequest DepEntity = StaffDepartmentRequestDao.Get(DepId);
                    //model.IsBack = DepEntity.IsBack;
                    if (DepEntity.LegalAddress != null)
                    {
                        model.LegalAddress = DepEntity.LegalAddress.Address;
                    }
                    model.IsTaxAdminAccount = DepEntity.IsTaxAdminAccount;
                    model.IsEmployeAvailable = DepEntity.IsEmployeAvailable;
                    model.AccessoryName = DepEntity.DepartmentAccessory != null ? DepEntity.DepartmentAccessory.Name : string.Empty;
                }

                //налоговые реквизиты
                //StaffDepartmentTaxDetails dt = StaffDepartmentTaxDetailsDao.Get(dep.Id);
                model.KPP = dep.DepartmentTaxDetails != null && dep.DepartmentTaxDetails.Count != 0 ? dep.DepartmentTaxDetails[0].KPP : string.Empty;
                model.OKTMO = dep.DepartmentTaxDetails != null && dep.DepartmentTaxDetails.Count != 0 ? dep.DepartmentTaxDetails[0].OKTMO : string.Empty;
                model.OKATO = dep.DepartmentTaxDetails != null && dep.DepartmentTaxDetails.Count != 0 ? dep.DepartmentTaxDetails[0].OKATO : string.Empty;
                model.RegionCode = dep.DepartmentTaxDetails != null && dep.DepartmentTaxDetails.Count != 0 ? dep.DepartmentTaxDetails[0].RegionCode : string.Empty;
                model.TaxAdminCode = dep.DepartmentTaxDetails != null && dep.DepartmentTaxDetails.Count != 0 ? dep.DepartmentTaxDetails[0].TaxAdminCode : string.Empty;
                model.TaxAdminName = dep.DepartmentTaxDetails != null && dep.DepartmentTaxDetails.Count != 0 ? dep.DepartmentTaxDetails[0].TaxAdminName : string.Empty;
                model.PostAddress = dep.DepartmentTaxDetails != null && dep.DepartmentTaxDetails.Count != 0 ? dep.DepartmentTaxDetails[0].PostAddress : string.Empty;
            }
        }
Beispiel #3
0
        /// <summary>
        /// Сохраняем согласования.
        /// </summary>
        /// <param name="model">Модель</param>
        /// <param name="entity">Текущая заявка.</param>
        /// <param name="curUser">текущий пользователь.</param>
        /// <param name="error">Сообщение об ошибке.</param>
        /// <returns></returns>
        protected int SaveStaffEstablishedPostApprovals(StaffEstablishedPostRequestModel model, StaffEstablishedPostRequest entity, User curUser, out string error)
        {
            //возвращает значения от 1 до 4 - этап согласования прошел успешно, 0 - согласование завершено, заявка утверждена, -1 - ошибка при сохранении данных

            //только после утверждения заявки можно редактировать справочник подразделений.
            error = string.Empty;

            //в каждой ветке определяемся с участниками групповухи под кодовым названием согласование/утверждение заявки для подразделения
            //текущим пользователем может быть куратор ии кадровик, которые могут действовать за согласовантов
            User Assistant = AuthenticationService.CurrentUser.UserRole == UserRole.Inspector
                || AuthenticationService.CurrentUser.UserRole == UserRole.ConsultantPersonnel
                || AuthenticationService.CurrentUser.UserRole == UserRole.ConsultantOutsourcing ? curUser : null;//куратор/кадровик банка/консультант РК

            //выбираем из согласования не архивные записи.
            IList<DocumentApproval> DocApproval = DocumentApprovalDao.GetDocumentApproval(entity.Id, (int)ApprovalTypeEnum.StaffEstablishedPostRequest);
            DocumentApproval da = new DocumentApproval();

            da.ApprovalType = (int)ApprovalTypeEnum.StaffEstablishedPostRequest;
            da.DocId = entity.Id;
            da.IsArchive = false;
            da.CreateDate = DateTime.Now;

            switch (DocApproval.Count)
            {
                case 0:
                    //если иницатор не выбран, это значит, что инициатор действует сам
                    User Initiator = model.InitiatorId != 0 ? UserDao.Get(model.InitiatorId) : curUser;//инициатор

                    da.ApproveUser = Initiator;
                    da.AssistantUser = Assistant;
                    da.Number = 1;
                    error = "Заявка создана!";
                    break;
                case 1:
                    da.ApproveUser = curUser;
                    da.AssistantUser = null;
                    da.Number = 2;
                    error = "Заявка проверена куратором!";
                    break;
                case 2:
                    da.ApproveUser = curUser;
                    da.AssistantUser = null;
                    da.Number = 3;
                    error = "Заявка проверена кадровиком банка!";
                    break;
                case 3:
                    //если согласовант не выбран, это значит, что он действует сам
                    User TopManager = model.TopManagerId != 0 ? UserDao.Get(model.TopManagerId) : curUser;//высший руководитель

                    da.ApproveUser = TopManager;
                    da.AssistantUser = Assistant;
                    da.Number = 4;
                    error = "Заявка согласована!";
                    break;
                case 4:
                    //если утверждающий не выбран, это значит, что он действует сам
                    User BoardMember = model.BoardMemberId != 0 ? UserDao.Get(model.BoardMemberId) : curUser;//член правления

                    da.ApproveUser = BoardMember;
                    da.AssistantUser = Assistant;
                    da.Number = 5;
                    error = "Заявка утверждена!";
                    break;
            }

            try
            {
                DocumentApprovalDao.SaveAndFlush(da);

                //сохраняем здачу пайруса
                if (!string.IsNullOrEmpty(model.PyrusNumber))
                {
                    entity.StaffRequestPyrusTasks.Add(new StaffRequestPyrusTasks()
                    {
                        EPRequest = entity,
                        DocumentApproval = da,
                        NumberTask = model.PyrusNumber,
                        Creator = curUser,
                        CreateDate = DateTime.Now
                    });
                }

                if (da.Number == 1)
                {
                    entity.DateSendToApprove = DateTime.Now;
                    return da.Number;
                }

                if (da.Number > 1 && da.Number < 5)
                    return da.Number;

                if (da.Number == 5)
                {
                    //entity.BeginAccountDate = DateTime.Now;
                    entity.DateAccept = DateTime.Now;
                }
            }
            catch (Exception ex)
            {
                DocumentApprovalDao.RollbackTran();
                error = string.Format("Произошла ошибка при сохранении данных! Исключение:{0}", ex.GetBaseException().Message);
                return -1;
            }

            return 0;
        }
Beispiel #4
0
        /// <summary>
        /// Процедура отклонения существующей заявки для штатной единицы.
        /// </summary>
        /// <param name="model">Модель заявки.</param>
        /// <param name="error">Сообщенио об ошибке.</param>
        /// <returns></returns>
        public bool DeleteEstablishedPostRequest(StaffEstablishedPostRequestModel model, out string error)
        {
            error = string.Empty;
            StaffEstablishedPostRequest entity = StaffEstablishedPostRequestDao.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;

                //если отклоняется заявка на сокращение, то в расстановке убираем все резервы и отметки
                if (entity.StaffEstablishedPost.EstablishedPostUserLinks.Where(x => x.IsUsed && x.IsDismissal).Count() != 0)
                {
                    foreach(StaffEstablishedPostUserLinks ul in entity.StaffEstablishedPost.EstablishedPostUserLinks.Where(x => x.IsUsed && x.IsDismissal))
                    {
                        ul.IsDismissal = false;
                        ul.ReserveType = 0;
                        ul.DocId = 0;
                        ul.Editor = UserDao.Get(AuthenticationService.CurrentUser.Id);
                        ul.EditDate = DateTime.Now;
                    }
                }

                error = "Заявка отклонена!";

                if (model.Id != 0)
                {
                    try
                    {
                        StaffEstablishedPostRequestDao.SaveAndFlush(entity);
                        model.Id = entity.Id;
                    }
                    catch (Exception ex)
                    {
                        StaffEstablishedPostRequestDao.RollbackTran();
                        error = string.Format("Произошла ошибка при сохранении данных! Исключение:{0}", ex.GetBaseException().Message);
                        return false;
                    }
                }
                return true;
            }

            //если не по той ветке пошли
            error = "Произошла ошибка при сохранении данных! Обратитесь к разработчикам!";
            return false;
        }
Beispiel #5
0
        /// <summary>
        /// Процедура заполняет списки согласовантов, на случай, если за них согласовывают кураторы или кадровики банка.
        /// </summary>
        /// <param name="model">Модель</param>
        /// <param name="entity">Данные заявки.</param>
        protected void GetApprovalLists(StaffEstablishedPostRequestModel model, StaffEstablishedPostRequest entity)
        {
            //определяем родительское подразделение
            Department Parentdep = DepartmentDao.GetByCode(entity.Department.ParentId.ToString());

            //относительно родительского ищем руководителей
            //помним, что начальника может не быть в родительском подразделении, по этому ищем вверх по ветке всех руководителей
            IList<User> Initiators = DepartmentDao.GetDepartmentManagersWithManualLinks(model.DepartmentId)//DepartmentDao.GetDepartmentManagers(Parentdep.Id, true)
                .OrderByDescending<User, int?>(manager => manager.Level)
                .ToList<User>();

            ////если инициатором является куратор или кадровик банка, то по ветке подразделения находим руководителей на уровень выше создаваемого подразделения
            if (entity.Creator.Id == AuthenticationService.CurrentUser.Id && AuthenticationService.CurrentUser.UserRole == UserRole.Manager)
            {
                model.Initiators = Initiators.Where(x => x.Id == AuthenticationService.CurrentUser.Id).ToList().ConvertAll(x => new IdNameDto { Id = x.Id, Name = x.Name + " - " + x.Position.Name });
            }
            else
            {
                model.Initiators = Initiators.Where(x => x.Level >= 3).ToList().ConvertAll(x => new IdNameDto { Id = x.Id, Name = x.Name + " - " + x.Position.Name });
                //если создатель заявки руководитель, то позиционируемся на нем
                if (entity.Creator.UserRole == UserRole.Manager)
                    model.InitiatorId = entity.Creator.Id;
            }

            //вышестоящее руководство
            model.TopManagers = Initiators.Where(x => x.Level <= 3).ToList().ConvertAll(x => new IdNameDto { Id = x.Id, Name = x.Name + " - " + x.Position.Name });

            //члены правления
            model.BoardMembers = UserDao.GetUsersWithRole(UserRole.Director)
                .Where(x => x.IsActive && x.DirectorsRight.Count != 0)
                .ToList()
                .ConvertAll(x => new IdNameDto { Id = x.Id, Name = x.Name + " - Член правления банка" });
        }
Beispiel #6
0
        /// <summary>
        /// Процедура сохранения существующей заявки для штатной единицы.
        /// </summary>
        /// <param name="model">Модель заявки.</param>
        /// <param name="error">Сообщенио об ошибке.</param>
        /// <returns></returns>
        public bool SaveEditEstablishedPostRequest(StaffEstablishedPostRequestModel model, out string error)
        {
            error = string.Empty;

            ////начало теста
            //int aa = StaffEstablishedPostRequestDao.TestExecStoredProcedure(2);
            //error = aa.ToString();
            //return false;
            ////конец теста

            //несогласованная заявка для штатной единицы должна быть только одна
            if (model.RequestTypeId != 1)//для редактирования и сокращения
            {
                if (!StaffEstablishedPostRequestDao.CheckEnabeldCreateNewRequest(model.SEPId, model.Id))
                {
                    error = "Редактировать/Согласовать данную заявку для данной штатной единицы невозможно, так как уже существует неутвержденная заявка!";
                    return false;
                }
            }

            StaffEstablishedPostRequest entity = StaffEstablishedPostRequestDao.Get(model.Id);
            if (entity == null)
            {
                error = "Заявка не найдена! Обратитесь к разработчикам!";
                return false;
            }
            else
            {
                if (!model.IsDraft)
                {
                    bool IsEnabled = false;
                    //для подразделений уже давно существующих, смотрим наличие налоговых реквизитов
                    if (entity.Department.DepartmentTaxDetails.Count != 0)
                    {
                        if ((!string.IsNullOrEmpty(entity.Department.DepartmentTaxDetails[0].TaxAdminCode) && !string.IsNullOrWhiteSpace(entity.Department.DepartmentTaxDetails[0].TaxAdminCode)) ||
                            (!string.IsNullOrEmpty(entity.Department.DepartmentTaxDetails[0].OKTMO) && !string.IsNullOrWhiteSpace(entity.Department.DepartmentTaxDetails[0].OKTMO)) ||
                            (!string.IsNullOrEmpty(entity.Department.DepartmentTaxDetails[0].KPP) && !string.IsNullOrWhiteSpace(entity.Department.DepartmentTaxDetails[0].KPP)))
                            IsEnabled = true;
                    }

                    //для совсем свежих подразделений находим заявку и смотрим там соседа с налоговыми реквизитами
                    if (!IsEnabled)
                    {
                        StaffDepartmentRequest sdr = StaffDepartmentRequestDao.Get(StaffDepartmentRequestDao.GetCurrentRequestId(entity.Department != null ? entity.Department.Id : 0));

                        if (sdr != null)
                        {
                            if (sdr.DepNext != null && sdr.DepNext.DepartmentTaxDetails.Count != 0)
                            {
                                if ((!string.IsNullOrEmpty(sdr.DepNext.DepartmentTaxDetails[0].TaxAdminCode) && !string.IsNullOrWhiteSpace(sdr.DepNext.DepartmentTaxDetails[0].TaxAdminCode)) ||
                                    (!string.IsNullOrEmpty(sdr.DepNext.DepartmentTaxDetails[0].OKTMO) && !string.IsNullOrWhiteSpace(sdr.DepNext.DepartmentTaxDetails[0].OKTMO)) ||
                                    (!string.IsNullOrEmpty(sdr.DepNext.DepartmentTaxDetails[0].KPP) && !string.IsNullOrWhiteSpace(sdr.DepNext.DepartmentTaxDetails[0].KPP)))
                                    IsEnabled = true;
                            }
                        }
                    }

                    if (!IsEnabled)
                    {
                        error = "Нельзя создать/изменить/сократить штатную единицу, так как данное подразделение не стоит на налоговом учете!";
                        return false;
                    }

                    if (entity.RequestType.Id == 3 && StaffEstablishedPostDao.GetEstablishedPostUsedForCheckToDismiss(entity.StaffEstablishedPost != null ? entity.StaffEstablishedPost.Id : 0) != 0)
                    {
                        error = "Нельзя сократить штатную единицу, так как она еще содержит работающих сотрудников!";
                        return false;
                    }

                    //if (entity.RequestType.Id == 3 && entity.StaffEstablishedPost.EstablishedPostUserLinks.Where(x => x.ReserveType.HasValue && x.ReserveType.Value != 0 && x.ReserveType.Value != 3).Count() != 0)
                    //{
                    //    error = "Нельзя сократить штатную единицу, так как она еще содержит забронированные позиции!";
                    //    return false;
                    //}

                    //if (entity.Quantity < StaffEstablishedPostDao.GetEstablishedPostUsed(entity.StaffEstablishedPost != null ? entity.StaffEstablishedPost.Id : 0))
                    //{
                    //    error = "Нельзя сократить штатную единицу, так как она еще содержит работающих сотрудников больше, чем указанное количество в заявке!";
                    //    return false;
                    //}
                }
            }

            User curUser = UserDao.Load(AuthenticationService.CurrentUser.Id);

            entity.RequestType = StaffEstablishedPostRequestTypesDao.Load(model.RequestTypeId);
            entity.DateRequest = DateTime.Now;
            entity.StaffEstablishedPost = model.RequestTypeId == 1 ? null : StaffEstablishedPostDao.Get(model.SEPId);
            entity.Position = PositionDao.Get(model.PositionId);
            entity.Department = model.DepartmentId != 0 ? DepartmentDao.Get(model.DepartmentId) : null;
            entity.Schedule = model.ScheduleId != 0 ? ScheduleDao.Get(model.ScheduleId) : null;
            entity.WorkingCondition = model.WCId != 0 ? StaffWorkingConditionsDao.Get(model.WCId) : null;
            //(model.RequestTypeId == 3 || model.RequestTypeId == 4) && model.Personnels.Where(x => x.UserId != 0 && x.IsDismissal).Count() == 0
            if (model.RequestTypeId == 1 || model.RequestTypeId == 2)
            {
                entity.Quantity = model.Quantity;
                entity.Salary = model.Salary;
            }
            //entity.BeginAccountDate = model.BeginAccountDate;
            entity.Reason = model.ReasonId.HasValue ? AppointmentReasonDao.Get(model.ReasonId.Value) : null;
            entity.IsDraft = entity.IsUsed ? false : model.IsDraft;
            entity.Editor = curUser;
            entity.EditDate = DateTime.Now;
            entity.BeginAccountDate = model.BeginAccountDate;

            //при сокращении ставим метки в расстановке (до начала согласования)
            if ((entity.RequestType.Id == 2 || entity.RequestType.Id == 3 || entity.RequestType.Id == 4) && !entity.DateSendToApprove.HasValue && entity.StaffEstablishedPost != null)
            {
                foreach (StaffEstablishedPostUserLinks ul in entity.StaffEstablishedPost.EstablishedPostUserLinks)
                {
                    if (model.Personnels.Where(x => x.Id == ul.Id && x.IsDismissal != ul.IsDismissal).Count() != 0)
                    {
                        StaffUserLinkDto item = model.Personnels.Where(x => x.Id == ul.Id && x.IsDismissal != ul.IsDismissal).FirstOrDefault();

                        if (entity.RequestType.Id == 3 && (item.ReserveType == 1 || item.ReserveType == 2) && item.IsDismissal)
                        {
                            error = "Помечена к сокращению забронированная позиция! Выполнение операции прервано!";
                            return false;
                        }

                        ul.IsDismissal = item.IsDismissal;
                        ul.DateDistribNote = item.DateDistribNote;
                        ul.DateReceivNote = item.DateReceivNote;
                        ul.ReserveType = item.IsDismissal ? (int)StaffReserveTypeEnum.Dismissal : 0;
                        ul.DocId = item.IsDismissal ? entity.Id : 0;
                        ul.Editor = curUser;
                        ul.EditDate = DateTime.Now;
                    }
                }
            }

            //надбавки
            //сохраняем только при открытии и изменении до отправки на согласование
            if (model.RequestTypeId != 3 && !entity.DateSendToApprove.HasValue)
            {
                if (entity.PostChargeLinks == null)
                    entity.PostChargeLinks = new List<StaffEstablishedPostChargeLinks>();

                foreach (var item in model.PostChargeLinks)
                {
                    StaffEstablishedPostChargeLinks pcl = new StaffEstablishedPostChargeLinks();

                    //если была запись и убрали значения, то удаляем
                    if ((item.Id != 0 && item.Amount == 0) || (item.Id != 0 && item.IsNeeded && !item.IsUsed))
                    {
                        pcl = entity.PostChargeLinks.Where(x => x.Id == item.Id).Single();
                        entity.PostChargeLinks.Remove(pcl);
                    }

                    //если не было записи и ввели значение, то добавляем
                    if ((item.Id == 0 && item.Amount != 0) || (item.Id == 0 && item.IsNeeded && item.IsUsed))
                    {
                        pcl.EstablishedPostRequest = entity;
                        pcl.EstablishedPost = entity.StaffEstablishedPost;
                        pcl.ExtraCharges = StaffExtraChargesDao.Get(item.ChargeId);
                        pcl.Amount = item.Amount;
                        pcl.IsUsed = item.IsUsed;
                        pcl.ExtraChargeActions = StaffExtraChargeActionsDao.Get(item.ActionId);
                        pcl.Creator = curUser;
                        pcl.CreateDate = DateTime.Now;

                        entity.PostChargeLinks.Add(pcl);
                    }

                    //запись была и есть код, то предпологаем, что это редактирование (только для надбавок с значением)
                    if (item.Id != 0 /*&& item.Amount != 0*/)
                    {
                        entity.PostChargeLinks.Where(x => x.Id == item.Id).Single().EstablishedPost = entity.StaffEstablishedPost;
                        entity.PostChargeLinks.Where(x => x.Id == item.Id).Single().Amount = item.Amount;
                        entity.PostChargeLinks.Where(x => x.Id == item.Id).Single().ExtraChargeActions = StaffExtraChargeActionsDao.Get(item.ActionId);
                        entity.PostChargeLinks.Where(x => x.Id == item.Id).Single().Editor = curUser;
                        entity.PostChargeLinks.Where(x => x.Id == item.Id).Single().EditDate = DateTime.Now;
                    }
                }
            }

            //создаем запись в справочнике штатных единиц.
            if (!model.IsDraft)
            {

                int Result = entity.RequestType.Id == 4 ? 0 : SaveStaffEstablishedPostApprovals(model, entity, curUser, out error);
                if (Result == -1) return false;

                if (Result == 0)
                {

                    if (!SaveStaffEstablishedPostReference(entity, curUser, out error))
                    {
                        return false;
                    }

                    //для первоначальных данных
                    if (entity.RequestType.Id == 4)
                    {
                        entity.DateSendToApprove = DateTime.Now;
                        entity.BeginAccountDate = entity.BeginAccountDate.HasValue ? entity.BeginAccountDate : DateTime.Now;
                        entity.DateAccept = DateTime.Now;

                        //если создается новая штатная единица и в ней нет сотрудников, то надо указать признак выгрузки в 1С, чтобы пустые заявки не попали в выгрузку кадровых перемещений.
                        //или сокращаются пустые места в расстановке
                        if (entity.StaffEstablishedPost.EstablishedPostUserLinks.Where(x => x.User != null).Count() == 0
                            && entity.StaffEstablishedPost.EstablishedPostUserLinks.Where(x => x.User != null && x.IsDismissal && x.IsUsed).Count() == 0)
                        {
                            entity.SendTo1C = DateTime.Now;
                        }
                    }

                    //если уже была заявка, то у нее убираем признак использования, это для изменения/удаления
                    if (entity.RequestType.Id != 1)
                    {
                        int OldRequestId = StaffEstablishedPostRequestDao.GetCurrentRequestId(entity.StaffEstablishedPost.Id);
                        if (OldRequestId != 0)
                        {
                            StaffEstablishedPostRequest OldEntity = StaffEstablishedPostRequestDao.Get(OldRequestId);
                            OldEntity.IsUsed = false;

                            try
                            {
                                StaffEstablishedPostRequestDao.SaveAndFlush(OldEntity);
                            }
                            catch (Exception ex)
                            {
                                StaffEstablishedPostRequestDao.RollbackTran();
                                error = string.Format("Произошла ошибка при сохранении данных! Исключение:{0}", ex.GetBaseException().Message);
                                return false;
                            }
                        }
                    }

                    entity.IsUsed = true;
                    error = "Заявка утверждена!";
                }

            }

            if (model.Id != 0)
            {
                try
                {
                    StaffEstablishedPostRequestDao.SaveAndFlush(entity);
                    model.Id = entity.Id;
                    if (model.IsDraft)
                        error = "Данные сохранены!";
                }
                catch (Exception ex)
                {
                    StaffEstablishedPostRequestDao.RollbackTran();
                    error = string.Format("Произошла ошибка при сохранении данных! Исключение:{0}", ex.GetBaseException().Message);
                    return false;
                }

                return true;
            }

            //если не по той ветке пошли
            error = "Произошла ошибка при сохранении данных! Обратитесь к разработчикам!";
            return false;
        }
Beispiel #7
0
        /// <summary>
        /// Процедура сохранения новой заявки для штатной единицы.
        /// </summary>
        /// <param name="model">Модель заявки.</param>
        /// <param name="error">Сообщенио об ошибке.</param>
        /// <returns></returns>
        public bool SaveNewEstablishedPostRequest(StaffEstablishedPostRequestModel model, out string error)
        {
            error = string.Empty;
            StaffEstablishedPostRequest entity;
            User curUser = UserDao.Load(AuthenticationService.CurrentUser.Id);

            //несогласованная заявка для штатной единицы должна быть только одна
            if (model.RequestTypeId != 1)//для редактирования и сокращения
            {
                if (!StaffEstablishedPostRequestDao.CheckEnabeldCreateNewRequest(model.SEPId, model.Id))
                {
                    error = "Создать новую заявку для данной штатной единицы невозможно, так как уже существует неутвержденная заявка!";
                    return false;
                }
            }

            if (model.Id == 0)
            {

                entity = new StaffEstablishedPostRequest
                {
                    RequestType = StaffEstablishedPostRequestTypesDao.Load(model.RequestTypeId),
                    DateRequest = DateTime.Now,
                    StaffEstablishedPost = model.RequestTypeId == 1 ? null : StaffEstablishedPostDao.Get(model.SEPId),
                    Position = PositionDao.Get(model.PositionId),
                    Department = model.DepartmentId != 0 ? DepartmentDao.Get(model.DepartmentId) : null,
                    Schedule = model.ScheduleId != 0 ? ScheduleDao.Get(model.ScheduleId) : null,
                    WorkingCondition = model.WCId != 0 ? StaffWorkingConditionsDao.Get(model.WCId) : null,
                    Quantity = model.RequestTypeId != 3 ? model.Quantity : model.QuantityPrev,
                    Salary = model.RequestTypeId != 3 ? model.Salary : model.SalaryPrev,
                    BeginAccountDate = model.BeginAccountDate,
                    IsUsed = false,
                    IsDraft = true,
                    Reason = model.ReasonId.HasValue ? AppointmentReasonDao.Get(model.ReasonId.Value) : null,
                    Creator = curUser,
                    CreateDate = DateTime.Now
                };

                //надбавки
                entity.PostChargeLinks = new List<StaffEstablishedPostChargeLinks>();
                foreach (var item in model.PostChargeLinks.Where(x => x.Amount != 0 || x.IsUsed))
                {
                    entity.PostChargeLinks.Add(new StaffEstablishedPostChargeLinks
                    {
                        EstablishedPostRequest = entity,
                        EstablishedPost = entity.StaffEstablishedPost,
                        ExtraCharges = StaffExtraChargesDao.Get(item.ChargeId),
                        Amount = item.Amount,
                        ExtraChargeActions = StaffExtraChargeActionsDao.Get(item.ActionId),
                        IsUsed = item.IsUsed,
                        Creator = curUser,
                        CreateDate = DateTime.Now
                    });
                }

                //расстановка
                //при сокращении или вводе ременной вакансии ставим метки в расстановке
                if (entity.RequestType.Id == 2 || entity.RequestType.Id == 3 || (entity.RequestType.Id == 4 && (model.Personnels != null && model.Personnels.Count != 0)))
                {
                    ////на случай добавления вакансии
                    //if (entity.RequestType.Id == 2 || (entity.RequestType.Id == 4 && model.Personnels.Count != 0))
                    //{
                    //    int CountLinks = entity.StaffEstablishedPost.EstablishedPostUserLinks != null ? entity.StaffEstablishedPost.EstablishedPostUserLinks.Count() : 0;
                    //    if (entity.Quantity > CountLinks)
                    //    {
                    //        CountLinks = entity.Quantity - CountLinks;
                    //        for (int i = 0; i < CountLinks; i++)
                    //        {
                    //            entity.StaffEstablishedPost.EstablishedPostUserLinks.Add(new StaffEstablishedPostUserLinks()
                    //            {
                    //                StaffEstablishedPost = entity.StaffEstablishedPost,
                    //                User = null,
                    //                IsUsed = false,
                    //                Creator = curUser,
                    //                CreateDate = DateTime.Now
                    //            });
                    //        }
                    //    }
                    //}

                    foreach (StaffEstablishedPostUserLinks ul in entity.StaffEstablishedPost.EstablishedPostUserLinks)
                    {
                        if (model.Personnels.Where(x => x.Id == ul.Id).Count() != 0)
                        {
                            StaffUserLinkDto item = model.Personnels.Where(x => x.Id == ul.Id).FirstOrDefault();
                            if (entity.RequestType.Id == 3 || entity.RequestType.Id == 4)
                            {
                                ul.IsDismissal = item.IsDismissal;//model.Personnels.Where(x => x.Id == ul.Id).Single().IsDismissal;
                                ul.DateDistribNote = item.DateDistribNote;
                                ul.DateReceivNote = item.DateReceivNote;
                            }

                            ul.Editor = curUser;
                            ul.EditDate = DateTime.Now;
                        }
                    }
                }

                try
                {
                    StaffEstablishedPostRequestDao.SaveAndFlush(entity);
                    model.Id = entity.Id;
                    error = "Данные сохранены!";
                    return true;
                }
                catch (Exception ex)
                {
                    StaffEstablishedPostRequestDao.RollbackTran();
                    error = string.Format("Произошла ошибка при сохранении данных! Исключение:{0}", ex.GetBaseException().Message);
                    return false;
                }
            }
            //если не по той ветке пошли
            error = "Произошла ошибка при сохранении данных! Обратитесь к разработчикам!";
            return false;
        }
Beispiel #8
0
        /// <summary>
        /// Загрузка справочников модели для заявок к штатным единицам.
        /// </summary>
        /// <param name="model">Модель заявки.</param>
        public void LoadDictionaries(StaffEstablishedPostRequestModel model)
        {
            //реквизиты инициатора
            model.RequestTypes = StaffEstablishedPostRequestTypesDao.LoadAll();
            model.Reasons = AppointmentReasonDao.LoadAll();
            model.Reasons.Insert(0, new AppointmentReason { Code = "", Id = 0, Name = "" });

            model.Schedules = ScheduleDao.LoadAll().Where(x => x.Id == 37 || x.Id == 45 || x.Id == 48).ToList().ConvertAll(x => new SelectListItem { Value = x.Id.ToString(), Text = x.Name });
            model.WorkConditions = StaffWorkingConditionsDao.LoadAllSorted().ToList().ConvertAll(x => new SelectListItem { Value = x.Id.ToString(), Text = x.Name }).OrderBy(x => Int32.Parse(x.Value));

            model.PostChargeActions = StaffExtraChargeActionsDao.LoadAll().ToList().ConvertAll(x => new IdNameDto { Id = x.Id, Name = x.Name });
            model.PostChargeActions.Insert(0, new IdNameDto { Id = 0, Name = "" });

            GetDepRequestInfo(model);

            //список руководителей
            IList<User> managers = DepartmentDao.GetDepartmentManagersWithManualLinks(model.DepartmentId);
            //model.InitiatorId
            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();

            //пытаемся показать правильную расстановку для штатной единицы
            StaffEstablishedPostRequest entity = StaffEstablishedPostRequestDao.Get(model.Id);
            if (entity != null)
            {
                if (entity.StaffEstablishedPost != null)
                {
                    //поля UserId, Surname, IsPregnant определяем так же, как в функции показывающей штатную расстановку
                    model.Personnels = entity.StaffEstablishedPost.EstablishedPostUserLinks
                        .Where(x => x.IsUsed || (!x.IsUsed && x.ReserveType == 3 && x.DocId == entity.Id)).ToList()
                        .ConvertAll(x => new StaffUserLinkDto
                        {
                            Id = x.Id
                            ,SEPId = x.StaffEstablishedPost.Id
                            ,UserId = x.User != null ? x.User.Id : 0
                            ,Surname = x.User != null && (!x.User.IsPregnant.HasValue || !x.User.IsPregnant.Value) && x.User.ChildVacation.Where(z => z.SendTo1C.HasValue && !z.DeleteDate.HasValue && z.BeginDate <= DateTime.Now && z.EndDate >= DateTime.Now).Count() == 0 ? x.User.Name : ""
                            ,IsPregnant = x.User != null ? ((x.User.IsPregnant.HasValue && x.User.IsPregnant.Value) || x.User.ChildVacation.Where(z => z.SendTo1C.HasValue && !z.DeleteDate.HasValue && z.BeginDate <= DateTime.Now && z.EndDate >= DateTime.Now).Count() != 0 ? true : false) : false
                            ,IsUsed = x.IsUsed
                            ,ReserveType = x.ReserveType.HasValue ? x.ReserveType.Value : 0
                            ,DocId = x.DocId.HasValue ? x.DocId.Value : 0
                            ,IsDismissal = x.IsDismissal
                            ,DateDistribNote = x.DateDistribNote
                            ,DateReceivNote = x.DateReceivNote
                        }).OrderBy(x => x.Surname).ToList();
                }

                //согласование - расстановка флажков и т.д.
                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);
            }

            if (model.Personnels == null)
            {
                model.Personnels = StaffEstablishedPostDao.GetStaffEstablishedArrangements(model.DepartmentId).Where(x => x.SEPId == model.SEPId).ToList()
                        .ConvertAll(x => new StaffUserLinkDto
                        {
                            Id = x.Id
                            ,SEPId = x.SEPId
                            ,UserId = x.UserId
                            ,Surname = x.Surname
                            ,IsPregnant = x.IsPregnant
                            ,IsUsed = true
                            ,ReserveType = x.ReserveType
                            ,DocId = x.DocId
                            ,IsDismissal = x.IsDismissal
                            ,DateDistribNote = x.DateDistribNote
                            ,DateReceivNote = x.DateReceivNote
                        }).OrderBy(x => x.Surname).ToList();
            }

            //отображение куска структуры для этого подразделения
            Department CurDep = DepartmentDao.Get(model.DepartmentId);
            StaffDepartmentFingradStructureDto FinStructure = StaffDepartmentRPLinkDao.GetFingradStructureForDeparment(CurDep.ParentId.HasValue ? CurDep.ParentId.Value : 0);
            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;
            }
        }
Beispiel #9
0
        /// <summary>
        /// Заполняем модель заявки для штатной единицы.
        /// </summary>
        /// <param name="model">Модель заявки.</param>
        /// <returns></returns>
        public StaffEstablishedPostRequestModel GetEstablishedPostRequest(StaffEstablishedPostRequestModel model)
        {
            //готовая заявка грузиться по Id
            //создание заявки на создание ШЕ, идет по ветке где Id = 0
            //создание заявки на изменение/удаление, нужно заполнить текущими даными, но с обнуленным Id, чтобы создалась новая заявка
            //для заявок на редактирование надо сделать поиск текущей заявки по Id штатной единицы, для того чтобы ее заполнить только данными, а Id самой заявки обнулить, чтобы запись добавилась, а не редактировалась
            bool IsRequestExists = model.Id == 0 ? false : true;
            if (model.Id == 0)
                model.Id = StaffEstablishedPostRequestDao.GetCurrentRequestId(model.SEPId);

            //заполняем заявку на все случаи жизни
            if (model.Id == 0)
            {
                Department CurDep = DepartmentDao.Get(model.DepartmentId);
                model.DateRequest = null;
                model.UserId = AuthenticationService.CurrentUser.Id;
                model.PositionId = 0;
                model.PositionName = string.Empty;
                model.Quantity = 0;
                model.Salary = 0;
                model.ReasonId = 0;
                model.ScheduleId = 0;
                model.WCId = 0;
                model.BeginAccountDate = DateTime.Now;
                model.EPInfo = string.Empty;
                model.ItemLevel = CurDep == null || !CurDep.ItemLevel.HasValue ? 0 : CurDep.ItemLevel.Value;

                //кнопки
                model.IsDraftButtonAvailable = true;
                model.IsAgreeButtonAvailable = false;
            }
            else
            {
                StaffEstablishedPostRequest PrevEntity = new StaffEstablishedPostRequest(); //для заявок на изменение нужно показать предыдущий оклад

                StaffEstablishedPostRequest entity = StaffEstablishedPostRequestDao.Get(model.Id);
                if (entity == null) //если нет заявки с таким идентификатором, грузим новую заявку на создание штатной единицы
                {
                    model.Id = 0;
                    return GetEstablishedPostRequest(model);
                }

                if (model.SEPId != 0)
                    PrevEntity = StaffEstablishedPostRequestDao.GetPrevEstablishedPostRequest(model.SEPId, entity.Id);

                if (!IsRequestExists)
                {
                    model.Id = 0;
                }

                model.IsUsed = entity.IsUsed;
                model.RequestTypeId = model.Id == 0 ? model.RequestTypeId : entity.RequestType.Id;
                model.UserId = entity.Creator != null ? entity.Creator.Id : 0;
                model.DateRequest = entity.DateRequest;
                model.DepartmentId = entity.Department != null ? entity.Department.Id : 0;
                model.ItemLevel = entity.Department != null ? entity.Department.ItemLevel.Value : 0;
                model.BFGId = entity.Department != null && entity.Department.DepartmentAccessory != null ? entity.Department.DepartmentAccessory.Id : 0;
                model.PositionId = entity.Position != null ? entity.Position.Id : 0;
                model.PositionName = entity.Position != null ? entity.Position.Name : string.Empty;
                model.Quantity = entity.Quantity;
                model.QuantityPrev = entity.Quantity;
                model.Salary = entity.Salary;
                model.SalaryPrev = PrevEntity != null ? PrevEntity.Salary : 0;
                model.ReasonId = entity.Reason == null ? 0 : entity.Reason.Id;
                model.ScheduleId = entity.Schedule == null ? 0 : entity.Schedule.Id;
                model.WCId = entity.WorkingCondition == null ? 0 : entity.WorkingCondition.Id;
                model.BeginAccountDate = model.Id == 0 ? model.BeginAccountDate : entity.BeginAccountDate;

                int UsersCount = StaffEstablishedPostDao.GetEstablishedPostUsed(entity.StaffEstablishedPost != null ? entity.StaffEstablishedPost.Id : 0);
                model.EPInfo = "Занято - " + (UsersCount).ToString() + "; Вакантно - " + (entity.Quantity - UsersCount).ToString();

                //кнопки
                model.IsDraftButtonAvailable = entity.DeleteDate.HasValue ? false : true;
                model.IsAgreeButtonAvailable = entity.DeleteDate.HasValue ? false : !entity.DateAccept.HasValue;

            }

            model.PyrusNumber = "";
            LoadDictionaries(model);
            //для новых заявок надо подгружать надбавки от текущего состояния штатной единицы, берем действующую заявку, иначе по заполняем по текущей заявке
            model.PostChargeLinks = StaffEstablishedPostChargeLinksDao.GetChargesForRequests(model.RequestTypeId != 1 && model.Id == 0 ? StaffEstablishedPostRequestDao.GetCurrentRequestId(model.SEPId) : model.Id).OrderBy(x => x.ChargeName).ToList();

            return model;
        }
Beispiel #10
0
        public ActionResult StaffEstablishedPostRequest(StaffEstablishedPostRequestModel model)
        {
            ViewBag.Title = model.RequestTypeId == 1 ? "Заявка на создание ШЕ" : (model.RequestTypeId == 2 ? "Заявка на изменение ШЕ" : "Заявка на сокращение ШЕ");
            ModelState.Clear();
            string error = string.Empty;
            bool IsComplete = false;

            if (ValidateModel(model))
            {
                if (model.IsDraft)  //сохранение черновика
                {
                    if (!model.IsDelete)
                        IsComplete = model.Id == 0 ? StaffListBl.SaveNewEstablishedPostRequest(model, out error) : StaffListBl.SaveEditEstablishedPostRequest(model, out error);
                    else
                        IsComplete = model.Id == 0 ? false : StaffListBl.DeleteEstablishedPostRequest(model, out error);

                    if (!IsComplete)
                    {
                        StaffListBl.LoadDictionaries(model);
                        ModelState.AddModelError("MessageStr", error);
                    }
                    else
                    {
                        model = StaffListBl.GetEstablishedPostRequest(model);
                        ModelState.AddModelError("MessageStr", error);
                    }
                }
                else
                {
                    if (!StaffListBl.SaveEditEstablishedPostRequest(model, out error))
                    {
                        StaffListBl.LoadDictionaries(model);
                        ModelState.AddModelError("MessageStr", error);
                    }
                    else
                    {
                        model = StaffListBl.GetEstablishedPostRequest(model);
                        ModelState.AddModelError("MessageStr", error);
                    }
                }
            }
            else
                StaffListBl.LoadDictionaries(model);

            //для комментариев
            ViewBag.PlaceId = model.Id;
            ViewBag.PlaceTypeId = 4;

            return View(model);
        }
Beispiel #11
0
        public ActionResult StaffEstablishedPostRequest(int RequestType, int? DepartmentId, int? SEPId, int? Id)
        {
            ModelState.Clear();
            StaffEstablishedPostRequestModel model = new StaffEstablishedPostRequestModel();
            ViewBag.Title = RequestType == 1 ? "Заявка на создание ШЕ" : (RequestType == 2 ? "Заявка на изменение ШЕ" : "Заявка на сокращение ШЕ");
            model.RequestTypeId = RequestType;
            model.DepartmentId = DepartmentId.Value;
            model.SEPId = SEPId.HasValue ? SEPId.Value : 0;
            model.Id = Id.HasValue ? Id.Value : 0;
            model = StaffListBl.GetEstablishedPostRequest(model);
            //для комментариев
            ViewBag.PlaceId = model.Id;
            ViewBag.PlaceTypeId = 4;

            return View(model);
        }
Beispiel #12
0
        protected bool ValidateModel(StaffEstablishedPostRequestModel model)
        {
            if (model.IsDraft)
            {
                if ((model.RequestTypeId == 1 || model.RequestTypeId == 2) && model.Quantity == 0)
                {
                    ModelState.AddModelError("Quantity", "Укажите количество штатных единиц не равное 0!");
                    model.Quantity = model.QuantityPrev;
                    model.Salary = model.SalaryPrev;
                }

                if (model.RequestTypeId == 2 && model.QuantityPrev > model.Quantity)
                    ModelState.AddModelError("Quantity", "Изменение количества штатной единицы в меньшую сторону является сокращением! Создайте заявку на сокращение штатной единицы!");
            }
            else
            {
                if(model.PositionId == 0)
                    ModelState.AddModelError("PositionId", "Выберите должность!");

                if (!model.BeginAccountDate.HasValue)
                    ModelState.AddModelError("BeginAccountDate", "Укажите дату начала учета в системе!");

                if (model.BeginAccountDate < new DateTime(2015, 12, 1))
                    ModelState.AddModelError("BeginAccountDate", "Дата начала учета в системе не может быть меньше 1 декабря 2015 года!");

                if (model.RequestTypeId == 1 || model.RequestTypeId == 2)
                {
                    if (model.Quantity <= 0)
                        ModelState.AddModelError("Quantity", "Укажите количество!");
                    if (model.Salary <= 0)
                        ModelState.AddModelError("Salary", "Укажите оклад!");
                }

                if (model.PostChargeLinks.Where(x => x.ActionId == 0 && x.Amount != 0).Count() != 0)
                {
                    int i = 1;
                    foreach (var item in model.PostChargeLinks)
                    {
                        if (item.ActionId == 0)
                        {
                            ModelState.AddModelError("PostChargeLinks[" + (i - 1) + "].ActionId", "Укажите действие!");
                        }
                        i += 1;
                    }
                }

                if (model.Personnels != null)
                {
                    if ((model.RequestTypeId == 3 || model.RequestTypeId == 4) && model.Personnels.Where(x => x.UserId != 0 && x.IsDismissal).Count() != 0)
                    {
                        int i = 1;
                        foreach (var item in model.Personnels)
                        {
                            if (item.UserId != 0 && item.IsDismissal)
                            {
                                ModelState.AddModelError("Personnels[" + (i - 1) + "].IsDismissal", "На данный момент можно сократить свободные вакансии! Сокращение вакансия занятых сотрудниками в разработке и будет доступным в ближайшее время!");
                            }
                            i += 1;
                        }
                    }
                }
            }

            if (!string.IsNullOrEmpty(model.PyrusNumber))
            {
                try
                {
                    Convert.ToInt32(model.PyrusNumber);
                }
                catch
                {
                    ModelState.AddModelError("PyrusNumber", "Номер задачи в системе Пайрус должен состоять из цифр!");
                    ModelState.AddModelError("MessageStr", "Номер задачи в системе Пайрус должен состоять из цифр!");
                }
            }

            return ModelState.IsValid;
        }