public JsonResult FinExamen(int id, PreguntaExamen[] respuestas) { var userId = ((ClaimsIdentity)User.Identity).FindFirst("UserId").Value; int aciertos = 0; int totales = respuestas.Length; List <RespuestaIncorrecta> respuestasIncorrectas = new List <RespuestaIncorrecta>(); foreach (var pregunta in respuestas) { bool acertada = false; string enunciado = ""; string respuestaCorrecta = ""; string respuestaSeleccionada = ""; if (pregunta.tipo == "Tests") { Test test = db.Tests.Find(pregunta.id); if (pregunta.respuesta != null && test.RespuestaCorrecta.ToString() == pregunta.respuesta) { aciertos++; acertada = true; } else { enunciado = test.Enunciado; respuestaCorrecta = ObtenerRespuestaTest(test, test.RespuestaCorrecta); respuestaSeleccionada = ObtenerRespuestaTest(test, Convert.ToInt32(pregunta.respuesta)); } } if (pregunta.tipo == "FillTheGaps") { if (pregunta.respuesta != null) { pregunta.respuesta = pregunta.respuesta.Replace(',', '#'); } FillTheGap fillTheGap = db.FillTheGaps.Find(pregunta.id); if (pregunta.respuesta != null && fillTheGap.Respuestas.ToLower() == pregunta.respuesta.ToLower()) { aciertos++; acertada = true; } else { enunciado = fillTheGap.Enunciado; respuestaCorrecta = fillTheGap.Respuestas.Replace('#', ' '); if (pregunta.respuesta != null) { respuestaSeleccionada = pregunta.respuesta.Replace('#', ' '); } } } if (pregunta.tipo == "TrueFalses") { TrueFalse TrueFalse = db.TrueFalses.Find(pregunta.id); if (pregunta.respuesta != null && TrueFalse.RespuestaCorrecta.ToString() == pregunta.respuesta) { aciertos++; acertada = true; } else { enunciado = TrueFalse.Enunciado; respuestaCorrecta = TrueFalse.RespuestaCorrecta.ToString(); respuestaSeleccionada = pregunta.respuesta; } } if (pregunta.tipo == "AudioSentenceExercises") { if (pregunta.respuesta != null) { pregunta.respuesta = pregunta.respuesta.Replace(',', '#'); } AudioSentenceExercise audioSentence = db.AudioSentenceExercises.Find(pregunta.id); if (pregunta.respuesta != null && audioSentence.Respuestas.ToLower() == pregunta.respuesta.ToLower()) { aciertos++; acertada = true; } else { enunciado = audioSentence.Enunciado; respuestaCorrecta = audioSentence.Respuestas.Replace('#', ' '); if (pregunta.respuesta != null) { respuestaSeleccionada = pregunta.respuesta.Replace('#', ' '); } } } if (!acertada) { RespuestaIncorrecta respuestaInc = new RespuestaIncorrecta(); respuestaInc.Pregunta = enunciado; respuestaInc.RespuestaCorrecta = respuestaCorrecta; respuestaInc.RespuestaSeleccionada = respuestaSeleccionada; respuestaInc.Tipo = pregunta.tipo; respuestaInc.PreguntaId = pregunta.id; respuestasIncorrectas.Add(respuestaInc); } } bool _aprobado = (aciertos >= 28); FinExamenTest resultado = new Models.FinExamenTest(); resultado.Correctas = aciertos; resultado.Aprobado = _aprobado; resultado.Porcentaje = (aciertos * 100 / totales); resultado.IdSiguienteLeccion = 0; resultado.SiguienteLeccion = ""; SubTema _subtemaActual = SubTemaDataAccess.ObtenerSubTemas(db).FirstOrDefault(s => s.SubTemaId == id); SubTema _siguienteTema = SubTemaDataAccess.ObtenerSubTemas(db).Where(s => s.TemaId == _subtemaActual.TemaId && s.Orden > _subtemaActual.Orden).OrderBy(s => s.Orden).FirstOrDefault(); resultado.UltimoExamen = true; if (_siguienteTema != null) { resultado.UltimoExamen = false; if (_aprobado) { resultado.IdSiguienteLeccion = _siguienteTema.SubTemaId; resultado.SiguienteLeccion = _siguienteTema.Descripcion; var BloquearSubtemas = ((ClaimsIdentity)User.Identity).FindFirst("BloquearSubtemas").Value; bool anyadir = true; if (Convert.ToBoolean(BloquearSubtemas)) { var listaSubtemasAcceso = db.SubTemaAccesoUsuarios.Where(sau => sau.AlumnoId == userId).Select(sau => sau.SubTemaId).ToList(); if (!listaSubtemasAcceso.Contains(_siguienteTema.SubTemaId)) { anyadir = false; } } if (anyadir) { SubTemaDesbloqueado _desbloqueado = new SubTemaDesbloqueado { AlumnoId = userId, FechaDesbloqueo = DateTime.Now, SubTemaId = _siguienteTema.SubTemaId }; db.SubTemaDesbloqueados.Add(_desbloqueado); db.SaveChanges(); } } } var NombreUsuario = ((ClaimsIdentity)User.Identity).FindFirst("NombreUsuario").Value; Examen _examen = new Examen { Aciertos = aciertos, AlumnoId = userId, NombreAlumno = NombreUsuario, Aprobado = _aprobado, SubTemaId = id, Fallos = totales - aciertos, FechaExamen = DateTime.Now, Total = totales }; _examen.RespuestasIncorrectas = respuestasIncorrectas; db.Examenes.Add(_examen); db.SaveChanges(); return(Json(resultado, JsonRequestBehavior.AllowGet)); }
public ActionResult Edit(UsuarioEditViewModel viewModel) { if (ModelState.IsValid) { AuthRepository gestorUsuarios = new AuthRepository(); ApplicationUser applicationUser = gestorUsuarios.FindById(viewModel.Usuario.Id); applicationUser.Nombre = viewModel.Usuario.Nombre; applicationUser.Apellido1 = viewModel.Usuario.Apellido1; applicationUser.Apellido2 = viewModel.Usuario.Apellido2; applicationUser.Email = viewModel.Usuario.Email; applicationUser.UserName = viewModel.Usuario.Email; applicationUser.GrupoUsuarioId = viewModel.Usuario.GrupoUsuarioId; applicationUser.PuntosActual = viewModel.Usuario.PuntosActual; applicationUser.PuntosTotal = viewModel.Usuario.PuntosTotal; applicationUser.BloquearSubtemas = viewModel.Usuario.BloquearSubtemas; applicationUser.ClienteId = viewModel.Usuario.ClienteId; var Accesos = db.SubTemaAccesoUsuarios.Where(sau => sau.AlumnoId == applicationUser.Id).ToList(); db.SubTemaAccesoUsuarios.RemoveRange(Accesos); db.SaveChanges(); 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 userResult = gestorUsuarios.Update(applicationUser); if (userResult.Succeeded) { if (!string.IsNullOrWhiteSpace(viewModel.Password)) { gestorUsuarios.UpdatePassword(viewModel.Usuario.Id, viewModel.Password); } return(RedirectToAction("Index")); } } viewModel.InicializarDesplegables(); return(View(viewModel)); }
public JsonResult FinExamenFillTheGap(int id, int aciertos, int errores, int totales, RespuestaIncorrectaFillTheGapExamen[] respuestasIncorrectas) { var userId = ((ClaimsIdentity)User.Identity).FindFirst("UserId").Value; FillTheGap _fillTheGap = db.FillTheGaps.Find(id); bool _aprobado = (aciertos >= 28); FinExamenFillTheGap resultado = new FinExamenFillTheGap(); resultado.Correctas = aciertos; resultado.Aprobado = _aprobado; resultado.Porcentaje = (aciertos * 100 / totales); resultado.IdSiguienteLeccion = 0; resultado.SiguienteLeccion = ""; SubTema _tema = SubTemaDataAccess.ObtenerSubTemas(db).Where(s => s.SubTemaId == _fillTheGap.SubTemaId).FirstOrDefault(); SubTema _siguienteTema = SubTemaDataAccess.ObtenerSubTemas(db).Where(s => s.TemaId == _tema.TemaId && s.Orden > _tema.Orden).OrderBy(s => s.Orden).FirstOrDefault(); resultado.UltimoExamen = true; if (_siguienteTema != null) { resultado.UltimoExamen = false; if (_aprobado) { resultado.IdSiguienteLeccion = _siguienteTema.SubTemaId; resultado.SiguienteLeccion = _siguienteTema.Descripcion; var BloquearSubtemas = ((ClaimsIdentity)User.Identity).FindFirst("BloquearSubtemas").Value; bool anyadir = true; if (Convert.ToBoolean(BloquearSubtemas)) { var listaSubtemasAcceso = db.SubTemaAccesoUsuarios.Where(sau => sau.AlumnoId == userId).Select(sau => sau.SubTemaId).ToList(); if (!listaSubtemasAcceso.Contains(_siguienteTema.SubTemaId)) { anyadir = false; } } if (anyadir) { SubTemaDesbloqueado _desbloqueado = new SubTemaDesbloqueado { AlumnoId = userId, FechaDesbloqueo = DateTime.Now, SubTemaId = _siguienteTema.SubTemaId }; db.SubTemaDesbloqueados.Add(_desbloqueado); db.SaveChanges(); } } } var NombreUsuario = ((ClaimsIdentity)User.Identity).FindFirst("NombreUsuario").Value; Examen _examen = new Examen { Aciertos = aciertos, AlumnoId = userId, NombreAlumno = NombreUsuario, Aprobado = _aprobado, Fallos = errores, FechaExamen = DateTime.Now, Total = totales }; List <RespuestaIncorrecta> respuestas = new List <RespuestaIncorrecta>(); foreach (RespuestaIncorrectaFillTheGapExamen respuestaIncorrecta in respuestasIncorrectas) { FillTheGap fillTheGap = db.FillTheGaps.Find(respuestaIncorrecta.id); RespuestaIncorrecta respuestaInc = new RespuestaIncorrecta(); respuestaInc.Pregunta = fillTheGap.Enunciado; respuestaInc.RespuestaCorrecta = fillTheGap.Respuestas.Replace('#', ' '); respuestaInc.RespuestaSeleccionada = respuestaIncorrecta.respuesta.Replace('#', ' '); respuestas.Add(respuestaInc); } _examen.RespuestasIncorrectas = respuestas; db.Examenes.Add(_examen); db.SaveChanges(); return(Json(resultado, JsonRequestBehavior.AllowGet)); }
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)); }