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/Details/5
        //EFE: Detalles del proyecto seleccionado
        public ActionResult Details(int?id)
        {
            var WorksInController = new WorksInsController();           //controlador para obtener el líder del proyecto
            var lider             = WorksInController.GetLiderName(id); //método que botiene líder

            ViewBag.idLiderFK = lider;                                  //viewbag que es llamado para desplegar el lider obtenido
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Project project = db.Project.Find(id);

            if (project == null)
            {
                return(HttpNotFound());
            }
            return(View(project));
        }
        // GET: Projects/Delete/5
        //EFE: Elimina el proyecto seleccionado
        public ActionResult Delete(int?id)
        {
            var WorksInController = new WorksInsController();
            var lider             = WorksInController.GetLiderName(id);

            ViewBag.idLiderFK = lider;
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Project project = db.Project.Find(id);

            if (project == null)
            {
                return(HttpNotFound());
            }
            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);
        }