Exemple #1
0
        /// <summary>
        /// Загрузка модели
        /// </summary>
        /// <param name="model"></param>
        public void SetModel(StaffMovementsEditModel model)
        {
            if (model.Id > 0)
            {
                var entity = StaffMovementsDao.Load(model.Id);
                #region Стандартные поля заявки

                model.UserLinkId = entity.TargetStaffEstablishedPostRequest.Id;
                GetMoneyForStaffEstablishedPostUserLinks(entity.TargetStaffEstablishedPostRequest, model);
                model.StatusId = entity.Status.Id;
                model.Status = entity.Status.Name;
                model.Creator.Id = entity.Creator.Id;
                model.Number = String.Format("№{0}", entity.Id);
                model.User.Id = entity.User.Id;
                model.RequestType = entity.Type.Id;
                model.MovementDate = entity.MovementDate;
                var lastDate = entity.MovementDate.Value.AddMonths(1);
                lastDate = new DateTime(lastDate.Year, lastDate.Month, 5);
                model.IsRequestBad = (DateTime.Now >= lastDate) && entity.Status.Id< 10;
                model.MovementReason = entity.Data.MovementReason;
                model.TargetSalaryCount = entity.Data.Salary;
                model.CreateDate = entity.CreateDate;
                var targetposition = entity.TargetPosition;
                if (targetposition != null)
                {
                    model.TargetPositionId = targetposition.Id;
                    model.TargetPositionName = targetposition.Name;
                    //Убрано. нет связи со штаткой
                    //model.TargetSalary = targetposition.Salary;
                }

                #endregion
                #region Согласования
                model.SendDate = entity.SendDate;
                model.SourceManagerAccept = entity.SourceManagerAccept;
                model.TargetManagerAccept = entity.TargetManagerAccept;
                model.PersonnelManagerBankAccept = entity.PersonnelManagerBankAccept;
                model.PersonnelManagerBank = entity.PersonnelManagerBank != null ? entity.PersonnelManagerBank.Name : "";
                model.ChiefAccept = entity.TargetChiefAccept;
                model.Chief = entity.TargetChief != null ? entity.TargetChief.Name : "";
                model.PersonnelManagerAccept = entity.PersonnelManagerAccept;
                model.PersonnelManager = entity.PersonnelManager != null ? entity.PersonnelManager.Name : "";
                #endregion
                #region Данные о переводе
                model.MovementDate = entity.MovementDate;
                model.MovementTempTo = entity.MovementTempTo;
                model.TargetPositionId = entity.TargetPosition.Id;
                model.TargetPositions = new List<IdNameDto>();
                model.TargetPositions.Add(new IdNameDto { Id = model.TargetPositionId, Name = model.TargetPositionName });
                model.TargetPositionName = entity.TargetPosition.Name;
                model.TargetDepartmentId = entity.TargetDepartment.Id;
                model.TargetDepartmentName = entity.TargetDepartment.Name;
                model.TargetManager = new StandartUserDto { Id = entity.TargetManager.Id };
                LoadUserData(model.TargetManager);
                var TargetUppers = DocumentApprovalDao.Find(x => x.DocId == entity.Id && x.Number == 2 && !x.IsArchive );
                if (TargetUppers != null && TargetUppers.Any())
                {
                    model.TargetManager.Name += String.Format("({0})", TargetUppers.First().AssistantUser.Name);
                }
                model.SourceManager = new StandartUserDto { Id = entity.SourceManager.Id };
                LoadUserData(model.SourceManager);
                var SourceUppers = DocumentApprovalDao.Find(x => x.DocId == entity.Id && x.Number == 1 && !x.IsArchive );
                if (SourceUppers != null && SourceUppers.Any())
                {
                    model.SourceManager.Name += String.Format("({0})", SourceUppers.First().AssistantUser.Name);
                }
                #endregion
                #region Для руководителей
                model.IsTempMoving = entity.IsTempMoving;
                model.Conjunction = entity.Data.Conjunction;
                model.MovementCondition = entity.Data.MovementCondition;
                model.PyrusLink = entity.Data.PyrusLink;
                #endregion
                #region Для кадровиков
                model.TargetCasingType = entity.Data.TargetCasingType;
                model.RegionCoefficient = entity.Data.RegionCoefficient;
                model.Grade = entity.Data.Grade;
                model.HoursType = entity.Data.HoursType != null ? entity.Data.HoursType.Id : 0;

                //model.AccessGroup = entity.Data.AccessGroup!=null?entity.Data.AccessGroup.Id:0;
                #endregion
                #region Files
                var docs = entity.Docs;
                if (docs != null && docs.Any())
                {
                    var MovementNote = docs.Where(x => x.DocType == (int)StaffMovementsDocsTypes.MovementNote).First();
                    model.MovementNoteDto = new UploadFileDto();
                    model.MovementNoteIsRequired = MovementNote != null ? MovementNote.IsRequired : false;
                    if (MovementNote != null && MovementNote.Attachment != null)
                    {
                        model.MovementNoteDto.FileName = MovementNote.Attachment.FileName;
                        model.MovementNoteAttachmentId = MovementNote.Attachment.Id;
                    }

                }
                #endregion
            }
            else
            {
                var tmp = UserDao.Load(model.User.Id);
                model.HoursType = tmp.HoursType.Id;
                model.TargetSalaryCount = tmp.Rate.HasValue ? tmp.Rate.Value : 0;
            }
            //Подгружаем данные о сотруднике
            LoadUserData(model.User);
            var usertomove = UserDao.Load(model.User.Id);
            var userlinks=StaffEstablishedPostUserLinksDao.QueryExpression(x=>x.IsUsed && x.User.Id==model.User.Id);
            if (userlinks == null || !userlinks.Any())
                throw new Exception("Сотрудника нет в штатной расстановке.");
            var userlink = userlinks.First();
            model.RegionCoefficient = StaffMovementsDao.GetUserRegionCoeff(model.User.Id);
            model.TotalSalary = StaffMovementsDao.GetUserTotalSalary(model.User.Id);
            model.Casing = StaffMovementsDao.GetUserSalary(model.User.Id);
            model.Salary = usertomove.Rate.HasValue?usertomove.Rate.Value:0;
            //Подгружаем надбавки
            SetModelAdditions(model);
            //Заполняем справочники
            LoadDictionaries(model);
            //Подгружаем данные о создателе заявки
            if ((model.Creator==null || model.Creator.Id == 0) && model.Id==0)
            {
                if (model.RequestType == 1 || model.RequestType == 3)
                {
                    model.TargetDepartmentId = model.User.Dep7Id;
                    model.TargetDepartmentName = model.User.Dep7Name;
                    model.TargetPositionId = model.User.PositionId;
                    //model.TargetPositions = GetPositionsForDepartment(model.TargetDepartmentId);
                    //В случае если КП на изменение надбавок, нужно подгрузить текущий линк, в противном случае нельзя давать возможности выбрать ту же должность
                    model.UserLinks = GetPositionsForDepartment(model.TargetDepartmentId);
                    model.TargetPositions = model.UserLinks;
                    if (model.RequestType == 1)
                    {
                        model.UserLinkId = userlinks.First().Id;
                        if (!model.UserLinks.Any(x => x.Id == model.UserLinkId))
                        {
                            model.UserLinks.Add(new IdNameDto { Id = userlink.Id, Name = userlink.StaffEstablishedPost.Position.Name });
                        }
                    }
                    else if(model.UserLinks!=null && model.UserLinks.Any())
                    {
                        model.UserLinkId = model.UserLinks.First().Id;
                    }
                    if (model.UserLinkId > 0)
                    {
                        userlink = StaffEstablishedPostUserLinksDao.Load(model.UserLinkId);
                        GetMoneyForStaffEstablishedPostUserLinks(userlink, model);
                    }
                }
                model.Creator = new StandartUserDto();
                model.Creator.Id = CurrentUser.Id;
                model.CreateDate = DateTime.Now;
                LoadUserData(model.Creator);
                SetFlagState(model);
                return;
            }
            LoadUserData(model.Creator);
            SetFlagState(model);
        }
