Example #1
0
        /// <summary>
        /// Проверка на заполнение полей формы.
        /// </summary>
        /// <param name="model">Обрабатываемая модель</param>
        /// <param name="error">Сообщение</param>
        /// <returns></returns>
        protected bool ValidateModel(StaffListArrangementModel model, out string error)
        {
            error = string.Empty;
            DateTime? MaxEndDate = null;
            //нужно определить дату конца периода максимально возможную
            //определяем основного сотрудника для данного места в штатной расстановке
            StaffEstablishedPostUserLinks ul = StaffEstablishedPostUserLinksDao.Get(model.UserLinkId);
            if (ul == null)
            {
                error = "ОШИБКА! Неопределено место в штатной расстановке! Обратитесь к разработчикам!";
                return false;
            }

            if (!ul.IsUsed)
            {
                error = "Данное место в штатной расстановке не является действующим.";
                return false;
            }

            if (!model.DateBegin.HasValue)
            {
                error = "Укажите начало периода!";
                return false;
            }

            if (ul.User == null) return true;

            //смотрим по основному сотруднику в отпуска по уходу за ребенком, если есть, то находим максимальный конец периода, так как может быть несколько заявок
            if (ul.User.ChildVacation.Where(x => x.SendTo1C.HasValue).Count() != 0)
            {
                MaxEndDate = ul.User.ChildVacation.Where(x => x.SendTo1C.HasValue).Max(x => x.EndDate);
                //Найденную дату проверяем актуальность относително текущего момента времени и введенного конца периода
                if (MaxEndDate >= DateTime.Today && model.DateEnd > MaxEndDate)
                {
                    error = @"Указанный конец периода не может быть больше конца периода отпуска по уходу за ребенком (" + MaxEndDate.Value.ToShortDateString() + ")!";
                    return false;
                }
            }

            //смотрим выгруженные временные перемещения, если есть берем конец периода
            if (ul.User.StaffMovements.Where(x => x.IsTempMoving && (x.Type.Id == 2 || x.Type.Id == 3) && x.Status.Id == 12).Count() != 0)
            {
                MaxEndDate = ul.User.StaffMovements.Where(x => x.IsTempMoving && (x.Type.Id == 2 || x.Type.Id == 3) && x.Status.Id == 12).Max(x => x.MovementTempTo);
                if (MaxEndDate >= DateTime.Today && model.DateEnd > MaxEndDate)
                {
                    error = @"Указанный конец периода не может быть больше конца периода отсутствия временно перемещенного сотрудника с данной должности (" + MaxEndDate.Value.ToShortDateString() + ")!";
                    return false;
                }
            }

            //если есть длительное отсутствие, конец периода не обязателен, по этому конец проверяем только для ОЖ и перемещениям
            if (/*MaxEndDate.HasValue &&*/ !model.DateEnd.HasValue)
            {
                error = "Укажите конец периода!";
                return false;
            }

            return true;
        }
Example #2
0
        /// <summary>
        /// Создание заявки на вакансию при длительном отсутствии сотрудника. 
        /// </summary>
        /// <param name="model">обрабатываемая модель.</param>
        /// <param name="error">Сообщение</param>
        /// <returns></returns>
        public bool CreateTemporaryReleaseVacancyRequest(StaffListArrangementModel model, out string error)
        {
            error = string.Empty;

            if(!ValidateModel(model, out error))
                return false;

            //создаем заявку
            StaffEstablishedPostUserLinks ul = StaffEstablishedPostUserLinksDao.Get(model.UserLinkId);//место в расстановке
            StaffTemporaryReleaseVacancyRequest entity = new StaffTemporaryReleaseVacancyRequest()
            {
               EstablishedPostUserLinks = ul,
               ReplacedUser = ul.User,
               DateBegin = model.DateBegin,
               DateEnd = model.DateEnd,
               AbsencesType = StaffLongAbsencesTypesDao.Get(model.AbsencesTypeId),
               IsUsed = true,
               Note = model.Note,
               Creator = UserDao.Get(AuthenticationService.CurrentUser.Id),
               CreateDate = DateTime.Now
            };

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

            return true;
        }
