Exemplo n.º 1
0
        public static List <DTORelatorioQuestionarioParticipacao> ConverterDtoRespostas(
            IList <QuestionarioParticipacao> listaQuestionarioParticipacao,
            IReadOnlyList <DTORelatorioQuestionarioQuestao> listaQuestoes)
        {
            var listaParticipacao = new List <DTORelatorioQuestionarioParticipacao>();

            var manterRpp = new ManterRespostaParticipacaoProfessor();

            foreach (var questionarioParticipacao in listaQuestionarioParticipacao)
            {
                // Obtém todas as questões do questionário clone.
                var itensQuestionarioParticipacao =
                    new ManterQuestionarioParticipacao().ListaItemQuestionarioParticipacao(
                        questionarioParticipacao.ID).ToList();

                // Remover questões do tipo Informação, pois não interessam para obter a nota.
                itensQuestionarioParticipacao = itensQuestionarioParticipacao
                                                .Where(x => x.TipoItemQuestionario.ID != (int)enumTipoItemQuestionario.AgrupadorDeQuestoes)
                                                .ToList();

                // Obter todas as respostas selecionadas de todas as questões da participação, para fazer uma consulta só
                // e utilizar esses dados no loop que monta o Dto de respostas.
                var todasRespostasSelecionadas =
                    new ManterItemQuestionarioParticipacaoOpcoes().ObterRespostasSelecionadas(
                        itensQuestionarioParticipacao).ToList();

                var professores =
                    manterRpp.ObterTodosIQueryable()
                    .Where(x => x.QuestionarioParticipacao.ID == questionarioParticipacao.ID)
                    .Select(x => new Usuario
                {
                    ID   = x.Professor.ID,
                    Nome = x.Professor.Nome
                }).Distinct().ToList();

                var participacao = PreencherRespostas(listaQuestoes, itensQuestionarioParticipacao, todasRespostasSelecionadas,
                                                      questionarioParticipacao, professores);

                // Adicionar participação, com todas as respostas.
                listaParticipacao.Add(participacao);
            }

            return(listaParticipacao);
        }
Exemplo n.º 2
0
        private static List <DTORelatorioQuestionarioEnunciado> ObterEnunciados(
            out List <DTORelatorioQuestionarioQuestao> questoes, List <ItemQuestionario> listaItemQuestionario,
            Questionario questionario, Turma turma)
        {
            questoes = new List <DTORelatorioQuestionarioQuestao>();

            var listaEnunciados = new List <DTORelatorioQuestionarioEnunciado>();

            DTORelatorioQuestionarioEnunciado enunciado = null;

            var idEnunciado = 0;

            var questionariosParticipacaoIds = new ManterQuestionarioParticipacao()
                                               .ObterTodosIQueryable()
                                               .Where(x => x.Questionario.ID == questionario.ID && x.Turma != null && x.Turma.ID == turma.ID)
                                               .Select(x => x.ID)
                                               .ToList();

            var professores = new ManterRespostaParticipacaoProfessor().ObterTodosIQueryable()
                              .Join(new ManterTurmaProfessor().ObterTodos(), rpp => rpp.Professor.ID, tp => tp.Professor.ID, (rpp, tp) =>
                                    new
            {
                rpp,
                tp
            })
                              .Where(x => x.tp.Turma.ID == turma.ID && questionariosParticipacaoIds.Contains(x.rpp.QuestionarioParticipacao.ID))
                              .Select(x => new
            {
                x.rpp.Professor.ID,
                x.rpp.Professor.Nome,
                ItemQuestionarioParticipacaoID = x.rpp.ItemQuestionarioParticipacao.ID
            })
                              .ToList()
                              .GroupBy(x => new { x.ID, x.Nome })
                              .Select(x => new ProfessorDto
            {
                ID   = x.Key.ID,
                Nome = x.Key.Nome,
                ItensQuestionarioParticipacaoIds = x.Select(y => y.ItemQuestionarioParticipacaoID).Distinct().ToList()
            })
                              .ToList();

            foreach (var item in listaItemQuestionario)
            {
                // OOYL
                // Buscar o enunciado da sequencia e atribuir todas as questões que estão entre ele e o próximo enunciado como
                // subquestões deste enunciado. Caso a ordem das questões esteja mal formada, tudo abaixo deixará de funcionar.
                if (item.TipoItemQuestionario.ID == (int)enumTipoItemQuestionario.AgrupadorDeQuestoes)
                {
                    if (enunciado != null)
                    {
                        listaEnunciados.Add(enunciado);
                    }

                    enunciado      = new DTORelatorioQuestionarioEnunciado();
                    idEnunciado    = item.ID;
                    enunciado.Id   = item.ID;
                    enunciado.Nome = item.Questao;
                }
                else
                {
                    if (enunciado == null)
                    {
                        enunciado = new DTORelatorioQuestionarioEnunciado();
                    }

                    enunciado.QuestoesRelacionadas.Add(new DTORelatorioQuestionarioQuestao
                    {
                        Id          = item.ID,
                        IdEnunciado = idEnunciado,
                        Nome        = item.Questao
                    });

                    if (item.InAvaliaProfessor && professores.Any())
                    {
                        foreach (var professor in professores)
                        {
                            questoes.Add(new DTORelatorioQuestionarioQuestao
                            {
                                Id              = item.ID,
                                IdEnunciado     = idEnunciado,
                                Nome            = item.Questao, // É fundamental que o nome permaneça o mesmo.
                                AvaliaProfessor = true,
                                IdProfessor     = professor.ID,
                                NomeProfessor   = professor.Nome,
                                ItensQuestionarioParticipacaoIds = professor.ItensQuestionarioParticipacaoIds
                            });
                        }
                    }
                    else
                    {
                        questoes.Add(new DTORelatorioQuestionarioQuestao
                        {
                            Id          = item.ID,
                            IdEnunciado = idEnunciado,
                            Nome        = item.Questao
                        });
                    }
                }
            }

            if (enunciado != null)
            {
                listaEnunciados.Add(enunciado);
            }

            return(listaEnunciados);
        }