/// <summary>
        /// Devuelve los detalles y permite un proyecto.
        /// </summary>
        /// <returns>Pagina de detalles</returns>
        // GET: Detalles
        public ActionResult Detalles(string id)
        {
            if (!revisarPermisos("Consultar Detalles de Proyectos"))
            {
                //Despliega mensaje en caso de no poder modificar un proyecto
                this.AddToastMessage("Acceso Denegado", "No tienes permiso para ver detalles de proyectos!", ToastType.Warning);
                return(RedirectToAction("Index", "Home"));
            }
            if (String.IsNullOrEmpty(id))
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            //cargar los atributos al modelo
            ModificarProyectoModel model = new ModificarProyectoModel();
            var proyecto = baseDatos.Proyectos.Find(id);

            model.cliente     = baseDatos.Usuarios.Find(proyecto.cliente);
            model.lider       = baseDatos.Usuarios.Find(proyecto.lider);
            model.descripcion = proyecto.descripcion;
            model.fechaInicio = (proyecto.fechaInicio).ToString("MM/dd/yyyy");
            model.fechaFinal  = (proyecto.fechaFinal).ToString("MM/dd/yyyy");
            model.nombre      = proyecto.nombre;
            model.estado      = proyecto.estado;
            var equipo = proyecto.Proyecto_Equipo.ToList();

            model.equipo = new List <string>();
            foreach (var des in equipo)
            {
                model.equipo.Add(des.usuario);
            }

            //llenar las listas para el combobox
            List <Usuario> listaDesarrolladores = new List <Usuario>();
            List <Usuario> listaClientes        = new List <Usuario>();
            string         clienteRol           = context.Roles.Where(m => m.Name == "Cliente").First().Id;
            string         desarrolladorRol     = context.Roles.Where(m => m.Name == "Desarrollador").First().Id;

            foreach (var user in context.Users.ToArray())
            {
                if (user.Roles.First().RoleId.Equals(clienteRol))
                {
                    listaClientes.Add(baseDatos.Usuarios.Where(m => m.id == user.Id).First());
                }
                else
                {
                    if (user.Roles.First().RoleId.Equals(desarrolladorRol))
                    {
                        listaDesarrolladores.Add(baseDatos.Usuarios.Where(m => m.id == user.Id).First());
                    }
                }
            }
            //model.eliminarPermitido = (revisarPermisos("Eliminar Proyectos") && (model.estado == "Por iniciar") && (baseDatos.Requerimientos.Where(m => m.proyecto == id).Count() == 0) && (baseDatos.Sprints.Where(m => m.proyecto == id).Count() == 0) && (baseDatos.Modulos.Where(m => m.proyecto == id).Count() == 0));
            model.eliminarPermitido     = revisarPermisos("Eliminar Proyectos");
            model.modificarProyecto     = revisarPermisos("Modificar Proyectos");
            ViewBag.Desarrolladores     = new SelectList(listaDesarrolladores, "cedula", "nombre");
            ViewBag.Clientes            = new SelectList(listaClientes, "cedula", "nombre");
            ViewBag.DesarrolladoresDisp = listaDesarrolladores;
            ViewBag.Estados             = new SelectList(baseDatos.Estado_Proyecto.ToList(), "nombre", "nombre");
            return(View(model));
        }
        public ActionResult Borrar(ModificarProyectoModel model)
        {
            var proyecto = baseDatos.Proyectos.Find(model.nombre);

            foreach (var userProyecto in proyecto.Proyecto_Equipo.ToList())
            {
                baseDatos.Entry(userProyecto).State = System.Data.Entity.EntityState.Deleted;
            }

            baseDatos.Entry(proyecto).State = System.Data.Entity.EntityState.Deleted;
            baseDatos.SaveChanges();

            this.AddToastMessage("Proyecto Borrado", "El proyecto " + proyecto.nombre + " se ha borrado correctamente.", ToastType.Success);
            return(RedirectToAction("Index", "Proyectos"));
        }
        public ActionResult Detalles(ModificarProyectoModel model)
        {
            if (ModelState.IsValid)
            {
                // cargar atributos del modelo
                var proyecto = new Proyecto();
                proyecto.cliente                = model.cliente.cedula;
                proyecto.lider                  = model.lider.cedula;
                proyecto.fechaInicio            = DateTime.ParseExact(model.fechaInicio, "MM/dd/yyyy", CultureInfo.InvariantCulture);
                proyecto.fechaFinal             = DateTime.ParseExact(model.fechaFinal, "MM/dd/yyyy", CultureInfo.InvariantCulture);
                proyecto.descripcion            = model.descripcion;
                proyecto.nombre                 = model.nombre;
                proyecto.estado                 = model.estado;
                proyecto.duracion               = (proyecto.fechaFinal).Subtract(proyecto.fechaInicio).Days;
                baseDatos.Entry(proyecto).State = System.Data.Entity.EntityState.Modified;

                var equipo_viejo = baseDatos.Proyecto_Equipo.Where(m => m.proyecto == model.nombre).ToList();
                // eliminar las entradas del equipo viejo
                foreach (var usuario in equipo_viejo)
                {
                    baseDatos.Entry(usuario).State = System.Data.Entity.EntityState.Deleted;
                }

                // crear las entradas para el equipo nuevo
                if (model.equipo != null)
                {
                    foreach (var desarrollador in model.equipo)
                    {
                        var proyectoDesarrollador = new Proyecto_Equipo();
                        proyectoDesarrollador.usuario  = desarrollador;
                        proyectoDesarrollador.proyecto = proyecto.nombre;
                        baseDatos.Proyecto_Equipo.Add(proyectoDesarrollador);
                    }

                    var checkLider = model.equipo.Where(m => m == proyecto.lider);
                    if (checkLider.Count() == 0)
                    {
                        var proyectoDesarrollador = new Proyecto_Equipo();
                        proyectoDesarrollador.usuario  = proyecto.lider;
                        proyectoDesarrollador.proyecto = proyecto.nombre;
                        baseDatos.Proyecto_Equipo.Add(proyectoDesarrollador);
                    }
                }
                else
                {
                    var proyectoDesarrollador = new Proyecto_Equipo();
                    proyectoDesarrollador.usuario  = proyecto.lider;
                    proyectoDesarrollador.proyecto = proyecto.nombre;
                    baseDatos.Proyecto_Equipo.Add(proyectoDesarrollador);
                }

                baseDatos.SaveChanges();
                this.AddToastMessage("Proyecto Modificado", "El proyecto " + model.nombre + " se ha modificado correctamente.", ToastType.Success);
                return(RedirectToAction("Detalles", "Proyectos", new { id = proyecto.nombre }));
            }

            // si el modelo no es valido volver a cargar las listas:
            List <Usuario> listaDesarrolladores = new List <Usuario>();
            List <Usuario> listaClientes        = new List <Usuario>();
            string         clienteRol           = context.Roles.Where(m => m.Name == "Cliente").First().Id;
            string         desarrolladorRol     = context.Roles.Where(m => m.Name == "Desarrollador").First().Id;

            foreach (var user in context.Users.ToArray())
            {
                if (user.Roles.First().RoleId.Equals(clienteRol))
                {
                    listaClientes.Add(baseDatos.Usuarios.Where(m => m.id == user.Id).First());
                }
                else
                {
                    if (user.Roles.First().RoleId.Equals(desarrolladorRol))
                    {
                        listaDesarrolladores.Add(baseDatos.Usuarios.Where(m => m.id == user.Id).First());
                    }
                }
            }
            ViewBag.Desarrolladores     = new SelectList(listaDesarrolladores, "cedula", "nombre");
            ViewBag.Clientes            = new SelectList(listaClientes, "cedula", "nombre");
            ViewBag.DesarrolladoresDisp = listaDesarrolladores;
            ViewBag.Estados             = new SelectList(baseDatos.Estado_Proyecto.ToList(), "nombre", "nombre");
            return(View(model));
        }