Example #3
0
 /// <summary>
 /// Загрузка модели страницы (часть с заявкой для временной вакансии)
 /// </summary>
 /// <param name="model">Заполняемая модель.</param>
 /// <returns></returns>
 public StaffListArrangementModel GetStaffListArrangementModel(StaffListArrangementModel model)
 {
     model.AbsencesTypes = StaffLongAbsencesTypesDao.LoadAll().ToList().ConvertAll(x => new IdNameDto { Id = x.Id, Name = x.Name });
     return model;
 }
Example #4
0
        /// <summary>
        /// Загружаем структуру по заданному коду подразделения и штатную расстановку.
        /// </summary>
        /// <param name="DepId">Код родительского подразделения</param>
        /// <param name="IsBegin">Флажок показывающий, что это первоначальная загрузка.</param>
        /// <returns></returns>
        public StaffListArrangementModel GetDepartmentStructureWithStaffArrangement(string DepId, bool IsBegin)
        {
            StaffListArrangementModel model = new StaffListArrangementModel();

            //если не определены права ничего не грузим
            if (string.IsNullOrEmpty(DepId)) return model;

            Department dep = DepartmentDao.GetByCode(DepId);
            int DepartmentId = dep.Id;
            int itemLevel = dep.ItemLevel.Value;

            int PersonnelId = AuthenticationService.CurrentUser.UserRole == UserRole.PersonnelManager ? AuthenticationService.CurrentUser.Id : 0;
            //для замов нужно скрывать оклад руководителя
            int ManagerId = AuthenticationService.CurrentUser.UserRole == UserRole.Manager ? AuthenticationService.CurrentUser.Id : 0;

            //для Месяц, под учеткой члена правления нужно показать деньги только для фронтов
            if (AuthenticationService.CurrentUser.Id == 12327)
                ManagerId = 12327;

            //достаем уровень подразделений и сотрудников с должностями к ним
            //если на входе код подразделения 7 уровня, то надо достать должности и сотрудников
            if (itemLevel != 7)
            {
                model.EstablishedPosts = StaffEstablishedPostDao.GetStaffEstablishedArrangements(DepartmentId, PersonnelId, ManagerId);
                //уровень подразделений
                model.Departments = GetDepartmentListByParent(DepId, false, IsBegin).OrderBy(x => x.Priority).ToList();
            }
            else
            {
                model.EstablishedPosts = StaffEstablishedPostDao.GetStaffEstablishedArrangements(DepartmentId, PersonnelId, ManagerId);
            }

            return model;
        }
Example #5
0
        public ActionResult CreateTemporaryReleaseVacancyRequest(StaffListArrangementModel model)
        {
            string error = string.Empty;
            bool result = StaffListBl.CreateTemporaryReleaseVacancyRequest(model, out error);

            //var jsonSerializer = new JavaScriptSerializer();
            if (result)
                model = StaffListBl.GetDepartmentStructureWithStaffArrangement(model.DepId, false);
            //string jsonString = jsonSerializer.Serialize(model);
            //return Content(jsonString);
            return Json(new { ok = result, msg = error, model.EstablishedPosts });
        }
Example #6
0
 public ActionResult StaffListArrangement(string DepId, bool? IsParentDepOnly, bool? IsBegin)
 {
     StaffListArrangementModel model = new StaffListArrangementModel();
     model = StaffListBl.GetStaffListArrangementModel(model);
     model.Departments = StaffListBl.GetDepartmentListByParent(DepId, IsParentDepOnly.HasValue ? IsParentDepOnly.Value : false, !IsBegin.HasValue ? true : IsBegin.Value);
     return View(model);
 }