Exemple #2
0
        /// <summary>
        /// Меняем поля сущности. Все сохранения зависят от флагов(нельзя - значит нельзя.)
        /// </summary>
        /// <param name="entity">Сущьность</param>
        /// <param name="model">Модель</param>
        private void ChangeEntityProperties(StaffMovements entity, StaffMovementsEditModel model)
        {
            #region Тот случай, когда сохранять заявку не нужно
            //Если нажали кнопку отмена, то возвращаемся в черновик и всё. В остальных случаях продолжаем работать
            if (model.IsCancelAvailable && model.IsCancelButtonPressed)
            {
                ChangeEntityStatusToTemp(entity);
                return;
            }
            #endregion
            #region Стандартные поля заявки, нужно заполнять только если заявка новая
            if (model.Id == 0)
            {
                //Если идентификатор = 0, значит заявка новая, нужно сохранить основные поля.
                //Дата создания
                entity.CreateDate = model.CreateDate;
                //Создатель
                entity.Creator = UserDao.Load(model.Creator.Id);
                if ((CurrentUser.UserRole & (UserRole.Manager | UserRole.PersonnelManager)) > 0)
                {
                    entity.SendDate = DateTime.Now;
                    if (model.RequestType == 2)
                    {
                        entity.Status = StaffMovementsStatusDao.Load((int)StaffMovementsStatus.SourceManager);
                    }
                    else
                    {
                        entity.Status = StaffMovementsStatusDao.Load((int)StaffMovementsStatus.TargetManager);
                    }
                }
                //Сотрудник
                entity.User = UserDao.Load(model.User.Id);
                //Статус // сначала черновик
                entity.Status = StaffMovementsStatusDao.Load((int)StaffMovementsStatus.Temp);
                //Данные исходной позиции
                var sourcelink = StaffEstablishedPostUserLinksDao.QueryExpression(x => x.User.Id == entity.User.Id && x.IsUsed);
                entity.SourceStaffEstablishedPostRequest = sourcelink.First();
                entity.SourcePosition = entity.User.Position;
                entity.SourceDepartment = entity.User.Department;
                entity.SourceManager = GetManagerForDepartment(entity.SourceDepartment);
                //Если запрещено редактировать подразделение на момент создания заявки, то нужно сохранить исходное
                if (!model.IsDepartmentEditable)
                {
                    entity.TargetDepartment = entity.SourceDepartment;
                    entity.TargetManager = entity.SourceManager;
                }
                if (!model.IsPositionEditable)
                {
                    entity.TargetPosition = entity.SourcePosition;
                    entity.TargetStaffEstablishedPostRequest = entity.SourceStaffEstablishedPostRequest;
                }
                //Тип заявки
                entity.Type = StaffMovementsTypesDao.Load(model.RequestType);
                //Данные заявки, создаём и сохраняем
                entity.Data = new StaffMovementsData();
                entity.Data.Grade = model.Grade;
                entity.Data.HoursType = ScheduleDao.Load(model.HoursType);
                entity.Data.Salary = model.TargetSalaryCount;
                StaffMovementsDataDao.SaveAndFlush(entity.Data);
                //Сохраняем надбавки
                SaveAdditions(entity, model);

                //Документы, создаём сразу все.
                var docs = new List<StaffMovementsDocs>();
                docs.Add(new StaffMovementsDocs { DocType = (int)StaffMovementsDocsTypes.AdditionalAgreementDoc, Request = entity });
                docs.Add(new StaffMovementsDocs { DocType = (int)StaffMovementsDocsTypes.MaterialLiabilityDoc, Request = entity });
                docs.Add(new StaffMovementsDocs { DocType = (int)StaffMovementsDocsTypes.MovementNote, Request = entity });
                docs.Add(new StaffMovementsDocs { DocType = (int)StaffMovementsDocsTypes.MovementOrderDoc, Request = entity });
                docs.Add(new StaffMovementsDocs { DocType = (int)StaffMovementsDocsTypes.RequirementsOrderDoc, Request = entity });
                docs.Add(new StaffMovementsDocs { DocType = (int)StaffMovementsDocsTypes.ServiceOrderDoc, Request = entity });
                entity.Docs = docs;
            }
            #endregion
            #region Данные о переводе, заполняет персонаж или руководитель
            if (model.IsDepartmentEditable)
            {
                if (entity.TargetDepartment != null && entity.TargetDepartment.Id != model.TargetDepartmentId)
                {
                    entity.TargetManagerAccept = null;
                    entity.TargetChief = null;
                    entity.TargetChiefAccept = null;
                }
                entity.TargetDepartment = DepartmentDao.Load(model.TargetDepartmentId);
                entity.TargetManager = GetManagerForDepartment(entity.TargetDepartment);
            }
            if (model.IsPositionEditable)
            {
                entity.TargetStaffEstablishedPostRequest = StaffEstablishedPostUserLinksDao.Load(model.UserLinkId);
                entity.TargetPosition = entity.TargetStaffEstablishedPostRequest.StaffEstablishedPost.Position;
            }
            #endregion
            #region Общее
            if (model.StatusId <= 1 || model.IsManagerEditable || model.IsPersonnelManagerEditable || model.IsPersonnelManagerBankAcceptAvailable)
            {
                entity.MovementDate = model.MovementDate;
                entity.MovementTempTo = model.MovementTempTo;
                entity.Data.MovementReason = model.MovementReason;
            }
            #endregion
            #region Для руководителей
            if (model.IsManagerEditable)
            {
                entity.IsTempMoving = model.IsTempMoving;
                entity.Data.MovementCondition = model.MovementCondition;//Условие перевода
                entity.Data.Conjunction = model.Conjunction;
                entity.Data.PyrusLink = model.PyrusLink;
                entity.Data.Salary = model.TargetSalaryCount;
                entity.Data.Grade = model.Grade;//Грейд
                entity.Data.HoursType = ScheduleDao.Load(model.HoursType);//График работы
                entity.Data.TargetCasingType = model.TargetCasingType;
                SaveAdditions(entity, model);
            }
            #endregion
            #region Для кадров
            if (model.IsPersonnelManagerEditable)
            {
                entity.Data.Grade = model.Grade;//Грейд
                entity.Data.HoursType = ScheduleDao.Load(model.HoursType);//График работы
                entity.Data.TargetCasingType = model.TargetCasingType;
                entity.Data.Salary = model.TargetSalaryCount;
                //entity.Data.AccessGroup = AccessGroupDao.Load(model.AccessGroup);//Группа доступа
                //Ставим галочки в документах
                if (model.IsDocsEditable)
                {
                    StaffMovementsDocsDao.Update(x => x.Request.Id == entity.Id && x.DocType == (int)StaffMovementsDocsTypes.MovementNote, y => y.IsRequired = model.MovementNoteIsRequired);

                }
                //Сохраняем надбавки
                SaveAdditions(entity, model);
            }
            #endregion

            #region Согласования, утверждения, отмены и изменение статуса
            switch (model.StatusId)
            {
                case 1:
                    if (model.ISRejectAvailable && model.IsRejectButtonPressed)
                    {
                        //Если нажали кнопку отказа, то отказ и всё поезд ушёл.
                        entity.DeleteDate = DateTime.Now;
                        entity.RejectDate = DateTime.Now;
                        entity.RejectedBy = UserDao.Load(CurrentUser.Id);
                        entity.RejectReason = StaffMovementsRejectReasonDao.Load((int)StaffMovementsRejectReasonEnum.UserReject);
                        entity.Status = StaffMovementsStatusDao.Load((int)StaffMovementsStatus.Canceled);
                        if (entity.TargetStaffEstablishedPostRequest.ReserveType != null && entity.TargetStaffEstablishedPostRequest.DocId == entity.Id)
                        {
                            entity.TargetStaffEstablishedPostRequest.ReserveType = null;
                            entity.TargetStaffEstablishedPostRequest.DocId = null;
                        }
                    }
                    if (model.IsAcceptButtonPressed && model.IsUserAcceptAvailable)
                    {
                        //Если согласовано пользователем
                        entity.SendDate = DateTime.Now;
                        if (entity.Type.Id == 2)
                        {
                            entity.Status = StaffMovementsStatusDao.Load((int)StaffMovementsStatus.SourceManager);
                        }
                        else
                        {
                            entity.Status = StaffMovementsStatusDao.Load((int)StaffMovementsStatus.TargetManager);
                        }
                    }
                    if (model.IsAcceptButtonPressed && model.IsSourceManagerAcceptAvailable)
                    {
                        //Если согласовано отпускающим руководителем
                        entity.SendDate = DateTime.Now;
                        entity.SourceManagerAccept = DateTime.Now;
                        entity.Status = StaffMovementsStatusDao.Load((int)StaffMovementsStatus.TargetManager);
                        if (entity.SourceManager != null && entity.SourceManager.Id != CurrentUser.Id)
                        {
                            //DocumentApprovalDao
                            DocumentApproval newapprove = new DocumentApproval();
                            newapprove.ApprovalType = (int)ApprovalTypeEnum.StaffMovements;
                            newapprove.ApproveUser = entity.SourceManager;
                            newapprove.AssistantUser = UserDao.Load(CurrentUser.Id);
                            newapprove.CreateDate = DateTime.Now;
                            newapprove.DocId = entity.Id;
                            newapprove.Number = 1;
                            DocumentApprovalDao.SaveAndFlush(newapprove);
                        }
                    }
                    if (model.IsAcceptButtonPressed && model.IsTargetManagerAcceptAvailable)
                    {
                        //Если согласовано принимающим руководителем
                        entity.SendDate = DateTime.Now;
                        entity.SourceManagerAccept = DateTime.Now;
                        entity.TargetManagerAccept = DateTime.Now;
                        //entity.Status = StaffMovementsStatusDao.Load((int)StaffMovementsStatus.PersonelManagerBank);
                        entity.Status = StaffMovementsStatusDao.Load((int)StaffMovementsStatus.Chief);//После принимающего идёт вышестоящий
                        if (entity.TargetManager != null && entity.TargetManager.Id != CurrentUser.Id)
                        {
                            //DocumentApprovalDao
                            DocumentApproval newapprove = new DocumentApproval();
                            newapprove.ApprovalType = (int)ApprovalTypeEnum.StaffMovements;
                            newapprove.ApproveUser = entity.TargetManager;
                            newapprove.AssistantUser = UserDao.Load(CurrentUser.Id);
                            newapprove.CreateDate = DateTime.Now;
                            newapprove.DocId = entity.Id;
                            newapprove.Number = 2;
                            DocumentApprovalDao.SaveAndFlush(newapprove);
                        }
                        entity.TargetStaffEstablishedPostRequest.DocId = entity.Id;
                        entity.TargetStaffEstablishedPostRequest.ReserveType = (int)StaffReserveTypeEnum.StaffMovements;
                    }
                    break;
                case 2:
                    if (model.ISRejectAvailable && model.IsRejectButtonPressed)
                    {
                        //Если нажали кнопку отказа, то отказ и всё поезд ушёл.
                        entity.DeleteDate = DateTime.Now;
                        entity.RejectDate = DateTime.Now;
                        entity.RejectedBy = UserDao.Load(CurrentUser.Id);
                        entity.RejectReason = StaffMovementsRejectReasonDao.Load((int)StaffMovementsRejectReasonEnum.SourceManagerReject);
                        entity.Status = StaffMovementsStatusDao.Load((int)StaffMovementsStatus.Canceled);
                        if (entity.TargetStaffEstablishedPostRequest.ReserveType != null && entity.TargetStaffEstablishedPostRequest.DocId == entity.Id)
                        {
                            entity.TargetStaffEstablishedPostRequest.ReserveType = null;
                            entity.TargetStaffEstablishedPostRequest.DocId = null;
                        }
                    }
                    if (model.IsAcceptButtonPressed && model.IsSourceManagerAcceptAvailable)
                    {
                        //Если согласовано отпускающим руководителем
                        if (entity.SourceManager != null && entity.SourceManager.Id != CurrentUser.Id)
                        {
                            //DocumentApprovalDao
                            DocumentApproval newapprove = new DocumentApproval();
                            newapprove.ApprovalType =(int) ApprovalTypeEnum.StaffMovements;
                            newapprove.ApproveUser = entity.SourceManager;
                            newapprove.AssistantUser = UserDao.Load(CurrentUser.Id);
                            newapprove.CreateDate = DateTime.Now;
                            newapprove.DocId = entity.Id;
                            newapprove.Number = 1;
                            DocumentApprovalDao.SaveAndFlush(newapprove);
                        }
                        entity.SourceManagerAccept = DateTime.Now;
                        entity.Status = StaffMovementsStatusDao.Load((int)StaffMovementsStatus.TargetManager);
                    }
                    break;
                case 3:
                    if (model.ISRejectAvailable && model.IsRejectButtonPressed)
                    {
                        //Если нажали кнопку отказа, то отказ и всё поезд ушёл.
                        entity.DeleteDate = DateTime.Now;
                        entity.RejectDate = DateTime.Now;
                        entity.RejectedBy = UserDao.Load(CurrentUser.Id);
                        entity.RejectReason = StaffMovementsRejectReasonDao.Load((int)StaffMovementsRejectReasonEnum.TargetManagerReject);
                        entity.Status = StaffMovementsStatusDao.Load((int)StaffMovementsStatus.Canceled);
                        if (entity.TargetStaffEstablishedPostRequest.ReserveType != null && entity.TargetStaffEstablishedPostRequest.DocId == entity.Id)
                        {
                            entity.TargetStaffEstablishedPostRequest.ReserveType = null;
                            entity.TargetStaffEstablishedPostRequest.DocId = null;
                        }
                    }
                    if (model.IsAcceptButtonPressed && model.IsTargetManagerAcceptAvailable)
                    {
                        //Если согласовано принимающим руководителем, в таком случае нужну забронировать вакансию
                        if (entity.TargetManager != null && entity.TargetManager.Id != CurrentUser.Id)
                        {
                            //DocumentApprovalDao
                            DocumentApproval newapprove = new DocumentApproval();
                            newapprove.ApprovalType = (int)ApprovalTypeEnum.StaffMovements;
                            newapprove.ApproveUser = entity.TargetManager;
                            newapprove.AssistantUser = UserDao.Load(CurrentUser.Id);
                            newapprove.CreateDate = DateTime.Now;
                            newapprove.DocId = entity.Id;
                            newapprove.Number = 2;
                            DocumentApprovalDao.SaveAndFlush(newapprove);
                        }
                        entity.TargetManagerAccept = DateTime.Now;
                        entity.Status = StaffMovementsStatusDao.Load((int)StaffMovementsStatus.Chief);//После принимающего идёт вышестоящий
                        //entity.Status = StaffMovementsStatusDao.Load((int)StaffMovementsStatus.PersonelManagerBank);
                        entity.TargetStaffEstablishedPostRequest.DocId = entity.Id;
                        entity.TargetStaffEstablishedPostRequest.ReserveType = (int)StaffReserveTypeEnum.StaffMovements;
                    }
                    break;
                case 4:
                case 5:
                    if (model.IsStopButtonAvailable && model.IsStopButtonPressed)
                    {
                        //Если нажали кнопку приостановки согласования
                        entity.Status = StaffMovementsStatusDao.Load((int)StaffMovementsStatus.Blocked);
                        //Тут еще нужно отправить письмо с угрозами руководителям и сотруднику
                    }
                    if (model.ISRejectAvailable && model.IsRejectButtonPressed)
                    {
                        //Если нажали кнопку отказа, то отказ и всё поезд ушёл.
                        entity.DeleteDate = DateTime.Now;
                        entity.RejectDate = DateTime.Now;
                        entity.RejectedBy = UserDao.Load(CurrentUser.Id);
                        entity.RejectReason = StaffMovementsRejectReasonDao.Load((int)StaffMovementsRejectReasonEnum.PersonnelManagerBankReject);
                        entity.Status = StaffMovementsStatusDao.Load((int)StaffMovementsStatus.Canceled);
                        if (entity.TargetStaffEstablishedPostRequest.ReserveType != null && entity.TargetStaffEstablishedPostRequest.DocId == entity.Id)
                        {
                            entity.TargetStaffEstablishedPostRequest.ReserveType = null;
                            entity.TargetStaffEstablishedPostRequest.DocId = null;
                        }
                    }
                    if (model.IsPersonnelManagerBankAcceptAvailable && model.IsAcceptButtonPressed)
                    {
                        //Если согласовано кадровиком банка
                        entity.PersonnelManagerBank = UserDao.Load(CurrentUser.Id);
                        entity.PersonnelManagerBankAccept = DateTime.Now;
                        //entity.Status = StaffMovementsStatusDao.Load((int)StaffMovementsStatus.Chief);
                        entity.Status = StaffMovementsStatusDao.Load((int)StaffMovementsStatus.Approved);//перевод оформлен
                    }
                    break;
                case 6:
                    if (model.ISRejectAvailable && model.IsRejectButtonPressed)
                    {
                        //Если нажали кнопку отказа, то отказ и всё поезд ушёл.
                        entity.DeleteDate = DateTime.Now;
                        entity.RejectDate = DateTime.Now;
                        entity.RejectedBy = UserDao.Load(CurrentUser.Id);
                        entity.RejectReason = StaffMovementsRejectReasonDao.Load((int)StaffMovementsRejectReasonEnum.ChiefManagerReject);
                        entity.Status = StaffMovementsStatusDao.Load((int)StaffMovementsStatus.Canceled);
                        if (entity.TargetStaffEstablishedPostRequest.ReserveType != null && entity.TargetStaffEstablishedPostRequest.DocId == entity.Id)
                        {
                            entity.TargetStaffEstablishedPostRequest.ReserveType = null;
                            entity.TargetStaffEstablishedPostRequest.DocId = null;
                        }
                    }
                    if (model.IsChiefAcceptAvailable && model.IsAcceptButtonPressed)
                    {
                        //Если согласовано вышестоящим руководителем
                        entity.TargetChief = UserDao.Load(CurrentUser.Id);
                        entity.TargetChiefAccept = DateTime.Now;
                        entity.Status = StaffMovementsStatusDao.Load((int)StaffMovementsStatus.Personnel);
                    }
                    break;
                case 7:
                    if (model.ISRejectAvailable && model.IsRejectButtonPressed)
                    {
                        //Если нажали кнопку отказа, то отказ и всё поезд ушёл.
                        entity.DeleteDate = DateTime.Now;
                        entity.RejectDate = DateTime.Now;
                        entity.RejectedBy = UserDao.Load(CurrentUser.Id);
                        entity.RejectReason = StaffMovementsRejectReasonDao.Load((int)StaffMovementsRejectReasonEnum.PersonnelManagerReject);
                        entity.Status = StaffMovementsStatusDao.Load((int)StaffMovementsStatus.Canceled);
                        if (entity.TargetStaffEstablishedPostRequest.ReserveType != null && entity.TargetStaffEstablishedPostRequest.DocId == entity.Id)
                        {
                            entity.TargetStaffEstablishedPostRequest.ReserveType = null;
                            entity.TargetStaffEstablishedPostRequest.DocId = null;
                        }
                    }
                    if (model.IsPersonnelManagerAcceptAvailable && model.IsAcceptButtonPressed)
                    {
                        //Если согласовано кадровиком
                        entity.PersonnelManager = UserDao.Load(CurrentUser.Id);
                        entity.PersonnelManagerAccept = DateTime.Now;
                        //entity.Status = StaffMovementsStatusDao.Load((int)StaffMovementsStatus.Approved);
                        var check = StaffMovementsDao.CheckIfPersonnalChargeChanges(entity.Id);

                        entity.Status = check ? StaffMovementsStatusDao.Load((int)StaffMovementsStatus.PersonelManagerBank) //После кадровика идёт кадровик банк
                            : StaffMovementsStatusDao.Load((int)StaffMovementsStatus.Approved); //Если нет изменений надбавок, то перевод оформлен
                    }
                    break;
                case 8:
                    if (model.ISRejectAvailable && model.IsRejectButtonPressed)
                    {
                        //Если нажали кнопку отказа, то отказ и всё поезд ушёл.
                        entity.DeleteDate = DateTime.Now;
                        entity.RejectDate = DateTime.Now;
                        entity.RejectedBy = UserDao.Load(CurrentUser.Id);
                        entity.RejectReason = StaffMovementsRejectReasonDao.Load((int)StaffMovementsRejectReasonEnum.TargetManagerReject);
                        entity.Status = StaffMovementsStatusDao.Load((int)StaffMovementsStatus.Canceled);
                        if (entity.TargetStaffEstablishedPostRequest.ReserveType != null && entity.TargetStaffEstablishedPostRequest.DocId == entity.Id)
                        {
                            entity.TargetStaffEstablishedPostRequest.ReserveType = null;
                            entity.TargetStaffEstablishedPostRequest.DocId = null;
                        }
                    }
                    //Проверяем все документы, если у обязательного документа нет вложения - не выходим из этого статуса
                    bool accept = true;
                    foreach (var doc in entity.Docs)
                    {
                        if (doc.IsRequired && doc.Attachment == null) accept = false;
                    }
                    if (accept) entity.Status = StaffMovementsStatusDao.Load((int)StaffMovementsStatus.DocsApproved);
                    break;
                case 9:
                    //Проверяем все документы, если у обязательного документа нет вложения - нужно вернутся обратно
                    bool accept_ = true;
                    foreach (var doc in entity.Docs)
                    {
                        if (doc.IsRequired && doc.Attachment == null) accept_ = false;
                    }
                    if (!accept_) entity.Status = StaffMovementsStatusDao.Load((int)StaffMovementsStatus.ChiefControl);
                    if (model.ISRejectAvailable && model.IsRejectButtonPressed)
                    {
                        //Если нажали кнопку отказа, то отказ и всё поезд ушёл.
                        entity.DeleteDate = DateTime.Now;
                        entity.RejectDate = DateTime.Now;
                        entity.RejectedBy = UserDao.Load(CurrentUser.Id);
                        entity.RejectReason = StaffMovementsRejectReasonDao.Load((int)StaffMovementsRejectReasonEnum.PersonnelManagerReject);
                        entity.Status = StaffMovementsStatusDao.Load((int)StaffMovementsStatus.Canceled);
                        if (entity.TargetStaffEstablishedPostRequest.ReserveType != null && entity.TargetStaffEstablishedPostRequest.DocId == entity.Id)
                        {
                            entity.TargetStaffEstablishedPostRequest.ReserveType = null;
                            entity.TargetStaffEstablishedPostRequest.DocId = null;
                        }
                    }
                    if (model.IsConfirmButtonAvailable && model.IsConfirmButtonPressed)
                    {
                        //Заявка подтверждена. все щасливы, ждём выгрузки в одноэс
                        //entity.PersonnelManager = UserDao.Load(CurrentUser.Id);
                        //entity.PersonnelManagerAccept = DateTime.Now;
                        entity.Status = StaffMovementsStatusDao.Load((int)StaffMovementsStatus.Approved);
                    }
                    break;
                case 10:
                    break;
                case 11:
                    break;
            }
            #endregion
        }
