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));
        }
        public ActionResult Crear(ProyectosModelo model)
        {
            if (ModelState.IsValid)
            {
                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      = "Por iniciar";
                proyecto.duracion    = proyecto.fechaFinal.Subtract(proyecto.fechaInicio).Days;
                baseDatos.Proyectos.Add(proyecto);
                if ((model.equipo != null) && (model.equipo.Count() > 0))
                {
                    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 Creado", "El proyecto " + model.nombre + " se ha creado correctamente.", ToastType.Success);
                return(RedirectToAction("Crear", "Proyectos"));
            }
            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;
            return(View(model));
        }