Esempio n. 1
0
        public CartoesResposta GetCartaoRespostaApostilaPorAno(int exercicioID, int clientID, int ano)
        {
            try
            {
                var anoAtual = _repository.GetYear();
                var cartaoRespostaRetorno = new CartoesResposta();
                int semanaAtual           = Utilidades.GetNumeroSemanaAtual(DateTime.Now);

                var ppQuestoes = _questaoRepository.GetQuestoesComComentarioApostilaCache(exercicioID);

                var listaQuestoes = (from q in ppQuestoes
                                     select new Questao
                {
                    Id = q.Id,
                    Anulada = q.Anulada,
                    Ano = q.Ano,
                    Tipo = q.Tipo,
                    Ordem = q.Ordem,
                    Premium = q.Premium,
                    PossuiComentario = q.PossuiComentario,
                    OrdemPremium = q.OrdemPremium
                });

                var ResultMaterialDireito = _repository.ListaMaterialDireitoAluno(clientID, ano, null);
                var lstMaterialDireito    = ResultMaterialDireito.Where(w => w.intBookEntityID == exercicioID && w.anoCronograma == ano).Distinct().ToList();

                if (lstMaterialDireito.Count() == 0)
                {
                    lstMaterialDireito = ResultMaterialDireito.Where(w => w.intBookEntityID == exercicioID).Distinct().ToList();
                    var Permitido = _aulaEntityData.GetApostilasLiberadasSeHouveAulaCronograma(exercicioID, ano).Any() ? 1 : 0;
                    if (lstMaterialDireito.Count() > 0)
                    {
                        lstMaterialDireito.ForEach(x => x.blnPermitido = Permitido);
                    }
                }

                List <Questao> questoesImpressas;
                if (anoAtual == ano)
                {
                    if (lstMaterialDireito.Any(x => x.blnPermitido == 1))
                    {
                        questoesImpressas = _repository.GetQuestoesSomenteImpressasComOuSemVideoCache(exercicioID, ano);
                    }
                    else
                    {
                        questoesImpressas = new List <Questao>();
                    }
                }
                else
                {
                    questoesImpressas = _repository.GetQuestoesSomenteImpressasComOuSemVideoCache(exercicioID, ano);
                }

                var idsQuestoesImpressas = questoesImpressas.Select(a => a.Id).ToList();
                var idsPPQuestoes        = ppQuestoes.Select(p => p.Id).ToList();

                var questoesVideos     = _repository.GetQuestoesComVideosCache(exercicioID, idsPPQuestoes, idsQuestoesImpressas);
                var questoesAssociadas = listaQuestoes.Where(w => !idsQuestoesImpressas.Contains(w.Id))
                                         .OrderByDescending(q => q.PossuiComentario)
                                         .ThenByDescending(q => q.Premium)
                                         .ThenByDescending(q => q.Ano)
                                         .ThenBy(q => q.OrdemPremium)
                                         .ThenByDescending(q => q.PossuiComentario)
                                         .ThenBy(q => q.Ordem).ToList();

                questoesImpressas = questoesImpressas.OrderBy(q => q.Ordem)
                                    .ThenByDescending(q => q.Ano)
                                    .ToList();

                questoesImpressas.AddRange(questoesAssociadas);

                var questoes = questoesImpressas;

                var listaIdsQuestoes = questoes.Select(q => q.Id).ToList();

                var ultimasMarcacoesObjetiva      = _repository.ListarUltimasMarcacoesObjetiva(clientID, listaIdsQuestoes);
                var marcacoesObjetivasComGabarito = _repository.ListarMarcacoesObjetivasComGabarito(listaIdsQuestoes);

                foreach (var res in questoes)
                {
                    res.Anulada         = res.Anulada;
                    res.ExercicioTipoID = (int)Exercicio.tipoExercicio.APOSTILA;

                    if (res.Tipo == (int)Questao.tipoQuestao.OBJETIVA)
                    {
                        var respostaAluno = ultimasMarcacoesObjetiva.Where(q => q.IntQuestaoID == res.Id).ToList();
                        if (respostaAluno.Any())
                        {
                            res.Respondida = true;
                            var tblConcursoQuestoesAlternativas = marcacoesObjetivasComGabarito
                                                                  .FirstOrDefault(q => q.intQuestaoID == res.Id && (q.bitCorreta ?? false));

                            if (tblConcursoQuestoesAlternativas != null)
                            {
                                res.Correta = tblConcursoQuestoesAlternativas.txtLetraAlternativa == respostaAluno.FirstOrDefault().Resposta;
                            }
                            //Questão não tem Gabarito
                            else
                            {
                                //Verifica se tem pré (gabarito preliminar)
                                tblConcursoQuestoesAlternativas = marcacoesObjetivasComGabarito
                                                                  .FirstOrDefault(q => q.intQuestaoID == res.Id && (q.bitCorretaPreliminar ?? false));

                                if (tblConcursoQuestoesAlternativas != null)
                                {
                                    res.Correta = tblConcursoQuestoesAlternativas.txtLetraAlternativa == respostaAluno.FirstOrDefault().Resposta;
                                }
                            }
                        }
                    }
                    else
                    {
                        res.Respondida = _repository.ExisteRespostasDiscursivas(clientID, exercicioID, res.Id);
                    }

                    cartaoRespostaRetorno.Questoes.Add(res);
                }
                var json = Newtonsoft.Json.JsonConvert.SerializeObject(cartaoRespostaRetorno);
                return(cartaoRespostaRetorno);
            }
            catch
            {
                throw;
            }
        }