public ActionResult Employee(int id, EmployeeManageInputModel model) { if (!ModelState.IsValid) { return(View(model)); } var employee = this.employeesService.GetEmployeeById(id); if (employee == null) { return(HttpNotFound()); } //Only CEO(enum 0), DeliveryDirector(enum 1), ProjectManager(enum 2) can manage employees. if (employee.Position > CompanyRoleType.ProjectManager) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } if (!this.employeesService.IfEmployeesCanBeRemovedChecker(employee, model.EmployeesToRemove)) { return(View(Constants.CannotRemoveEmployee)); } this.employeesService.AddEmployeesToManager(id, model.EmployeesToAdd); this.employeesService.RemoveEmployeesFromManager(model.EmployeesToRemove); return(RedirectToAction(Constants.Index, Constants.Employees)); }
public ActionResult Employee(int id) { var employee = this.employeesService.GetEmployeeById(id); if (employee == null) { return(HttpNotFound()); } if (employee.Position > CompanyRoleType.ProjectManager) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } if (employee.Position != CompanyRoleType.CEO && employee.Manager == null) { return(View(Constants.NoManager)); } // Getting all employees with a position one step lower. // If DeliveryManager(Enum position = 1) get all ProjectManagers(Enum position = 2). var employeesToAdd = this.employeesService .AllEmployees() .Where(e => e.Position == employee.Position + 1 && e.Manager == null) .ToList(); var employeesToRemove = this.employeesService .AllEmployees() .Where(e => e.EmployeeId == employee.Id) .ToList(); var employeeManageInputModel = new EmployeeManageInputModel { ListOfFreeEmployees = this.employeesService.SelectListItemGenerator(employeesToAdd), ListOfManagedEmployees = this.employeesService.SelectListItemGenerator(employeesToRemove) }; return(View(employeeManageInputModel)); }