Example #1
0
 public JsonResult Save([Bind(Include = "Id,Name,Description,IsActive")] EmployeeCategoryModel employeeCategory, bool isInsert)
 {
     if (isInsert)
     {
         employeeCategory.SetCreateProperties(LoginInformation.UserInformation.Id);
         employeeCategory.Id = _employeeCategoryService.Insert(employeeCategory);
     }
     else
     {
         employeeCategory.SetUpdateProperties(LoginInformation.UserInformation.Id);
         _employeeCategoryService.Update(employeeCategory);
     }
     return(new JsonResult {
         Data = employeeCategory
     });
 }
        public ActionResult Edit(EmployeeCategory employeeCategory)
        {
            if (ModelState.IsValid)
            {
                if (employeeCategory.CategoryDateBegin == null)
                {
                    ModelState.AddModelError("CategoryDateBegin", "Это поле должно быть заполнено.");
                }
                else if ((employeeCategory.CategoryType == EmployeeCategoryType.Regular || employeeCategory.CategoryType == EmployeeCategoryType.Temporary) &&
                         !employeeCategory.EmploymentRatio.HasValue)
                {
                    ModelState.AddModelError("EmploymentRatio", "Для выбранной категории необходимо указать % ставки.");
                }
                else if ((employeeCategory.CategoryType == EmployeeCategoryType.FreelancerHourly || employeeCategory.CategoryType == EmployeeCategoryType.FreelancerPiecework ||
                          employeeCategory.CategoryType == EmployeeCategoryType.ExtContragentEmployee) && employeeCategory.EmploymentRatio.HasValue)
                {
                    ModelState.AddModelError("EmploymentRatio", "Для выбранной категории % ставки не указывается, укажите пустое значение % ставки.");
                }

                else
                {
                    var employee = _employeeService.GetById((int)employeeCategory.EmployeeID);

                    // Получаем все категории с данным EmployeeId
                    var categoryList = _employeeCategoryService.Get(empls => empls.Where(x =>
                                                                                         x.EmployeeID == employeeCategory.EmployeeID &&
                                                                                         x.CategoryDateBegin >= employee.EnrollmentDate).OrderBy(x => x.CategoryDateEnd)
                                                                    .AsNoTracking()
                                                                    .ToList());
                    // Получаем ещё неизмененный объект
                    var notChangeCategory = categoryList.Where(x => x.ID == employeeCategory.ID).FirstOrDefault();
                    // Смотрим есть ли незакрытые категории
                    var isOpenCategorieNotExis = (categoryList.Where(x => x.CategoryDateEnd == null).Count() == 0);
                    // Получаем первый объект из выборки
                    EmployeeCategory firstCategory = (!isOpenCategorieNotExis) ? categoryList.FirstOrDefault() : categoryList.LastOrDefault();

                    if (((employee.EnrollmentDate == null) && (employee.DismissalDate == null)) ||
                        ((employee.EnrollmentDate == null) && (employee.DismissalDate != null)) ||
                        firstCategory == null || notChangeCategory == null)
                    {
                        ModelState.AddModelError("Comments", "Нельзя редактировать категорию.");
                    }
                    else
                    {
                        // Если первый объект из thisCategoryInDB равен notChangeCategory, значит мы работает с последним объектом из категории сотрудника
                        if (firstCategory.ID == notChangeCategory.ID)
                        {
                            if (employee.EnrollmentDate > employeeCategory.CategoryDateBegin)
                            {
                                ModelState.AddModelError("CategoryDateBegin", "В это время сотрудник не работал.");
                            }
                            else if (employeeCategory.CategoryDateBegin >= employeeCategory.CategoryDateEnd)
                            {
                                ModelState.AddModelError("CategoryDateEnd", "Дата окончания не может быть меньше или равна дате назначения.");
                            }
                            else if (employee.DismissalDate < employeeCategory.CategoryDateEnd)
                            {
                                ModelState.AddModelError("CategoryDateEnd", "В это время сотрудник был уволен.");
                            }
                            else if (employeeCategory.CategoryDateBegin != notChangeCategory.CategoryDateBegin)
                            {
                                ModelState.AddModelError("CategoryDateBegin", "Допустимая дата " + notChangeCategory.CategoryDateBegin.Value.ToShortDateString());
                            }
                        }
                        else
                        {
                            if ((notChangeCategory.CategoryDateBegin != employeeCategory.CategoryDateBegin) ||
                                (notChangeCategory.CategoryDateEnd != employeeCategory.CategoryDateEnd))
                            {
                                ModelState.AddModelError("CategoryDateBegin", "Для данной категории поля с датой менять нельзя.");
                            }
                        }
                    }
                }
            }

            if (ModelState.IsValid)
            {
                _employeeCategoryService.Update(employeeCategory);

                string returnUrl = Url.Action("Details", "Employee", new { id = employeeCategory.EmployeeID + "#employeecategory" }).Replace("%23", "#");
                return(new RedirectResult(returnUrl));
            }

            ViewBag.EmployeeID      = new SelectList(_employeeService.Get(x => x.ToList()), "ID", "FullName", employeeCategory.EmployeeID);
            ViewBag.EmploymentRatio = employeeCategory.EmploymentRatio.HasValue ? ((double)employeeCategory.EmploymentRatio.Value).ToString() : string.Empty;
            return(View(employeeCategory));
        }