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 JsonResult FinExamenTest(int id, int aciertos, int errores, int totales, RespuestaIncorrectaTestExamen[] respuestasIncorrectas) { var userId = ((ClaimsIdentity)User.Identity).FindFirst("UserId").Value; Test _test = db.Tests.Find(id); 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 _tema = SubTemaDataAccess.ObtenerSubTemas(db).Where(s => s.SubTemaId == _test.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 (RespuestaIncorrectaTestExamen respuestaIncorrecta in respuestasIncorrectas) { Test test = db.Tests.Find(respuestaIncorrecta.id); RespuestaIncorrecta respuestaInc = new RespuestaIncorrecta(); respuestaInc.Pregunta = test.Enunciado; respuestaInc.RespuestaCorrecta = ObtenerRespuestaTest(test, test.RespuestaCorrecta); respuestaInc.RespuestaSeleccionada = ObtenerRespuestaTest(test, respuestaIncorrecta.respuesta); respuestas.Add(respuestaInc); } _examen.RespuestasIncorrectas = respuestas; db.Examenes.Add(_examen); db.SaveChanges(); return(Json(resultado, JsonRequestBehavior.AllowGet)); }