Exemple #3
0
 //Deprecated Временно не печатаем документы отсюда
 /*}*/
 /// <summary>
 /// Сохранение модели документов. DEPRECATED
 /// </summary>
 /// <param name="model"></param>
 public void SaveDocsModel(StaffMovementsEditModel model)
 {
     StaffMovementsDocsDao.Update(x => x.Request.Id == model.Id && x.DocType == (int)StaffMovementsDocsTypes.MovementNote, y => y.IsRequired = model.MovementNoteIsRequired);
 }
Exemple #4
0
        /// <summary>
        /// Сохранение модели
        /// </summary>
        /// <param name="model"></param>
        public void SaveModel(StaffMovementsEditModel model)
        {
            StaffMovements entity;
            if (model.Id == 0)
            {
                //Если идентификатор = 0, то нужно создать новую сущность
                entity = new StaffMovements();
            }
            else
            {
                //Загружаем сущьность если идентификатор отличен от 0
                entity = StaffMovementsDao.Load(model.Id);
            }

            //Меняем поля и сохраняем
            //файлики
            if (model.IsDocsAddAvailable && model.Id > 0)
                SaveFiles(model);
            ChangeEntityProperties(entity, model);
            StaffMovementsDao.SaveAndFlush(entity);
            //файлики только для первого раза
            if (model.IsDocsAddAvailable && model.Id == 0 && entity.Id > 0)
            {
                model.Id = entity.Id;//Нужно присвоить модели идентификатор
                SaveFiles(model);
            }
        }
