public ActionResult Edit([Bind(Include = "idProjectPK,projectName,objective,estimatedCost,realCost,startingDate,finishingDate,budget,estimatedDuration,idClientFK, status")] Project project, [Bind(Include = "idEmployeeFKPK")] WorksIn employee) { var EmployeesController = new EmployeesController(); var availableEmployees = EmployeesController.AvailableEmployeesAndLider(project.idProjectPK); var WorksInController = new WorksInsController(); var lider = WorksInController.GetLiderID(project.idProjectPK); var aux = employee.idEmployeeFKPK; if (ModelState.IsValid) { if (project.startingDate < project.finishingDate) { db.Entry(project).State = EntityState.Modified; if (employee.idEmployeeFKPK == lider) { //Si el nuevo id es igual al ya asignado, entonces no hace nada. } else { //en caso contrario cambia los datos. if (lider == null) //si no hay lider asignado, crea una nueva relación con el líder elegido { employee.idProjectFKPK = project.idProjectPK; employee.role = 1; db.WorksIn.Add(employee); } else { //si ya hay uno asignado var exLider = db.Employee.Find(lider); exLider.availability = 0; //cambia la disponibilidad del antiguo a disponible. var modificating = db.WorksIn.Find(lider, project.idProjectPK); db.WorksIn.Remove(modificating); //remueve la relación del líder anterior (dado que no es modificable) employee.idProjectFKPK = project.idProjectPK; employee.role = 1; db.WorksIn.Add(employee); //y crea una nueva con el nuevo líder. } } db.SaveChanges(); return(RedirectToAction("Index")); } else { ModelState.AddModelError("startingDate", "La fecha de inicio no puede ser despues de la fecha de finalización."); } } ViewBag.idClientFK = new SelectList(db.Client, "idClientPK", "clientName", project.idClientFK); ViewBag.idEmployeeFKPK = new SelectList(availableEmployees, "idEmployeePK", "employeeName", lider); ViewBag.status = SelectListStatus(null); return(View(project)); }
// GET: Projects/Edit/5 //EFE: Edita el proyecto seleccionado // MOD: el proyecto con el id especificado. public ActionResult Edit(int?id) { var EmployeesController = new EmployeesController(); //Controlador de empleados var availableEmployees = EmployeesController.AvailableEmployeesAndLider(id); //retorna la lista de desarrolladores disponibles incluyendo al líder actual del proyecto var WorksInController = new WorksInsController(); //Controlador de relaciones desarrollador/proyecto. var lider = WorksInController.GetLiderID(id); //Retorna el id del líder el proyecto actual para ponerlo como default en el dropdown if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } Project project = db.Project.Find(id); if (project == null) { return(HttpNotFound()); } ViewBag.idClientFK = new SelectList(db.Client, "idClientPK", "clientName", project.idClientFK); ViewBag.idEmployeeFKPK = new SelectList(availableEmployees, "idEmployeePK", "employeeName", lider); //dropdown con lider por defecto ViewBag.status = SelectListStatus(null); return(View(project)); }
// EF: Retorna una lista con los empleados disponibles y el lider actual de un proyecto específico. // REQ: Que exista el proyecto // MOD: NA public List <Employee> AvailableEmployeesAndLider(int?id) { var availableEmployees = db.Employee.Where(m => m.availability == 0 && m.developerFlag == 1); if (availableEmployees == null) { return(null); } var list = availableEmployees.ToList(); var WorksInController = new WorksInsController(); var lider = WorksInController.GetLiderID(id); var liderEmployee = db.Employee.Where(m => m.idEmployeePK == lider); if (liderEmployee.ToList().Count() <= 0) { } else { list.Add(liderEmployee.ToList().First()); } return(list); }