public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            proyectos proyectos = db.proyectos.Find(id);

            if (proyectos == null)
            {
                return(HttpNotFound());
            }
            ViewBag.cedulaClienteFK = new SelectList(db.clientes, "cedulaPK", "nombre", proyectos.cedulaClienteFK);
            ViewBag.hayLider        = false;
            /* Si ya hay líder asignado se envía booleano para deshabilitar edición de campo de líder */
            /* Se envía el nombre del líder para mostrarlo en el dropdownlist */
            empleados lider = new empleadosController().GetEmployee(new rolesController().getLiderId(id.Value));

            if (lider != null)
            {
                ViewBag.hayLider = true;
                ViewBag.lider    = lider.nombre;
            }
            ViewBag.cedulaLider = new SelectList(new empleadosController().GetFreeEmployees(), "cedulaPK", "nombre", proyectos.cedulaLider);
            return(View(proyectos));
        }
        //[Authorize(Roles = "Soporte, JefeDesarrollo,Lider")]
        //método para obtener los empleados asignados y disponibles
        public ActionResult DisponibilidadEmpleados()
        {
            //limpio los datos  para asegurarme que no hayan datos que no correspondan
            TempData["empDisponibles"] = null;
            TempData["empOcupados"]    = null;
            TempData["pryActual"]      = null;
            var user  = User.Identity.GetUserName(); //obteniendo la identidad del empleado
            var emple = new empleadosController().ExistEmail(user);


            /*si el usuario es empleado, mostrar de una vez su vista*/
            if (emple.Count() > 0)   //es empleado
            {
                var  cedula  = emple[0].cedulaPK;
                bool esLider = new rolesController().idLiderNow(cedula);
                if (esLider == true)                                                                                      //si es líder de algun proyecto puedo mostrar lo que corresponde a su proyecto, de lo contrario vista en blanco
                {
                    TempData["empDisponibles"] = new empleadosController().GetFreeEmployees();                            //empleados disponibles
                    var proy = new proyectosController().GetLiderProyectoActual(cedula);                                  //obtenego de cual proyecto soy lider
                    TempData["empOcupados"] = new empleadosController().GetEmployeeBusyProject(cedula, proy[0].codigoPK); //obtengo los empleados ocupados en mi proyecto
                    TempData.Keep();
                }
            }
            else
            {                                                                                           //es jefe de desarrollo/soporte , puedo mostrar todos los datos sin restricción
                TempData["empDisponibles"] = new empleadosController().GetFreeEmployees();              //obtengo los empleados libres
                TempData["empOcupados"]    = new empleadosController().GetEmployeeBusyProject(null, 0); //obtengo los empleados ocupados
                TempData.Keep();                                                                        //hago que conserve los datos
            }

            //regreso la vista
            return(View());
        }
        //EFE: trae los datos necesarios para equipos y llama el metodo para seleccionar el proyecto
        //REQ:
        //MOD: crea variables temporales para guardar los empleados libres, los proyectos y la lista de conocimientos
        public ActionResult Index()
        {
            var user  = User.Identity.GetUserName();
            var emple = new empleadosController().ExistEmail(user);


            if (emple.Count() > 0)   //es empleado
            {
                var cedula = emple[0].cedulaPK;
                List <proyectos> proyectos     = new proyectosController().GetLidetedProyects(cedula);
                List <string>    conocimientos = new conocimientosController().PassKnowledge();
                TempData["proyectos"]     = proyectos;
                TempData["conocimientos"] = conocimientos;
                TempData.Keep();
                return(RedirectToAction("SelectProject", "equipos"));
            }
            else
            {
                List <proyectos> proyectos     = new proyectosController().Pass();
                List <string>    conocimientos = new conocimientosController().PassKnowledge();
                TempData["proyectos"]     = proyectos;
                TempData["conocimientos"] = conocimientos;
                TempData.Keep();
                return(RedirectToAction("SelectProject", "equipos"));
            }
        }
        //Esta método es llamado para desplegar el dropdown de selección del proyecto al cual se le quiere consultar sus módulos
        public ActionResult Index()
        {
            var user  = User.Identity.GetUserName();
            var emple = new empleadosController().ExistEmail(user);
            var clien = new clientesController().ExistEmail(user);

            if (emple.Count() > 0)   //es empleado
            {
                //Se obtiene la cedula del empleado
                var cedula = emple[0].cedulaPK;
                //se buscan los proyectos donde participa el empleado con la cedula
                var proyectos = new proyectosController().ProyectsByEmployee(cedula);
                TempData["proyectos"] = proyectos;
                TempData.Keep();
                return(View());
            }
            else if (clien.Count() > 0) // es cliente
            {
                //Se obtiene la cedula del cliente
                var cedula = clien[0].cedulaPK;
                // buscamos un proyecto asignado al cliente pero ahora segun su cedula
                var proyectos = new proyectosController().ProyectsByClient(cedula);
                TempData["proyectos"] = proyectos;
                TempData.Keep();
                return(View());
            }
            else  //es jefe de desarrollo o soporte
            {
                List <proyectos> proyectos = new proyectosController().Pass();
                TempData["proyectos"] = proyectos;
                TempData.Keep();
                return(View());
            }
        }
        /*
         * EFE: verifica si el usuario es desarrollaro o jefe de desarrollo y le presenta los datos de los proyectos correspondientes
         * REQ: NA
         * MOD: busca el nombre del proyecto y lo agrega
         */
        public ActionResult TotalTimes()
        {
            TempData["usuarioEsJefe"] = null;
            TempData["proyectos"]     = null;
            var user  = User.Identity.GetUserName();
            var emple = new empleadosController().ExistEmail(user);

            /*si el usuario es empleado, mostrar de una vez su vista*/
            if (emple.Count() > 0)   //es empleado
            {
                //obteniendo la cedula del empleado
                var  cedula   = emple[0].cedulaPK;
                bool liderNow = new rolesController().idLiderNow(cedula);
                if (liderNow == true)
                {
                    TempData["proyectos"] = new requerimientosController().GetTotalTimes(cedula);
                    foreach (var item in (TempData["proyectos"] as IEnumerable <ProyectoIntegrador_mejorado.Models.ProyectTimesModel>))
                    {
                        var proyecto = new proyectosController().ProjectByCode(item.codigoProy);
                        if (proyecto.fechaFinal != null)
                        {
                            item.terminado = true;
                        }
                        else
                        {
                            item.terminado = false;
                        }
                        item.nombreProyecto = proyecto.nombre;
                    }
                    TempData.Keep();
                }
            }
            else   // es de soporte o el jefe de desarrollo
            {
                TempData["usuarioEsJefe"] = "si";
                TempData["proyectos"]     = new requerimientosController().GetTotalTimes(null);
                foreach (var item in (TempData["proyectos"] as IEnumerable <ProyectoIntegrador_mejorado.Models.ProyectTimesModel>))
                {
                    var proyecto = new proyectosController().ProjectByCode(item.codigoProy);
                    var liderId  = new rolesController().getLiderId(item.codigoProy);
                    var lider    = new empleadosController().GetEmployee(liderId);
                    if (proyecto.fechaFinal != null)
                    {
                        item.terminado = true;
                    }
                    else
                    {
                        item.terminado = false;
                    }
                    item.nombreProyecto = proyecto.nombre;
                    if (lider != null)
                    {
                        item.lider = lider.nombre + " " + lider.apellido1 + " " + lider.apellido2;
                    }
                }
                TempData.Keep();
            }
            return(View());
        }
        public ActionResult GetEmpList(int codigoProyecto)
        {
            List <empleados> employees = new empleadosController().GetEmployeeByProyect(codigoProyecto);

            ViewBag.Employees = new SelectList(employees, "cedulaPK", "nombre");

            return(PartialView("EmployeesPartial"));
        }
        /*
         * Efecto: Request GET de EmployeeHistory
         * Requiere: NA
         * Modifica: NA
         */
        public ActionResult EmployeeHistory()
        {
            List <empleados> employees = new empleadosController().Pass();

            TempData["employees"] = new SelectList(employees, "cedulaPK", "nombre");
            TempData.Keep();
            return(View());
        }
        /*
         * Efecto: Request GET de diferenciaEstimadaReal
         * Requiere: NA
         * Modifica: NA
         */
        public ActionResult diferenciaEstimadaReal()
        {
            List <empleados> empleados = new empleadosController().Pass();    //Lista de empleados para dropdown

            ViewBag.EmpleadosList = new SelectList(empleados, "cedulaPK", "nombre");
            TempData["empleados"] = new SelectList(empleados, "cedulaPK", "nombre");
            TempData.Keep();            // Para mantener los datos
            return(View());
        }
        //EFE: trae y presenta los datos correpondientes para un empleado en especifico
        //REQ: que el empleado seleccionado sea valido
        //MOD:
        public ActionResult Details(string cedula)
        {
            TempData.Keep();
            empleados em = new empleadosController().GetEmployee(cedula);

            TempData["empleado"] = em;
            TempData.Keep();
            return(View(em));
        }
        //EFE: redirige a la vista del reporte de estado de requerimientos para un desarrollador
        //REQ: NA
        //MOD: NA
        public ActionResult EmployeeRequirements()
        {
            TempData["requerimientos"] = null;
            TempData["empSelect"]      = null;
            TempData["proyecto"]       = null;

            var user  = User.Identity.GetUserName();
            var emple = new empleadosController().ExistEmail(user);

            if (emple.Count() > 0)
            {
                bool liderNow = new rolesController().idLiderNow(emple[0].cedulaPK);
                if (liderNow == true)
                {
                    /*si el usuario es empleado y lider, mostrar de una vez su vista*/
                    TempData["rol"] = "lider";
                    var actualProyect = new rolesController().ProyectoLiderNow(emple[0].cedulaPK);
                    TempData["proyecto"]       = actualProyect;
                    TempData["requerimientos"] = new requerimientosController().GetRequirementsByProyect(actualProyect.codigoPK);
                    foreach (var item in TempData["requerimientos"] as List <ProyectoIntegrador_mejorado.Models.requerimientos> )
                    {
                        var empleado = new empleadosController().GetEmployee(item.cedulaEmpleadoFK);
                        item.descripcion = empleado.nombre + " " + empleado.apellido1 + " " + empleado.apellido2;
                    }
                }
                else
                {
                    /*si el usuario es empleado y no lider, mostrar de una vez su vista*/
                    TempData["rol"] = "desarrollador";
                    var requirementList = new requerimientosController().GetRequirementsByEmployee(emple[0].cedulaPK);
                    if (requirementList != null)
                    {
                        var actualProyect = new proyectosController().getProjectName(requirementList[0].codigoProyectoFK);
                        TempData["proyecto"] = actualProyect;
                    }
                    TempData["requerimientos"] = requirementList;
                }
                TempData.Keep();
                return(View());
            }
            else
            {
                /*si es jefe de desarrollo o soporte*/
                TempData["rol"]       = "boss";
                TempData["empleados"] = new empleadosController().Pass();
                List <proyectos> proyectos = new proyectosController().Pass();
                TempData["proyectos"] = proyectos;
                TempData.Keep();
                return(View());
            }

            //return RedirectToAction("SelectReport", "reportes");
        }
        /*
         * Efecto: Request GET de requerimientosDesarrollador
         * Requiere: NA
         * Modifica: NA
         */
        public ActionResult requerimientosDesarrollador()
        {
            List <proyectos> proyectos = new proyectosController().Pass();
            List <empleados> empleados = new empleadosController().Pass();

            //ViewBag.proyectos = new SelectList(proyectos, "codigoPK", "nombre");
            //ViewBag.empleados = new SelectList(empleados, "cedulaPK", "nombre");
            TempData["proyectos"] = new SelectList(proyectos, "codigoPK", "nombre");
            TempData["empleados"] = new SelectList(empleados, "cedulaPK", "nombre");
            TempData.Keep();
            return(View());
        }
 public ActionResult EmployeeRequirements(empleados empleado)
 {
     TempData["liderDeProyecto"] = null;
     if (empleado.cedulaPK != null)
     {
         TempData["empSelect"]      = new empleadosController().GetEmployee(empleado.cedulaPK);
         TempData["requerimientos"] = new requerimientosController().GetRequirementsByEmployee(empleado.cedulaPK);
         TempData.Keep();
         return(View());
     }
     else
     {
         TempData.Keep();
         return(View());
     }
 }
        // GET: requerimientos
        //Esta método es llamado para desplegar el dropdown de selección del proyecto y módulo al cual se le quiere consultar sus requerimientos
        public ActionResult Index()
        {
            var user  = User.Identity.GetUserName();
            var emple = new empleadosController().ExistEmail(user);
            var clien = new clientesController().ExistEmail(user);

            if (emple.Count() > 0)   //es empleado
            {
                var cedula = emple[0].cedulaPK;
                //se buscan los proyectos donde participa el empleado con la cedula
                var proyectos = new proyectosController().ProyectsByEmployee(cedula);
                ViewBag.ProyectList   = new SelectList(proyectos, "codigoPK", "nombre");
                TempData["proyectos"] = proyectos;
                TempData.Keep();
                return(View());
            }
            else if (clien.Count() > 0) // es cliente
            {
                //Se obtiene la cedula del cliente
                var cedula = clien[0].cedulaPK;
                // buscamos un proyecto asignado al cliente pero ahora segun su cedula
                var proyectos = new proyectosController().ProyectsByClient(cedula);
                ViewBag.ProyectList   = new SelectList(proyectos, "codigoPK", "nombre");
                TempData["proyectos"] = proyectos;
                TempData.Keep();
                return(View());
            }
            else  //es jefe de desarrollo o soporte
            {
                List <proyectos> proyectos = new proyectosController().Pass();
                ViewBag.ProyectList   = new SelectList(proyectos, "codigoPK", "nombre");
                TempData["proyectos"] = proyectos;
                TempData.Keep();
                return(View());
            }



            /*
             *
             * List<proyectos> proyectos = new proyectosController().Pass(); //se comunica con el controlador de proyectos para que le la lista de proyectos
             * ViewBag.ProyectList = new SelectList(proyectos, "codigoPK", "nombre"); //contiene la lista de proyectos
             * TempData["proyectos"] = proyectos; //se almacena en esa variable de datos temporales el proyecto seleccionado
             * TempData.Keep();//se le pide mantener esos datos temporales
             * return View(); //se envía a la vista*/
        }
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            proyectos proyectos = db.proyectos.Find(id);

            if (proyectos == null)
            {
                return(HttpNotFound());
            }
            ViewBag.lider = "";
            /*Si el proyecto tiene líder se envía su nombre a la vista de detalles*/
            empleados lider = new empleadosController().GetEmployee(new rolesController().getLiderId(id.Value));

            if (lider != null)
            {
                ViewBag.lider = lider.nombre;
            }
            return(View(proyectos));
        }
        public ActionResult Index()
        {
            /*Para relacionar la persona loggeada con su respectiva instancia en la bd,
             * con esto sabemos a que Rol pertenece
             * y facilitamos el acceso correspondiente con los condicionales de abajo
             */
            var user  = User.Identity.GetUserName();
            var emple = new empleadosController().ExistEmail(user);
            var clien = new clientesController().ExistEmail(user);

            if (emple.Count() > 0)   //es empleado
            {
                //Se obtiene la cedula del empleado
                var cedula = emple[0].cedulaPK;
                //se buscan los proyectos donde participa el empleado con la cedula
                var proyectos = (from d in db.proyectos
                                 join f in db.roles
                                 on d.codigoPK equals f.codigoProyectoFK
                                 where f.cedulaFK == cedula
                                 select d).ToList();
                return(View(proyectos.ToList()));
            }
            else if (clien.Count() > 0) // es cliente
            {
                //Obtenemos al cliente segun el username dela bd clientes
                var existe = db.clientes.Where(w => w.correo == user);
                // buscamos un proyecto asignado al cliente pero ahora segun su cedula
                var proyectos = db.proyectos.Where(p => existe.Any(w => w.cedulaPK == p.cedulaClienteFK));
                //var proyectos = db.proyectos.Include(p => p.clientes).Where(p => p.cedulaClienteFK == clien[0].cedulaPK);
                //var proyectos = db.proyectos.Include(p => p.clientes);
                return(View(proyectos.ToList()));
            }
            else  //es jefe de desarrollo o soporte
            {
                var proyectos = db.proyectos.Include(p => p.clientes);
                return(View(proyectos.ToList()));
            }
        }
 public ActionResult EmployeeRequirements2(proyectos proyecto)
 {
     TempData["empSelect"] = null;
     if (proyecto.codigoPK != 0)
     {
         TempData["proyectoSeleccionado"] = proyecto;
         var lider = new rolesController().getLiderId(proyecto.codigoPK);
         TempData["liderDeProyecto"] = new empleadosController().GetEmployee(lider);
         TempData["requerimientos"]  = new requerimientosController().GetRequirementsByProyect(proyecto.codigoPK);
         foreach (var item in TempData["requerimientos"] as List <ProyectoIntegrador_mejorado.Models.requerimientos> )
         {
             var empleado = new empleadosController().GetEmployee(item.cedulaEmpleadoFK);
             item.descripcion = empleado.nombre + " " + empleado.apellido1 + " " + empleado.apellido2;
         }
         TempData.Keep();
         return(View());
     }
     else
     {
         TempData.Keep();
         return(RedirectToAction("EmployeeRequirements", "reportes"));
     }
 }
        //EFE: trae la lista de empleados filtrados por conocimiento y por proyecto y regresa la vista de los mismos
        //REQ: debe exitir al menos un proyecto
        //MOD: crea variables temporales para guardar la lista de empleados filtrados por conocimiento y por proyecto
        public ActionResult Lista(string conocimientoPK, string a)
        {
            bool ended = false;

            TempData["end"]  = "no";
            TempData["temp"] = conocimientoPK;
            if (conocimientoPK != "todos")
            {
                List <empleados> employeesList = new empleadosController().GetEmployeeByKnowledge(conocimientoPK);
                TempData["empleadosK"] = employeesList;
            }
            else
            {
                if (TempData["proyecto"] != null)
                {
                    ended = new proyectosController().Ended(int.Parse(TempData["proyecto"].ToString()));
                    if (ended == true)
                    {
                        TempData["end"] = "si";
                    }
                    List <empleados> employeesFree = new empleadosController().GetFreeEmployeesNotInProyect(int.Parse(TempData["proyecto"].ToString()));
                    TempData["empleados"] = employeesFree;

                    TempData.Keep();
                    return(View());
                }
                else
                {
                    ViewBag.know = "----------";
                    TempData.Keep();
                    return(RedirectToAction("Index", "equipos"));
                }
            }
            ViewBag.know = conocimientoPK;
            if (TempData["proyecto"] != null)
            {
                ended = new proyectosController().Ended(int.Parse(TempData["proyecto"].ToString()));
                if (ended == true)
                {
                    TempData["end"] = "si";
                }


                List <empleados> employeesFree = new empleadosController().GetFreeEmployeesNotInProyect(int.Parse(TempData["proyecto"].ToString()));
                TempData["empleados"] = employeesFree;

                List <empleados> employeesList2 = new empleadosController().GetEmployeeByProyect(int.Parse(TempData["proyecto"].ToString()));
                TempData["empleadosP"] = employeesList2;


                string    liderID = new rolesController().getLiderId(int.Parse(TempData["proyecto"].ToString()));
                empleados lider   = new empleadosController().GetEmployee(liderID);

                TempData["lider"] = lider;
                TempData.Keep();


                return(View());
            }
            else
            {
                TempData.Keep();
                return(RedirectToAction("Index", "equipos"));
            }
        }
        public ActionResult Index()
        {
            var user  = User.Identity.GetUserName();
            var emple = new empleadosController().ExistEmail(user);
            var clien = new clientesController().ExistEmail(user);

            if (emple.Count() > 0)   //es empleado, mostrar los reportes disponibles para los lideres
            {
                //obteniendo la cedula del empleado
                var cedula = emple[0].cedulaPK;

                List <StringModel> reportes = new List <StringModel>();
                reportes.Add(new StringModel {
                    Nombre = "Requerimientos de desarrollador"
                });
                reportes.Add(new StringModel {
                    Nombre = "Estado requerimientos de desarrollador"
                });
                reportes.Add(new StringModel {
                    Nombre = "Tiempos totales por proyecto"
                });
                reportes.Add(new StringModel {
                    Nombre = "Disponibilidad de desarrolladores"
                });
                TempData["reportes"] = reportes;
                TempData.Keep();


                // ajustar para mostrar solo los correpondientes
            }
            else if (clien.Count() > 0)     //es cliente, mostrar los reportes disponibles para los clientes
            {
                List <StringModel> reportes = new List <StringModel>();
                reportes.Add(new StringModel {
                    Nombre = "Requerimientos de desarrollador"
                });
                reportes.Add(new StringModel {
                    Nombre = "Disponibilidad de desarrolladores"
                });
                reportes.Add(new StringModel {
                    Nombre = "Estado y responsable de requerimientos de proyecto"
                });
                reportes.Add(new StringModel {
                    Nombre = "Cuenta de Requerimientos Finalizados y En Curso"
                });
                TempData["reportes"] = reportes;
                TempData.Keep();
            }
            else   // es de soporte o el jefe de desarrollo, desplegar todos los reportes
            {
                List <StringModel> reportes = new List <StringModel>();
                reportes.Add(new StringModel {
                    Nombre = "Requerimientos de desarrollador"
                });
                reportes.Add(new StringModel {
                    Nombre = "Información sobre conocimientos"
                });
                reportes.Add(new StringModel {
                    Nombre = "Disponibilidad de empleados entre fechas"
                });
                reportes.Add(new StringModel {
                    Nombre = "Estado requerimientos de desarrollador"
                });
                reportes.Add(new StringModel {
                    Nombre = "Tiempos totales por proyecto"
                });
                reportes.Add(new StringModel {
                    Nombre = "Disponibilidad de desarrolladores"
                });
                reportes.Add(new StringModel {
                    Nombre = "Historial de desarrollador"
                });
                reportes.Add(new StringModel {
                    Nombre = "Análisis de duraciones en requerimientos"
                });
                reportes.Add(new StringModel {
                    Nombre = "Diferencia entre fecha estimada y real"
                });
                TempData["reportes"] = reportes;
                TempData.Keep();
            }
            return(RedirectToAction("SelectReport", "reportes"));
        }
 public ActionResult requerimientosDesarrollador(FechasModel modelo)
 {
     TempData.Keep(); // Para mantener los datos
     TempData["req"] = new empleadosController().GetEmployeeByProyect(modelo.codigoProy);
     return(View());  // Regresar a la vista
 }