Exemple #5
0
 /// <summary>
 /// Устанавливаем надбавки
 /// </summary>
 /// <param name="model"></param>
 private void SetModelAdditions(StaffMovementsEditModel model)
 {
     model.ActiveAdditions = GetUserActualAddition(model.User.Id);
     if (model.Id > 0)
     {
         model.AdditionsToEdit = StaffPostChargeLinksDao.QueryExpression(x => x.StaffMovements.Id == model.Id)
         .Select(x =>
             new AdditionsDto
             {
                 Action = x.ExtraChargeActions.Id,
                 Type = new IdNameDto { Id = x.ExtraCharges.Id, Name = x.ExtraCharges.Name },
                 guid = x.ExtraCharges.GUID,
                 Value = x.Salary
             })
         .ToList();
     }
     else
     {
         model.AdditionsToEdit = StaffPostChargeLinksDao.QueryExpression(x => x.IsActive && x.Staff.Id == model.User.Id)
         .Select(x =>
             new AdditionsDto
             {
                 Action = x.ExtraChargeActions.Id,
                 Type = new IdNameDto { Id = x.ExtraCharges.Id, Name = x.ExtraCharges.Name },
                 guid = x.ExtraCharges.GUID,
                 Value = x.Salary
             })
         .ToList();
         var charges = StaffExtraChargesDao.LoadAll();
         foreach (var charge in charges)
         {
             if (!model.AdditionsToEdit.Any(x => x.Type.Id == charge.Id))
                 model.AdditionsToEdit.Add(new AdditionsDto { Action = 4, Value = 0, Type = new IdNameDto { Id = charge.Id, Name = charge.Name }, guid = charge.GUID });
         }
     }
 }
