// GET: Admin/Usuario/Create public ActionResult Create() { UsuarioCreateViewModel viewModel = new UsuarioCreateViewModel(); viewModel.InicializarDesplegables(); return(View(viewModel)); }
public ActionResult Create(UsuarioCreateViewModel viewModel) { if (ModelState.IsValid) { AuthRepository gestorUsuarios = new AuthRepository(); viewModel.Usuario.UserName = viewModel.Usuario.Email; viewModel.Usuario.PuntosTotal = 0; viewModel.Usuario.PuntosActual = 0; var correcto = true; if (User.IsInRole("AdministradorGrupo")) { var GrupoUsuarioId = Convert.ToInt32(((ClaimsIdentity)User.Identity).FindFirst("GrupoUsuario").Value); viewModel.Usuario.GrupoUsuarioId = GrupoUsuarioId; viewModel.Usuario.TipoUsuarioId = (int)TiposUsuariosId.Alumno; var grupo = db.GrupoUsuarios.Find(GrupoUsuarioId); if (grupo.NumeroMaximoUsuarios > 0) { var nUsuario = db.Users.Where(us => us.GrupoUsuarioId.HasValue).Count(us => us.GrupoUsuarioId.Value == viewModel.Usuario.GrupoUsuarioId); if (nUsuario >= grupo.NumeroMaximoUsuarios) { correcto = false; ModelState.AddModelError("Usuario.Email", "Ha sobrepasado el número máximo de usuarios del grupo"); } } } if (correcto) { var userResult = gestorUsuarios.Create(viewModel.Usuario, viewModel.Password); //Add User Admin to Role Admin if (userResult.Succeeded) { string oldPathAndName = "~/media/upload/avatar/sin-avatar.jpg"; string newPathAndName = "~/media/upload/avatar/" + viewModel.Usuario.Id + ".jpg"; System.IO.File.Copy(Server.MapPath(oldPathAndName), Server.MapPath(newPathAndName)); List <int> listaSubtemasAccesso = new List <int>(); if (viewModel.Usuario.BloquearSubtemas) { foreach (var acceso in viewModel.AccesoTemas) { foreach (var accesoSubtema in acceso.SubTemas) { if (accesoSubtema.Selected) { SubTemaAccesoUsuario subtemaAcceso = new SubTemaAccesoUsuario(); subtemaAcceso.AlumnoId = viewModel.Usuario.Id; subtemaAcceso.FechaAcceso = DateTime.Now; subtemaAcceso.SubTemaId = Convert.ToInt32(accesoSubtema.Value); db.SubTemaAccesoUsuarios.Add(subtemaAcceso); db.SaveChanges(); listaSubtemasAccesso.Add(subtemaAcceso.SubTemaId); } } } var subtemasAcceso = db.SubTemaAccesoUsuarios.Where(sa => sa.AlumnoId == viewModel.Usuario.Id).Select(sa => sa.SubTema).ToList(); var temas = subtemasAcceso.Select(su => su.TemaId); foreach (var temaId in temas) { var subtemaInicial = subtemasAcceso.Where(sa => sa.TemaId == temaId).OrderBy(su => su.Orden).FirstOrDefault(); if (subtemaInicial != null) { if (!db.SubTemaDesbloqueados.Any(sd => sd.SubTemaId == subtemaInicial.SubTemaId && sd.AlumnoId == viewModel.Usuario.Id)) { SubTemaDesbloqueado desbloqueado = new SubTemaDesbloqueado(); desbloqueado.AlumnoId = viewModel.Usuario.Id; desbloqueado.FechaDesbloqueo = DateTime.Now; desbloqueado.SubTemaId = subtemaInicial.SubTemaId; db.SubTemaDesbloqueados.Add(desbloqueado); db.SaveChanges(); } } } } List <int> temasCliente = db.ClienteTemas.Where(te => te.ClienteId == viewModel.Usuario.ClienteId).Select(te => te.TemaId).ToList(); List <SubTema> subtemasIniciales = db.SubTemas.Where(sub => temasCliente.Contains(sub.TemaId) && sub.Orden == 1).ToList(); foreach (SubTema subtema in subtemasIniciales) { bool anyadir = true; if (viewModel.Usuario.BloquearSubtemas) { if (!listaSubtemasAccesso.Contains(subtema.SubTemaId)) { anyadir = false; } } if (anyadir) { if (!db.SubTemaDesbloqueados.Any(sd => sd.SubTemaId == subtema.SubTemaId && sd.AlumnoId == viewModel.Usuario.Id)) { SubTemaDesbloqueado desbloqueado = new SubTemaDesbloqueado(); desbloqueado.AlumnoId = viewModel.Usuario.Id; desbloqueado.FechaDesbloqueo = DateTime.Now; desbloqueado.SubTemaId = subtema.SubTemaId; db.SubTemaDesbloqueados.Add(desbloqueado); db.SaveChanges(); } } } var result = gestorUsuarios.AddToRole(viewModel.Usuario.Id, "Alumno"); if (viewModel.Usuario.TipoUsuarioId == (int)TiposUsuariosId.AdministradorGrupo) { result = gestorUsuarios.AddToRole(viewModel.Usuario.Id, "AdministradorGrupo"); } if (result.Succeeded) { return(RedirectToAction("Index")); } else { ModelState.AddModelError("Usuario.Email", userResult.Errors.First()); } } else { ModelState.AddModelError("Usuario.Email", userResult.Errors.First()); } } } viewModel.InicializarDesplegables(); return(View(viewModel)); }