//Devuelve un objeto estado con información extendida public IEnumerable <SectionInfoDto> GetSectionsInfoFromEval(int idEvaluacion) { //Recoge las respuestas de la evaluación List <SectionInfoDto> ListadoSectionInformacion = new List <SectionInfoDto>(); var Respuestas = _context.Respuestas. Include(r => r.PreguntaEntity). ThenInclude(rp => rp.AsignacionEntity). ThenInclude(rpa => rpa.SectionEntity). Where(r => r.EvaluacionId == idEvaluacion).ToList(); //Saca las en que secciones estuvo en ese momento var SectionsUtilizadas = Respuestas.Select(r => r.PreguntaEntity.AsignacionEntity.SectionEntity).Distinct().ToList(); //Rellena los datos y los añade a la lista para cada sección foreach (var section in SectionsUtilizadas) { SectionInfoDto SectionAdd = new SectionInfoDto(); SectionAdd.Id = section.Id; SectionAdd.Nombre = section.Nombre; SectionAdd.Preguntas = Respuestas.Where(r => r.PreguntaEntity.AsignacionEntity.SectionEntity.Id == section.Id).Count(); SectionAdd.Respuestas = Respuestas.Where(r => r.Estado && r.PreguntaEntity.AsignacionEntity.SectionEntity.Id == section.Id).Count(); ListadoSectionInformacion.Add(SectionAdd); } return(ListadoSectionInformacion); }
public ActionResult PutSectionInfo(string section, [ModelBinder(typeof(JsonNetModelBinder))] SectionInfoDto info) { if (info == null || info.IsEmpty) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } try { _service.AddOrUpdate(new SectionDto { Abbreviation = section, SectionInfo = info }); } catch (Exception ex) { _logger.Error(ex); return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } return(new HttpStatusCodeResult(HttpStatusCode.OK)); }
//Metodo encargado de obtener las repsuestas dadas en la seccion y calcular el progreso actual de esta public SectionInfoDto CalculateSectionInfoProgress(SectionInfoDto sectionInfo, int evaluationId) { List <RespuestaEntity> questionsAnswered; List <int> enablingQuestiontsSi; //Respuestas de las preguntas contenstadas de la seccion questionsAnswered = (from r in _context.Respuestas join p in _context.Preguntas on r.PreguntaId equals p.Id join a in _context.Asignaciones on p.AsignacionId equals a.Id where r.EvaluacionId == evaluationId && a.SectionId == sectionInfo.Id && r.Estado != 0 select r) .ToList() ; //Preguntas habilitantes a la que se ha respondido SI enablingQuestiontsSi = questionsAnswered.Where(r => r.Estado == 1 && r.PreguntaEntity.EsHabilitante).Select(p => p.PreguntaEntity.Id).ToList(); //Preguntas que NO dependen de una habilitante O cuya habilitante de la que dependan haya sido respondia con un SI sectionInfo.Preguntas = (from p in _context.Preguntas join r in _context.Respuestas on p.Id equals r.PreguntaId join a in _context.Asignaciones on p.AsignacionId equals a.Id where r.EvaluacionId == evaluationId && a.SectionId == sectionInfo.Id && (enablingQuestiontsSi.Contains(p.PreguntaHabilitanteId.Value) || p.PreguntaHabilitanteId == null) select p.Id).Count(); //Se establecen los valores del total de respuestas contestadas y del progreso sectionInfo.Contestadas = questionsAnswered.Count(); sectionInfo.Progreso = Math.Round(((double)sectionInfo.Contestadas / sectionInfo.Preguntas) * 100, 1); return(sectionInfo); }
//Devuelve un objeto estado con información extendida public IEnumerable <SectionInfoDto> GetSectionsInfoFromEval(int idEvaluacion) { //Recoge las respuestas de la evaluación List <SectionInfoDto> ListadoSectionInformacion = new List <SectionInfoDto>(); var Respuestas = _context.Respuestas. Include(r => r.PreguntaEntity). ThenInclude(rp => rp.AsignacionEntity). ThenInclude(rpa => rpa.SectionEntity). Where(r => r.EvaluacionId == idEvaluacion).ToList(); //Saca las en que secciones estuvo en ese momento var SectionsUtilizadas = Respuestas.Select(r => r.PreguntaEntity.AsignacionEntity.SectionEntity).Distinct().ToList(); //Rellena los datos y los añade a la lista para cada sección foreach (var section in SectionsUtilizadas) { SectionInfoDto SectionAdd = new SectionInfoDto { Id = section.Id, Nombre = section.Nombre, Preguntas = Respuestas.Where(r => r.PreguntaEntity.AsignacionEntity.SectionEntity.Id == section.Id).Count(), }; var notasSec = _context.NotasSections.Where(r => r.SectionId == section.Id && r.EvaluacionId == idEvaluacion).FirstOrDefault(); if (notasSec == null) { notasSec = new NotasSectionsEntity { EvaluacionEntity = _context.Evaluaciones.Where(s => s.Id == idEvaluacion).FirstOrDefault(), SectionEntity = _context.Sections.Where(s => s.Id == section.Id).FirstOrDefault() }; _context.NotasSections.Add(notasSec); } SectionAdd.Notas = notasSec.Notas; //Para calcular el progreso var listaAsignaciones = _context.Asignaciones.Where(r => r.SectionId == section.Id).ToList(); int contestadas = 0; foreach (AsignacionEntity asig in listaAsignaciones) { var respuestasAsig = Respuestas.Where(p => p.PreguntaEntity.AsignacionEntity.Id == asig.Id).ToList(); //Para ver si la primera es de las que habilitan a las demás o no //y si está contestada a NO (para contar las demás como contestadas bool flag = false; if (respuestasAsig[0].PreguntaEntity.Correcta == null && respuestasAsig[0].Estado == 2) { flag = true; } foreach (RespuestaEntity resp in respuestasAsig) { if (flag) { contestadas++; } else if (resp.Estado != 0) { contestadas++; } } } SectionAdd.Contestadas = contestadas; SectionAdd.Progreso = Math.Round(((double)SectionAdd.Contestadas / SectionAdd.Preguntas) * 100, 1); var listaRespuestas = Respuestas.Where(r => r.PreguntaEntity.AsignacionEntity.SectionEntity.Id == section.Id).ToList(); double suma = 0; double puntosCorrectos = 0; foreach (var resp in listaRespuestas) { if (resp.PreguntaEntity.Correcta != null) { var maxPuntos = Respuestas.Where(r => r.PreguntaEntity.Correcta != null && r.PreguntaEntity.AsignacionId == resp.PreguntaEntity.AsignacionId).Count(); var puntos = (double)resp.PreguntaEntity.AsignacionEntity.Peso / maxPuntos; puntosCorrectos += puntos; if (resp.Estado == 1 && resp.PreguntaEntity.Correcta.Equals("Si")) { suma += puntos; } else if (resp.Estado == 2 && resp.PreguntaEntity.Correcta.Equals("No")) { suma += puntos; } } } SectionAdd.RespuestasCorrectas = Math.Round(100 * suma / puntosCorrectos, 1); ListadoSectionInformacion.Add(SectionAdd); } return(ListadoSectionInformacion); }
public IEnumerable <SectionInfoDto> GetSectionsInfoFromEvalNew(int idEvaluacion, int assessmentId) { //Recoge las respuestas de la evaluación List <SectionInfoDto> ListadoSectionInformacion = new List <SectionInfoDto>(); var Respuestas = _context.Respuestas. Include(r => r.PreguntaEntity). ThenInclude(rp => rp.AsignacionEntity). ThenInclude(rpa => rpa.SectionEntity). Where(r => r.EvaluacionId == idEvaluacion && r.PreguntaEntity.AsignacionEntity.SectionEntity.AssessmentId == assessmentId).ToList(); //Saca las en que secciones estuvo en ese momento var SectionsUtilizadas = Respuestas.Select(r => r.PreguntaEntity.AsignacionEntity.SectionEntity).Distinct().ToList(); //Rellena los datos y los añade a la lista para cada sección foreach (var section in SectionsUtilizadas) { SectionInfoDto SectionAdd = new SectionInfoDto { Id = section.Id, Nombre = section.Nombre, Preguntas = Respuestas.Where(r => r.PreguntaEntity.AsignacionEntity.SectionEntity.Id == section.Id).Count(), }; var notasSec = _context.NotasSections.Where(r => r.SectionId == section.Id && r.EvaluacionId == idEvaluacion).FirstOrDefault(); if (notasSec == null) { notasSec = new NotasSectionsEntity { EvaluacionEntity = _context.Evaluaciones.Where(s => s.Id == idEvaluacion).FirstOrDefault(), SectionEntity = _context.Sections.Where(s => s.Id == section.Id).FirstOrDefault() }; _context.NotasSections.Add(notasSec); } SectionAdd.Notas = notasSec.Notas; //Para calcular el progreso SectionAdd = this.CalculateSectionInfoProgress(SectionAdd, idEvaluacion); var listaRespuestas = Respuestas.Where(r => r.PreguntaEntity.AsignacionEntity.SectionEntity.Id == section.Id).ToList(); double suma = 0; double puntosCorrectos = 0; foreach (var resp in listaRespuestas) { if (resp.PreguntaEntity.Correcta != null) { var maxPuntos = Respuestas.Where(r => r.PreguntaEntity.Correcta != null && r.PreguntaEntity.AsignacionId == resp.PreguntaEntity.AsignacionId).Count(); var puntos = (double)resp.PreguntaEntity.AsignacionEntity.Peso / maxPuntos; puntosCorrectos += puntos; if (resp.Estado == 1 && resp.PreguntaEntity.Correcta.Equals("Si")) { suma += puntos; } else if (resp.Estado == 2 && resp.PreguntaEntity.Correcta.Equals("No")) { suma += puntos; } } } SectionAdd.RespuestasCorrectas = Math.Round(100 * suma / puntosCorrectos, 1); ListadoSectionInformacion.Add(SectionAdd); } return(ListadoSectionInformacion.OrderBy(x => x.Id)); }