Exemple #6
0
        /// <summary>
        /// Получение вьюмодели для редактирования заявки
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public StaffMovementsEditModel GetEditModel(int id)
        {
            var model = new StaffMovementsEditModel();
            if (id == 0)
            {
                model.User = new StandartUserDto();
                model.Creator = new StandartUserDto();
                SetModelAdditions(model);
                SetFlagState(model);
            }
            else
            {
                model.Id = id;
                SetModel(model);
            }
            LoadDictionaries(model);

            return model;
        }
Exemple #7
0
 /// <summary>
 /// Сохранение файлов
 /// </summary>
 /// <param name="model"></param>
 private void SaveFiles(StaffMovementsEditModel model)
 {
     //Сохраняем файлы
     var entity = StaffMovementsDao.Load(model.Id);
     var docs = entity.Docs;
     #region файлики
     var tmp = "";
     var MovementNote = docs.Where(x => x.DocType == (int)StaffMovementsDocsTypes.MovementNote).First();
     var id = SaveAttachment(MovementNote.Id, MovementNote.Attachment != null ? MovementNote.Attachment.Id : 0, model.MovementNoteDto, RequestAttachmentTypeEnum.StaffMovements, out tmp);
     if (id.HasValue)
     {
         var at = RequestAttachmentDao.Load(id.Value);
         MovementNote.Attachment = at;
         StaffMovementsDocsDao.SaveAndFlush(MovementNote);
     }
     #endregion
 }
