コード例 #1
0
        //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);
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        //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);
        }
コード例 #4
0
        //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);
        }
コード例 #5
0
        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));
        }