Esempio n. 1
0
        public AlunoConcursoEstatistica GetConcursoStatsAluno(int idExercicio, int idMatricula, bool anulada = false)
        {
            int[] tipoExercicio = new int[] { (int)Exercicio.tipoExercicio.CONCURSO, (int)Exercicio.tipoExercicio.MONTAPROVA };

            try
            {
                var questoes = _concursoRepository.GetQuestoesbyIdExercicio(idExercicio);


                var questoesFiltradas = questoes
                                        .Where(x => x.Anulada == false && x.AlternativaCorreta == true)
                                        .GroupBy(x => x.QuestaoId)
                                        .Select(x => new { QuestaoId = x.Key, AlternativasCorretas = x.Select(y => y.Alternativa).ToList() })
                                        .ToList();


                var respostasAluno = _concursoRepository.GetRespostabyIdExercicioIDMatricula(idExercicio, idMatricula, tipoExercicio);



                var respostasAlunoNaoAnuladas = (from ra in respostasAluno
                                                 join q in questoesFiltradas
                                                 on ra.QuestaoId equals q.QuestaoId
                                                 select new { QuestaoId = ra.QuestaoId, Alternativa = ra.Alternativa, ra.Ultimoregistro }
                                                 ).Distinct().ToList();

                var respostasAlunosemduplicada = (from c in respostasAlunoNaoAnuladas
                                                  group c by c.QuestaoId into grp
                                                  where grp.Count() > 1
                                                  select grp.Key
                                                  ).ToList();

                if (respostasAlunosemduplicada.Count > 0)
                {
                    var itemComDuplicata = respostasAlunoNaoAnuladas.Where(a => respostasAlunosemduplicada.Contains(a.QuestaoId)).OrderBy(b => b.Ultimoregistro).ToList();
                    if (itemComDuplicata.Count > 0)
                    {
                        foreach (var item in itemComDuplicata)
                        {
                            var indice = respostasAlunoNaoAnuladas.Where(a => a.QuestaoId == item.QuestaoId && a.Ultimoregistro > item.Ultimoregistro).ToList();
                            if (indice.Count > 0)
                            {
                                respostasAlunoNaoAnuladas.Remove(item);
                            }
                        }
                    }
                }

                var estatistica = new AlunoConcursoEstatistica();

                estatistica.TotalQuestoes = questoes.GroupBy(x => x.QuestaoId).Count();
                estatistica.NaoRealizadas = estatistica.TotalQuestoes - respostasAlunoNaoAnuladas.Select(a => a.QuestaoId).Distinct().Count();

                estatistica.Acertos = (from q in questoesFiltradas
                                       join r in respostasAlunoNaoAnuladas
                                       on q.QuestaoId equals r.QuestaoId
                                       where q.AlternativasCorretas.Contains(r.Alternativa)
                                       select q.QuestaoId
                                       ).Distinct().Count();

                estatistica.Erros = respostasAlunoNaoAnuladas.Count() - estatistica.Acertos;

                if (anulada && respostasAlunoNaoAnuladas.Count() > 0)
                {
                    var anuladas = estatistica.TotalQuestoes - questoesFiltradas.Count();
                    estatistica.NaoRealizadas -= anuladas;
                    estatistica.Acertos       += anuladas;
                }

                estatistica.Nota = estatistica.Acertos;

                return(estatistica);
            }
            catch
            {
                throw;
            }
        }
Esempio n. 2
0
        public AlunoConcursoEstatistica GetConcursoStatsAluno(int idExercicio, int idMatricula, bool anulada = false)
        {
            int[] tipoExercicio = new int[] { (int)Exercicio.tipoExercicio.CONCURSO, (int)Exercicio.tipoExercicio.MONTAPROVA };

            try
            {
                using (var ctx = new AcademicoContext())
                {
                    using (var ctxMatDir = new DesenvContext())
                    {
                        var questoes = (from cq in ctxMatDir.tblConcursoQuestoes
                                        join qa in ctxMatDir.tblConcursoQuestoes_Alternativas
                                        on cq.intQuestaoID equals qa.intQuestaoID
                                        where cq.intProvaID == idExercicio
                                        select new
                        {
                            questaoId = qa.intQuestaoID,
                            alternativa = qa.txtLetraAlternativa,
                            alternativaCorreta = (qa.bitCorreta == true || qa.bitCorretaPreliminar == true),
                            anulada = (cq.bitAnulada || (cq.bitAnuladaPosRecurso.HasValue && cq.bitAnuladaPosRecurso.Value == true))
                        }
                                        ).ToList();


                        var questoesNaoAnuladas = questoes.Where(x => x.anulada == false && x.alternativaCorreta == true).ToList();



                        var respostasAluno = (from cro in ctx.tblCartaoResposta_objetiva
                                              where cro.intClientID == idMatricula && tipoExercicio.Contains(cro.intExercicioTipoId)
                                              select new { questaoId = cro.intQuestaoID, alternativa = cro.txtLetraAlternativa, ultimoregistro = cro.dteCadastro }
                                              ).Distinct().ToList();



                        var respostasAlunoNaoAnuladas = (from ra in respostasAluno
                                                         join q in questoesNaoAnuladas
                                                         on ra.questaoId equals q.questaoId
                                                         select new { questaoId = ra.questaoId, alternativa = ra.alternativa, ra.ultimoregistro }
                                                         ).Distinct().ToList();

                        var respostasAlunosemduplicada = (from c in respostasAlunoNaoAnuladas
                                                          group c by c.questaoId into grp
                                                          where grp.Count() > 1
                                                          select grp.Key
                                                          ).ToList();

                        if (respostasAlunosemduplicada.Count > 0)
                        {
                            var itemComDuplicata = respostasAlunoNaoAnuladas.Where(a => respostasAlunosemduplicada.Contains(a.questaoId)).OrderBy(b => b.ultimoregistro).ToList();
                            if (itemComDuplicata.Count > 0)
                            {
                                foreach (var item in itemComDuplicata)
                                {
                                    var indice = respostasAlunoNaoAnuladas.Where(a => a.questaoId == item.questaoId && a.ultimoregistro > item.ultimoregistro).ToList();
                                    if (indice.Count > 0)
                                    {
                                        respostasAlunoNaoAnuladas.Remove(item);
                                    }
                                }
                            }
                        }

                        var estatistica = new AlunoConcursoEstatistica();

                        estatistica.TotalQuestoes = questoes.GroupBy(x => x.questaoId).Count();
                        estatistica.NaoRealizadas = estatistica.TotalQuestoes - respostasAlunoNaoAnuladas.Select(a => a.questaoId).Distinct().Count();

                        estatistica.Acertos = (from q in questoesNaoAnuladas
                                               join r in respostasAlunoNaoAnuladas
                                               on q.questaoId equals r.questaoId
                                               where q.alternativa == r.alternativa
                                               select q.questaoId
                                               ).Distinct().Count();

                        estatistica.Erros = respostasAlunoNaoAnuladas.Count() - estatistica.Acertos;

                        estatistica.Nota = estatistica.Acertos;

                        return(estatistica);
                    }
                }
            }
            catch
            {
                throw;
            }
        }