Exemple #8
0
        /// <summary>
        /// Установка флажков
        /// </summary>
        /// <param name="model"></param>
        private void SetFlagState(StaffMovementsEditModel model)
        {
            #region Сначала сбросим все флаги в false
            model.IsAcceptButtonPressed = false;
            model.IsCancelAvailable = false;
            model.IsCancelButtonPressed = false;
            model.IsChiefAcceptAvailable = false;
            model.IsConfirmButtonAvailable = false;
            model.IsConfirmButtonPressed = false;
            model.IsDepartmentEditable = false;
            model.IsDocsAddAvailable = false;
            model.IsDocsEditable = false;
            model.IsManagerEditable = false;
            model.IsPersonnelManagerAcceptAvailable = false;
            model.IsPersonnelManagerBankAcceptAvailable = false;
            model.IsPersonnelManagerEditable = false;
            model.IsPositionEditable = false;
            model.ISRejectAvailable = false;
            model.IsRejectButtonPressed = false;
            model.IsSaveAvailable = false;
            model.IsSourceManagerAcceptAvailable = false;
            model.IsStopButtonAvailable = false;
            model.IsStopButtonPressed = false;
            model.IsTargetManagerAcceptAvailable = false;
            model.IsUserAcceptAvailable = false;
            #endregion
            //Флаги по типу модели
            switch (model.RequestType)
            {
                case 1: model.IsDepartmentEditable = false;
                    model.IsPositionEditable = false;
                    model.IsTargetManagerAcceptAvailable = true;
                    model.IsSourceManagerAcceptAvailable = false;
                    break;
                case 2:
                    model.IsDepartmentEditable = true;
                    model.IsPositionEditable = true;
                    break;
                case 3:
                    model.IsDepartmentEditable = false;
                    model.IsPositionEditable = true;
                    model.IsTargetManagerAcceptAvailable = true;
                    model.IsSourceManagerAcceptAvailable = false;
                    break;
            }
            //Если вышло из состояния черновика, то редактировать подразделение и должность нельзя. Заисключением кадровиков
            if (model.StatusId > 1 /*&& UserRole.PersonnelManager != CurrentUser.UserRole*/)
            {
                model.IsDepartmentEditable = false;
                model.IsPositionEditable = false;
            }
            //Флаги по статусу
            switch (model.StatusId)
            {
                case 1: //Черновик. Могут редактировать руководитель и сотрудник
                    model.IsManagerEditable = true;
                    model.IsSourceManagerAcceptAvailable = true;
                    model.IsTargetManagerAcceptAvailable = model.IsTargetManagerAcceptAvailable && true;
                    model.ISRejectAvailable = true;
                    model.IsUserAcceptAvailable = true;
                    model.IsDocsAddAvailable = true;
                    break;
                case 2://Отправлена на согласование руководителю отпускающему. Может редактировать руководитель
                    model.IsCancelAvailable = true;
                    model.ISRejectAvailable = true;
                    model.IsManagerEditable = true;
                    model.IsSourceManagerAcceptAvailable = true;
                    model.IsDocsAddAvailable = true;
                    break;
                case 3://Отправлена на согласование руководителю принимающему. может редактировать руководитель принимающий
                    model.IsCancelAvailable = true;
                    model.ISRejectAvailable = true;
                    model.IsManagerEditable = true;
                    model.IsDocsAddAvailable = true;
                    model.IsTargetManagerAcceptAvailable = true;
                    break;
                case 4://Отправлена на согласование кадровику банка
                    model.IsCancelAvailable = true;
                    model.ISRejectAvailable = true;
                    model.IsManagerEditable = false;
                    model.IsStopButtonAvailable = true;
                    model.IsPersonnelManagerBankAcceptAvailable = true;
                    model.IsTargetManagerAcceptAvailable = false;
                    break;
                case 5://Заблокирована кадровиком банка. Доступно согласование кадровиком банка
                    model.IsCancelAvailable = true;
                    model.ISRejectAvailable = true;
                    model.IsManagerEditable = true;
                    model.IsStopButtonAvailable = true;
                    model.IsPersonnelManagerBankAcceptAvailable = true;
                    model.IsTargetManagerAcceptAvailable = true;
                    break;
                case 6://Отправлена на согласование вышестоящему руководителю
                    model.IsCancelAvailable = true;
                    model.ISRejectAvailable = true;
                    model.IsChiefAcceptAvailable = true;
                    model.IsTargetManagerAcceptAvailable = false;
                    break;
                case 7://Оформление кадры. Доступно редактирование кадровикам, проставление галок в документах
                    model.IsCancelAvailable = true;
                    model.ISRejectAvailable = true;
                    model.IsPersonnelManagerEditable = true;
                    model.IsPersonnelManagerAcceptAvailable = true;
                    model.IsDocsEditable = true;
                    model.IsDocsAddAvailable = true;
                    model.IsTargetManagerAcceptAvailable = false;
                    break;
                case 8://Контроль руководителя - пакет документов на подпись. Доступно вложение документов
                    model.IsCancelAvailable = true;
                    model.ISRejectAvailable = true;
                    model.IsDocsAddAvailable = true;
                    model.IsDocsEditable = true;
                    model.IsTargetManagerAcceptAvailable = false;
                    break;
                case 9://Документы подписаны
                    model.IsCancelAvailable = true;
                    model.ISRejectAvailable = true;
                    model.IsConfirmButtonAvailable = true;
                    model.IsDocsEditable = true;
                    model.IsTargetManagerAcceptAvailable = false;
                    break;
                case 10://Перевод оформлен
                    model.IsCancelAvailable = true;
                    model.ISRejectAvailable = true;
                    model.IsTargetManagerAcceptAvailable = false;
                    break;
                case 11://'Отклонен' Уже ничо нельзя сделать. Поезд ушёл.
                    model.IsTargetManagerAcceptAvailable = false;
                    break;
                case 12://'Выгружен в 1С' Уже ничо нельзя сделать. Поезд ушёл.
                    model.IsTargetManagerAcceptAvailable = false;
                    break;
            }
            //Флаги по ролям
            switch (CurrentUser.UserRole)
            {
                case UserRole.OutsourcingManager:
                    model.IsDocsVisible = true;
                    model.IsPersonnelVisible = true;
                    model.IsManagerVisible = true;

                    model.IsPersonnelManagerEditable = false; //Редактирование кадровиком
                    model.IsManagerEditable = false;//Редактирование руководителем
                    model.IsDocsEditable = false;//Редактирование документов
                    model.IsDocsAddAvailable = false;//Добавление документов

                    model.IsUserAcceptAvailable = false; //Утверждение сотрудником
                    model.ISRejectAvailable = false; //Отмена
                    model.IsCancelAvailable = false;
                    model.IsSourceManagerAcceptAvailable = false;//Утверждение отпускающим руководителем
                    model.IsTargetManagerAcceptAvailable = false;//Утверждение принимающим руководителем
                    model.IsPersonnelManagerAcceptAvailable = false;//Утверждение кадровиком
                    model.IsPersonnelManagerBankAcceptAvailable = false;//Утверждение кадровиком банка
                    model.IsChiefAcceptAvailable = false;//Утверждение вышестоящим руководителем

                    model.IsConfirmButtonAvailable = false;//Кнопка утверждения документов
                    model.IsStopButtonAvailable = false;//Конпка приостановки
                    SetAdditionFlags(model.AdditionsToEdit, CurrentUser.UserRole, false);
                    break;
                case UserRole.Employee:
                    model.IsDocsVisible = true;
                    model.IsPersonnelVisible = false;
                    model.IsManagerVisible = true;
                    model.IsPersonnelManagerEditable = false; //Редактирование кадровиком
                    model.IsManagerEditable = false;//Редактирование руководителем
                    model.IsDocsEditable = false;//Редактирование документов
                    model.IsDocsAddAvailable = model.IsDocsAddAvailable = true;
                    model.IsUserAcceptAvailable = model.IsUserAcceptAvailable && true; //Утверждение сотрудником
                    model.ISRejectAvailable = model.ISRejectAvailable && true; //Отмена
                    model.IsSourceManagerAcceptAvailable = false;//Утверждение отпускающим руководителем
                    model.IsTargetManagerAcceptAvailable = false;//Утверждение принимающим руководителем
                    model.IsPersonnelManagerAcceptAvailable = false;//Утверждение кадровиком
                    model.IsPersonnelManagerBankAcceptAvailable = false;//Утверждение кадровиком банка
                    model.IsChiefAcceptAvailable = false;//Утверждение вышестоящим руководителем

                    model.IsConfirmButtonAvailable = false;//Кнопка утверждения документов
                    model.IsStopButtonAvailable = false;//Конпка приостановки
                    SetAdditionFlags(model.AdditionsToEdit, CurrentUser.UserRole, false);
                    break;
                case UserRole.Manager:
                    bool IsUpperSource = false;
                    bool IsUpperTarget = false;
                    if (model.SourceManager != null)
                    {
                        var sourcemanager = UserDao.Load(model.SourceManager.Id);
                        if(sourcemanager!=null && sourcemanager.Department!=null)
                            IsUpperSource = CheckIsChief(sourcemanager.Department.Id, CurrentUser);
                    }
                    if (model.TargetManager != null)
                    {
                        var targetmanager = UserDao.Load(model.TargetManager.Id);
                        if (targetmanager != null && targetmanager.Department != null)
                            IsUpperTarget = CheckIsChief(targetmanager.Department.Id, CurrentUser);

                    }
                    model.IsDocsVisible = true;
                    model.IsPersonnelVisible = false;
                    model.IsManagerVisible = true;
                    model.IsPersonnelManagerEditable = false; //Редактирование кадровиком
                    model.IsManagerEditable = model.IsManagerEditable && (model.Id == 0 || (model.TargetManager != null ? (model.TargetManager.Id == CurrentUser.Id || IsUpperTarget) : false));//Редактирование руководителем, должно быть доступно только принимающему руководителю
                    model.IsDocsEditable = false;//Редактирование документов
                    model.IsDocsAddAvailable = model.IsDocsAddAvailable && true;//Добавление документов

                    model.IsUserAcceptAvailable = false; //Утверждение сотрудником
                    model.SendDate = model.SendDate.HasValue ? model.SendDate : DateTime.Now;
                    model.ISRejectAvailable = model.ISRejectAvailable && true; //Отмена
                    model.IsSourceManagerAcceptAvailable = model.IsSourceManagerAcceptAvailable && model.SourceManager != null ? (model.SourceManager.Id == CurrentUser.Id || IsUpperSource) : false;//Утверждение отпускающим руководителем. Должно быть доступно только отпускающему
                    model.IsTargetManagerAcceptAvailable = model.IsTargetManagerAcceptAvailable && model.TargetManager != null ? (model.TargetManager.Id == CurrentUser.Id || IsUpperTarget): false;//Утверждение принимающим руководителем
                    model.IsPersonnelManagerAcceptAvailable = false;//Утверждение кадровиком
                    model.IsPersonnelManagerBankAcceptAvailable = false;//Утверждение кадровиком банка
                    if (model.TargetManager != null)
                    {
                        var chiefs = GetChiefsForManager(model.TargetManager.Id);
                        model.IsChiefAcceptAvailable = model.IsChiefAcceptAvailable && chiefs.Any(x => x.Id == CurrentUser.Id);//Утверждение вышестоящим руководителем
                    }
                    else model.IsChiefAcceptAvailable = false;
                    model.IsConfirmButtonAvailable = false;//Кнопка утверждения документов
                    model.IsStopButtonAvailable = false;//Конпка приостановки
                    model.IsPositionEditable = model.IsPositionEditable && (model.Id == 0 || model.IsTargetManagerAcceptAvailable || model.IsSourceManagerAcceptAvailable);
                    SetAdditionFlags(model.AdditionsToEdit, CurrentUser.UserRole, model.IsManagerEditable);
                    break;
                case UserRole.ConsultantPersonnel:
                    model.IsDocsVisible = false;
                    model.IsPersonnelVisible = false;
                    model.IsManagerVisible = true;
                    model.IsPersonnelManagerEditable = false; //Редактирование кадровиком
                    model.IsManagerEditable = (model.IsPersonnelManagerBankAcceptAvailable) && true;//Редактирование руководителем, должно быть доступно только принимающему руководителю
                    model.IsDocsEditable = false;//Редактирование документов
                    model.IsDocsAddAvailable = false;//Добавление документов

                    model.IsUserAcceptAvailable = false; //Утверждение сотрудником
                    model.ISRejectAvailable = model.ISRejectAvailable && true; //Отмена
                    model.IsSourceManagerAcceptAvailable = false;//Утверждение отпускающим руководителем. Должно быть доступно только отпускающему
                    model.IsTargetManagerAcceptAvailable = false;//Утверждение принимающим руководителем
                    model.IsPersonnelManagerAcceptAvailable = false;//Утверждение кадровиком
                    model.IsPersonnelManagerBankAcceptAvailable = model.IsPersonnelManagerBankAcceptAvailable && true;//Утверждение кадровиком банка
                    model.IsChiefAcceptAvailable = false;//Утверждение вышестоящим руководителем

                    model.IsConfirmButtonAvailable = false;//Кнопка утверждения документов
                    model.IsStopButtonAvailable = true;//Конпка приостановки
                    SetAdditionFlags(model.AdditionsToEdit, CurrentUser.UserRole, false);
                    break;
                case UserRole.PersonnelManager:

                    model.IsDocsVisible = true;
                    model.IsPersonnelVisible = true;
                    model.IsManagerVisible = true;
                    model.IsPersonnelManagerEditable = model.IsPersonnelManagerEditable && true; //Редактирование кадровиком
                    model.IsManagerEditable = (model.IsPersonnelManagerEditable || model.IsManagerEditable) && true;//Редактирование руководителем, должно быть доступно только принимающему руководителю
                    model.IsDocsEditable = model.IsDocsEditable && true;//Редактирование документов
                    model.IsDocsAddAvailable = model.IsDocsAddAvailable && true;//Добавление документов

                    model.IsUserAcceptAvailable = false; //Утверждение сотрудником
                    model.SendDate = model.SendDate.HasValue ? model.SendDate : DateTime.Now;
                    model.ISRejectAvailable = model.ISRejectAvailable && true; //Отмена
                    model.IsSourceManagerAcceptAvailable = false;//Утверждение отпускающим руководителем. Должно быть доступно только отпускающему
                    model.IsTargetManagerAcceptAvailable = false;//Утверждение принимающим руководителем
                    model.IsPersonnelManagerAcceptAvailable = model.IsPersonnelManagerAcceptAvailable && true;//Утверждение кадровиком
                    model.IsPersonnelManagerBankAcceptAvailable = false;//Утверждение кадровиком банка
                    model.IsChiefAcceptAvailable = false;//Утверждение вышестоящим руководителем

                    model.IsConfirmButtonAvailable = model.IsConfirmButtonAvailable && true;//Кнопка утверждения документов
                    model.IsStopButtonAvailable = false;//Конпка приостановки
                    SetAdditionFlags(model.AdditionsToEdit, CurrentUser.UserRole, model.IsPersonnelManagerEditable);
                    /*model.IsTargetManagerAcceptAvailable = true && !model.TargetManagerAccept.HasValue;
                    model.IsSourceManagerAcceptAvailable = true && !model.SourceManagerAccept.HasValue;*/
                    break;
            }
            model.IsSaveAvailable = (model.StatusId == 1 && (model.Creator.Id == CurrentUser.Id || model.User.Id == CurrentUser.Id))
                || model.IsManagerEditable
                || model.IsPersonnelManagerEditable
                || model.IsDocsAddAvailable;
        }
