/// <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; }
/// <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; }
/// <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; }
/// <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; }
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 }); }
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); }