Exemple #9
0
 /// <summary>
 /// Сохранение надвбавок
 /// </summary>
 /// <param name="entity">сущность</param>
 /// <param name="model">модель</param>
 private void SaveAdditions(StaffMovements entity, StaffMovementsEditModel model)
 {
     foreach (var addition in model.AdditionsToEdit)
     {
         if (!entity.Additions.Any(x => x.ExtraCharges != null && x.ExtraCharges.Id == addition.Type.Id))
         {
             entity.Additions.Add(new StaffPostChargeLinks
             {
                 CreateDate = DateTime.Now,
                 Creator = UserDao.Load(CurrentUser.Id),
                 EditDate = DateTime.Now,
                 Editor = UserDao.Load(CurrentUser.Id),
                 ExtraChargeActions = StaffExtraChargeActionsDao.Load(addition.Action),
                 ExtraCharges = StaffExtraChargesDao.Load(addition.Type.Id),
                 IsActive = false,
                 Salary = addition.Value,
                 Staff = UserDao.Load(model.User.Id),
                 StaffMovements = entity
             });
         }
         else
         {
             var ad = entity.Additions.Where(x => x.ExtraCharges.Id == addition.Type.Id).First();
             ad.Salary = addition.Value;
             ad.ExtraChargeActions = StaffExtraChargeActionsDao.Load(addition.Action);
         }
     }
 }
Exemple #10
0
        /// <summary>
        /// Справочники
        /// </summary>
        /// <param name="model"></param>
        private void LoadDictionaries(StaffMovementsEditModel model)
        {
            model.UsersTo = new List<IdNameDto>();
            model.Subject = String.Format("Заявка на кадровое перемещение №{0}", model.Number);
            try
            {
                var currentuser = UserDao.Load(CurrentUser.Id);
                var currentrole = RoleDao.Load((int)CurrentUser.UserRole);
                model.EmailMessage = String.Format("{0} {1} {2} {3}", Environment.NewLine, CurrentUser.Name, Environment.NewLine, currentuser.Position != null ? currentuser.Position.Name : currentrole.Name);
            }
            catch (Exception e) { Log.Error(e.Message); }
            if (model.StatusId > 1 && model.StatusId < 10 && model.Id>0)
            {
                var entity = StaffMovementsDao.Get(model.Id);
                if(entity.User!=null && !String.IsNullOrEmpty(entity.User.Email))
                    model.UsersTo.Add(new IdNameDto { Id=entity.User.Id, Name=entity.User.Name });
                if (entity.SourceManager != null && !String.IsNullOrEmpty(entity.SourceManager.Email))
                    model.UsersTo.Add(new IdNameDto { Id = entity.SourceManager.Id, Name = entity.SourceManager.Name });
                if (entity.TargetManager != null && !String.IsNullOrEmpty(entity.TargetManager.Email))
                    model.UsersTo.Add(new IdNameDto { Id = entity.TargetManager.Id, Name = entity.TargetManager.Name });
                if (entity.TargetChief != null && !String.IsNullOrEmpty(entity.TargetChief.Email))
                    model.UsersTo.Add(new IdNameDto { Id = entity.TargetChief.Id, Name = entity.TargetChief.Name });
                if (entity.PersonnelManager != null && !String.IsNullOrEmpty(entity.PersonnelManager.Email))
                    model.UsersTo.Add(new IdNameDto { Id = entity.PersonnelManager.Id, Name = entity.PersonnelManager.Name });
                if (entity.PersonnelManagerBank != null && !String.IsNullOrEmpty(entity.PersonnelManagerBank.Email))
                    model.UsersTo.Add(new IdNameDto { Id = entity.PersonnelManagerBank.Id, Name = entity.PersonnelManagerBank.Name });
                var TargetUppers = DocumentApprovalDao.Find(x => x.DocId == entity.Id && x.Number == 2 && !x.IsArchive);
                if (TargetUppers != null && TargetUppers.Any())
                {
                    var upper2= TargetUppers.First().AssistantUser;
                    if (!String.IsNullOrEmpty(upper2.Email)) model.UsersTo.Add(new IdNameDto { Id = upper2.Id, Name = upper2.Name });
                }
                var SourceUppers = DocumentApprovalDao.Find(x => x.DocId == entity.Id && x.Number == 1 && !x.IsArchive);
                if (SourceUppers != null && SourceUppers.Any())
                {
                    var upper1 = SourceUppers.First().AssistantUser;
                    if (!String.IsNullOrEmpty(upper1.Email)) model.UsersTo.Add(new IdNameDto { Id = upper1.Id, Name = upper1.Name });
                }
                model.UsersTo = model.UsersTo.Distinct(new IdEqualityComparer()).ToList();
                model.IsSendEmailAvailable = (CurrentUser.UserRole & (UserRole.PersonnelManager | UserRole.ConsultantPersonnel)) > 0
                    || model.UsersTo.Any(x=>x.Id==CurrentUser.Id);
            }
            var extracharges = ExtraChargesDao.LoadAll();
            if (extracharges != null && extracharges.Any())
            {
                model.NorthFactorOrders = extracharges.Select(x => new IdNameDto { Id = x.Id, Name = x.Name }).ToList();
            }
            var HoursTypes = ScheduleDao.LoadAll();
            if (HoursTypes != null && HoursTypes.Any())
            {
                model.HoursTypes = HoursTypes.Select(x => new IdNameDto { Id = x.Id, Name = x.Name }).ToList();
            }
            var AccessGroups = AccessGroupDao.LoadAll();
            if (AccessGroups != null && AccessGroups.Any())
            {
                model.AccessGroupsList = AccessGroups.Select(x => new IdNameDto { Id = x.Id, Name = x.Name }).ToList();
            }

            var RequestTypes = StaffMovementsTypesDao.LoadAll();
            if (RequestTypes != null && RequestTypes.Any())
            {
                model.RequestTypes = RequestTypes.Select(x => new IdNameDto { Id = x.Id, Name = x.Name }).ToList();
                if (model.Id == 0 && CurrentUser.UserRole == UserRole.Employee)
                {
                    model.RequestTypes = model.RequestTypes.Where(x => x.Id != 1).ToList();
                }
            }
            model.NorthFactors = GetNorthExperienceTypes();
            model.AdditionActions = new List<IdNameDto>();
            model.AdditionActions.Add(new IdNameDto { Id = 1, Name = "Начать" });
            model.AdditionActions.Add(new IdNameDto { Id = 2, Name = "Изменить" });
            model.AdditionActions.Add(new IdNameDto { Id = 3, Name = "Не изменять" });
            model.AdditionActions.Add(new IdNameDto { Id = 4, Name = "Прекратить" });
            if (model.TargetDepartmentId > 0)
            {
                model.UserLinks = GetPositionsForDepartment(model.TargetDepartmentId);
                if (model.UserLinks == null) model.UserLinks = new List<IdNameDto>();
                if (model.UserLinkId > 0 && !model.UserLinks.Any(x => x.Id == model.UserLinkId))
                {
                    var link = StaffEstablishedPostUserLinksDao.Load(model.UserLinkId);
                    model.UserLinks.Add(new IdNameDto { Name = link.StaffEstablishedPost.Position.Name, Id = link.Id });
                }
            }
            else model.UserLinks = new List<IdNameDto>();
        }
Exemple #11
0
 /// <summary>
 /// Получение оклада и районного коэф.
 /// </summary>
 /// <param name="request"></param>
 /// <param name="Salary"></param>
 /// <param name="Region"></param>
 private void GetMoneyForStaffEstablishedPostUserLinks(StaffEstablishedPostUserLinks request, StaffMovementsEditModel model)
 {
     model.TargetCasing = request.StaffEstablishedPost.Salary;
     //var charges = request.StaffEstablishedPost.PostChargeLinks.Where(x => x.ExtraCharges != null && x.ExtraCharges.Id == 6).ToList();
     var postReq = request.StaffEstablishedPost.EstablishedPostRequest.Where(x => x.IsUsed && x.PostChargeLinks!=null);
     if (postReq != null && postReq.Any())
     {
         var charges = postReq.First().PostChargeLinks.Where(x => x.ExtraCharges != null && x.ExtraCharges.Id == 6).ToList();
         if (charges != null && charges.Any())
         {
             var charge = charges.First();
             model.TargetRegion = charge.Amount.HasValue ? charge.Amount.Value : 0;
         }
     }
     else
     {
         model.TargetRegion = 0;
     }
 }
 public ActionResult Edit(StaffMovementsEditModel model)
 {
     ModelState.Clear();
     if ((model.Creator == null || model.Creator.Id == 0) && model.Id == 0)
     {
         StaffMovementsBl.SetModel(model);
     }
     else
     {
         //model.AdditionalAgreementDocDto = GetFileContext(Request, ModelState, "AdditionalAgreementDoc");
        // model.MaterialLiabilityDocDto = GetFileContext(Request, ModelState, "MaterialLiabilityDoc");
         model.MovementNoteDto = GetFileContext(Request, ModelState, "MovementNote");
         //model.MovementOrderDocDto = GetFileContext(Request, ModelState, "MovementOrderDoc");
        //model.RequirementsOrderDocDto = GetFileContext(Request, ModelState, "RequirementsOrderDoc");
        // model.ServiceOrderDocDto = GetFileContext(Request, ModelState, "ServiceOrderDoc");
         StaffMovementsBl.SaveModel(model);
         StaffMovementsBl.SetModel(model);
     }
     return View("StaffMovementsEdit", model);
 }
 /// <summary>
 /// Сохранение галочек для документов. DEPRECATED
 /// </summary>
 /// <param name="model"></param>
 /// <returns></returns>
 public ContentResult SaveDocs(StaffMovementsEditModel model)
 {
     StaffMovementsBl.SaveDocsModel(model);
     return Content("Ok");
 }