コード例 #1
0
        private string ObterWhere(RelatorioPortuguesFiltroDto filtroRelatorioSondagem)
        {
            var builder = new StringBuilder();

            builder.AppendLine("where s.\"AnoLetivo\" = @anoLetivo");

            builder.AppendLine("and s.\"ComponenteCurricularId\" = @componenteCurricularId");

            builder.AppendLine("and s.\"PeriodoId\" = @periodoId");

            builder.AppendLine("and s.\"GrupoId\" = @grupoId");

            if (filtroRelatorioSondagem.AnoEscolar > 0)
            {
                builder.AppendLine("and s.\"AnoTurma\" = @anoTurma");
            }

            if (!string.IsNullOrWhiteSpace(filtroRelatorioSondagem.CodigoTurma))
            {
                builder.AppendLine("and s.\"CodigoTurma\" = @codigoTurma");
            }

            if (!string.IsNullOrWhiteSpace(filtroRelatorioSondagem.CodigoUe))
            {
                builder.AppendLine("and s.\"CodigoUe\" = @codigoUe");
            }

            if (!string.IsNullOrWhiteSpace(filtroRelatorioSondagem.CodigoDre))
            {
                builder.AppendLine("and s.\"CodigoDre\" = @codigoDre");
            }

            return(builder.ToString());
        }
コード例 #2
0
        private NpgsqlParameter[] ObterParametros(RelatorioPortuguesFiltroDto filtroRelatorioSondagem)
        {
            var parametros = new List <NpgsqlParameter>();

            parametros.Add(new NpgsqlParameter("anoLetivo", filtroRelatorioSondagem.AnoLetivo));
            parametros.Add(new NpgsqlParameter("periodoId", filtroRelatorioSondagem.PeriodoId));
            parametros.Add(new NpgsqlParameter("grupoId", filtroRelatorioSondagem.GrupoId));
            parametros.Add(new NpgsqlParameter("anoTurma", filtroRelatorioSondagem.AnoEscolar));
            parametros.Add(new NpgsqlParameter("componenteCurricularId", filtroRelatorioSondagem.ComponenteCurricularId));

            if (!string.IsNullOrWhiteSpace(filtroRelatorioSondagem.CodigoTurma))
            {
                parametros.Add(new NpgsqlParameter("codigoTurma", filtroRelatorioSondagem.CodigoTurma));
            }

            if (!string.IsNullOrWhiteSpace(filtroRelatorioSondagem.CodigoUe))
            {
                parametros.Add(new NpgsqlParameter("codigoUe", filtroRelatorioSondagem.CodigoUe));
            }

            if (!string.IsNullOrWhiteSpace(filtroRelatorioSondagem.CodigoDre))
            {
                parametros.Add(new NpgsqlParameter("codigoDre", filtroRelatorioSondagem.CodigoDre));
            }

            return(parametros.ToArray());
        }
コード例 #3
0
        private async Task <IEnumerable <AlunosNaTurmaDTO> > ObterAlunosTurma(RelatorioPortuguesFiltroDto relatorioPortuguesFiltroDto, PeriodoFixoAnual periodo)
        {
            var alunos = await alunoAPI.ObterAlunosAtivosPorTurmaEPeriodo(relatorioPortuguesFiltroDto.CodigoTurma, periodo.DataFim);

            if (alunos == null || !alunos.Any())
            {
                throw new Exception("Não encontrado alunos para a turma informda");
            }

            return(alunos);
        }
コード例 #4
0
        private static async Task <Grupo> ObterGrupo(RelatorioPortuguesFiltroDto relatorioPortuguesFiltroDto, Grupo grupo, SMEManagementContextData contexto)
        {
            grupo = await contexto.Grupo.FirstOrDefaultAsync(x => x.Id.Equals(relatorioPortuguesFiltroDto.GrupoId));

            if (grupo == null)
            {
                throw new Exception("Não encontrado grupo informado");
            }

            return(grupo);
        }
コード例 #5
0
        private static async Task <PeriodoFixoAnual> ObterPeriodo(RelatorioPortuguesFiltroDto relatorioPortuguesFiltroDto, SMEManagementContextData contexto)
        {
            var periodo = await contexto.PeriodoFixoAnual
                          .FirstOrDefaultAsync(x => x.PeriodoId == relatorioPortuguesFiltroDto.PeriodoId && x.Ano == relatorioPortuguesFiltroDto.AnoLetivo);

            if (periodo == null)
            {
                throw new Exception("Não encontrado periodo Informado");
            }

            return(periodo);
        }
コード例 #6
0
        private string ObterConsultaCompleta(RelatorioPortuguesFiltroDto filtroRelatorioSondagem)
        {
            var sql = new StringBuilder();

            sql.AppendLine("select sar.* from \"Sondagem\" s");
            sql.AppendLine("inner join \"SondagemAluno\" sa on sa.\"SondagemId\" = s.\"Id\"");
            sql.AppendLine("inner join \"SondagemAlunoRespostas\" sar on sar.\"SondagemAlunoId\" = sa.\"Id\"");
            sql.AppendLine(ObterWhere(filtroRelatorioSondagem));

            var retorno = sql.ToString();

            return(sql.ToString());
        }
コード例 #7
0
        private async Task <int> ObterQuantidadeAlunosAtivos(RelatorioPortuguesFiltroDto filtroRelatorioSondagem, PeriodoFixoAnual periodo)
        {
            var filtro = new FiltroTotalAlunosAtivos
            {
                AnoLetivo  = filtroRelatorioSondagem.AnoLetivo,
                AnoTurma   = filtroRelatorioSondagem.AnoEscolar,
                DreId      = filtroRelatorioSondagem.CodigoDre,
                UeId       = filtroRelatorioSondagem.CodigoUe,
                DataInicio = periodo.DataInicio,
                DataFim    = periodo.DataFim,
            };

            return(await alunoAPI.ObterTotalAlunosAtivosPorPeriodo(filtro));
        }
コード例 #8
0
    private filtrosRelatorioDTO CriaMapFiltroRelatorio(RelatorioPortuguesFiltroDto filtro)
    {
        var filtroRelatorio = new filtrosRelatorioDTO()
        {
            AnoEscolar             = filtro.AnoEscolar,
            AnoLetivo              = filtro.AnoLetivo,
            CodigoDre              = filtro.CodigoDre,
            CodigoUe               = filtro.CodigoUe,
            ComponenteCurricularId = filtro.ComponenteCurricularId,
            PeriodoId              = filtro.PeriodoId,
            GrupoId        = filtro.GrupoId,
            CodigoTurmaEol = filtro.CodigoTurma
        };

        return(filtroRelatorio);
    }
コード例 #9
0
        private static async Task <IEnumerable <Pergunta> > ObterPerguntas(RelatorioPortuguesFiltroDto relatorioPortuguesFiltroDto, IEnumerable <Pergunta> perguntas, SMEManagementContextData contexto)
        {
            perguntas = await contexto.OrdemPergunta
                        .Include(x => x.Pergunta)
                        .Where(x => x.GrupoId.Equals(relatorioPortuguesFiltroDto.GrupoId) && x.Excluido == false)
                        .OrderBy(x => x.OrdenacaoNaTela)
                        .Select(x => x.Pergunta)
                        .ToListAsync();

            if (perguntas == null || !perguntas.Any())
            {
                throw new Exception("Não encontrada perguntas para o grupo informado");
            }

            return(perguntas);
        }
コード例 #10
0
    private static async Task <IEnumerable <OrdemPerguntaRespostaDTO> > RetornaListaDehPerguntasEhRespostas(RelatorioPortuguesFiltroDto filtro, string query)
    {
        using (var conexao = new NpgsqlConnection(Environment.GetEnvironmentVariable("sondagemConnection")))
        {
            var ListaPerguntaEhRespostasRelatorio = await conexao.QueryAsync <OrdemPerguntaRespostaDTO>(query.ToString(),
                                                                                                        new
            {
                AnoTurma     = filtro.AnoEscolar,
                CodigoEscola = filtro.CodigoUe,
                CodigoDRE    = filtro.CodigoDre,
                AnoLetivo    = filtro.AnoLetivo,
                PeriodoId    = filtro.PeriodoId,
                filtro.ComponenteCurricularId,
                GrupoId = filtro.GrupoId
            });

            return(ListaPerguntaEhRespostasRelatorio);
        }
    }
コード例 #11
0
    public async Task <RelatorioConsolidadoCapacidadeLeituraDTO> ObterRelatorioCapacidadeLeitura(RelatorioPortuguesFiltroDto filtro)
    {
        var filtrosRelatorio = CriaMapFiltroRelatorio(filtro);
        int totalDeAlunos    = await ConsultaTotalDeAlunos.BuscaTotalDeAlunosEOl(filtrosRelatorio);

        var query     = ConsultasRelatorios.MontaQueryConsolidadoCapacidadeLeitura(filtro);
        var relatorio = new RelatorioConsolidadoCapacidadeLeituraDTO();
        var ListaPerguntaEhRespostasRelatorio = await RetornaListaDehPerguntasEhRespostas(filtro, query);

        var relatorioAgrupado = ListaPerguntaEhRespostasRelatorio.GroupBy(p => p.OrdermId).ToList();

        relatorio.RelatorioPorOrdem = RetornaRelatorioPorOrdens(totalDeAlunos, relatorioAgrupado);
        relatorio.Graficos          = CriaGraficosConsolidados(relatorio);
        return(relatorio);
    }
コード例 #12
0
    public async Task <RelatorioCapacidadeLeituraPorTurma> ObterRelatorioCapacidadeLeituraPorTurma(RelatorioPortuguesFiltroDto filtro)
    {
        var filtrosRelatorio = CriaMapFiltroRelatorio(filtro);
        var periodos         = await ConsultaTotalDeAlunos.BuscaDatasPeriodoFixoAnual(filtrosRelatorio);

        if (periodos.Count() == 0)
        {
            throw new Exception("Periodo fixo anual nao encontrado");
        }
        var alunosEol = await alunoAPI.ObterAlunosAtivosPorTurmaEPeriodo(filtro.CodigoTurma, periodos.First().DataFim);

        var queryPorTurma       = ConsultasRelatorios.QueryRelatorioPorTurmaPortuguesCapacidadeDeLeitura();
        var listaAlunoRespostas = await RetornaListaRespostasAlunoPorTurma(filtrosRelatorio, queryPorTurma);

        var relatorio = await CriaRelatorioAlunos(filtrosRelatorio, alunosEol, listaAlunoRespostas);

        using (var contexto = new SMEManagementContextData())
        {
            await CriaGraficosRelatorio(relatorio, contexto);
        }
        relatorio.Alunos = relatorio.Alunos.OrderBy(x => x.NomeAluno).ToList();

        return(relatorio);
    }
コード例 #13
0
        public async Task <ActionResult> ObterDadosTeste([FromBody] RelatorioPortuguesFiltroDto filtro)
        {
            var relatorio = new RelatorioPortugues();

            return(Ok(await relatorio.ObterRelatorioPorTurmasPortugues(filtro)));
        }
コード例 #14
0
        public static string MontaQueryConsolidadoCapacidadeLeitura(RelatorioPortuguesFiltroDto filtro)
        {
            var queryRelatorio = @"
                                   select
                                   o.""Id"" as ""OrdermId"",
                                   o.""Descricao"" as ""Ordem"",
                                   p.""Id"" as ""PerguntaId"",
                                   p.""Descricao"" as ""PerguntaDescricao"",
                                   r.""Id"" as ""RespostaId"", 
                                   r.""Descricao"" as ""RespostaDescricao"" ,
                                   gp.""Ordenacao"",
                                   op.""OrdenacaoNaTela"",
                                   count(tabela.""RespostaId"") as ""QtdRespostas""
                                   from
                                       ""Ordem""  as o 
                                      inner join ""GrupoOrdem"" gp on 
                                      gp.""OrdemId"" = o.""Id"" and 
                                      gp.""GrupoId"" = @GrupoId
                                      inner join ""OrdemPergunta"" op on
                                       op.""GrupoId"" = @GrupoId
                                      inner join ""Pergunta"" p on
                                     p.""Id"" = op.""PerguntaId"" 
                                   inner join ""PerguntaResposta"" pr on
                                    pr.""PerguntaId"" = p.""Id""
                                   inner join ""Resposta"" r on
                                    r.""Id"" = pr.""RespostaId""
                                   left join (
                                    select
                                        s.""OrdemId"",
                                        s.""AnoLetivo"",
                                        s.""AnoTurma"",
                                        per.""Descricao"",
                                        c.""Descricao"",
                                        sa.""NomeAluno"",
                                        p.""Id"" as ""PerguntaId"",
                                        p.""Descricao"" as ""PerguntaDescricao"",
                                        r.""Id"" as ""RespostaId"",
                                        r.""Descricao"" as ""RespostaDescricao""
                                    from
                                        ""SondagemAlunoRespostas"" sar
                                    inner join ""SondagemAluno"" sa on
                                        sa.""Id"" = ""SondagemAlunoId""
                                    inner join ""Sondagem"" s on
                                        s.""Id"" = sa.""SondagemId""
                                    inner join ""Pergunta"" p on
                                        p.""Id"" = sar.""PerguntaId""
                                    inner join ""Resposta"" r on
                                        r.""Id"" = sar.""RespostaId""
                                    inner join ""Periodo"" per on
                                        per.""Id"" = s.""PeriodoId""
                                    inner join ""ComponenteCurricular"" c on
                                        c.""Id"" = s.""ComponenteCurricularId""
                                       
                                    where
                                        s.""Id"" in (
                                        select
                                            s.""Id""
                                        from
                                            ""Sondagem"" s
                                        where
                                                s.""GrupoId"" = @GrupoId
                                            and s.""ComponenteCurricularId"" = @ComponenteCurricularId"        ;
            var query          = new StringBuilder();

            query.Append(queryRelatorio);
            if (!string.IsNullOrEmpty(filtro.CodigoDre))
            {
                query.AppendLine(@" and ""CodigoDre"" =  @CodigoDRE");
            }
            if (!string.IsNullOrEmpty(filtro.CodigoUe))
            {
                query.AppendLine(@"and ""CodigoUe"" =  @CodigoEscola");
            }

            query.Append(@"
                                            and s.""PeriodoId"" = @PeriodoId
                                            and s.""AnoLetivo"" = @AnoLetivo
                                            and s.""AnoTurma"" = @AnoTurma
                                                ) ) as tabela on
                                            p.""Id"" = tabela.""PerguntaId"" and
                                            r.""Id""= tabela.""RespostaId"" and
                                              o.""Id"" = tabela.""OrdemId""
                                          group by
                                            o.""Id"",
                                              o.""Descricao"",
                                              r.""Id"",
                                            r.""Descricao"",
                                            p.""Id"",
                                            p.""Descricao"",
                                            gp.""Ordenacao"",
                                            op.""OrdenacaoNaTela""
                                          order by
                                             gp.""Ordenacao"",
                                             o.""Descricao"",
                                             op.""OrdenacaoNaTela"",
                                              r.""Descricao""");
            return(query.ToString());
        }
コード例 #15
0
        private static async Task <IEnumerable <SondagemAluno> > ObterDadosRelatorioPorTurma(RelatorioPortuguesFiltroDto relatorioPortuguesFiltroDto, IEnumerable <SondagemAluno> dados, SMEManagementContextData contexto)
        {
            dados = await contexto.SondagemAluno
                    .Include(banco => banco.ListaRespostas)
                    .Where(sondagemAluno => sondagemAluno.Sondagem.CodigoDre == relatorioPortuguesFiltroDto.CodigoDre &&
                           sondagemAluno.Sondagem.AnoLetivo == relatorioPortuguesFiltroDto.AnoLetivo &&
                           sondagemAluno.Sondagem.AnoTurma == relatorioPortuguesFiltroDto.AnoEscolar &&
                           sondagemAluno.Sondagem.CodigoUe == relatorioPortuguesFiltroDto.CodigoUe &&
                           sondagemAluno.Sondagem.CodigoTurma == relatorioPortuguesFiltroDto.CodigoTurma &&
                           sondagemAluno.Sondagem.ComponenteCurricularId == relatorioPortuguesFiltroDto.ComponenteCurricularId &&
                           sondagemAluno.Sondagem.GrupoId == relatorioPortuguesFiltroDto.GrupoId &&
                           sondagemAluno.Sondagem.PeriodoId == relatorioPortuguesFiltroDto.PeriodoId)
                    .ToListAsync();

            return(dados);
        }
コード例 #16
0
        public async Task <RelatorioPortuguesTurmaDto> ObterRelatorioPorTurmasPortugues(RelatorioPortuguesFiltroDto relatorioPortuguesFiltroDto)
        {
            IEnumerable <SondagemAluno> dados     = null;
            PeriodoFixoAnual            periodo   = null;
            IEnumerable <Pergunta>      perguntas = null;
            Grupo grupo     = null;
            var   relatorio = new RelatorioPortuguesTurmaDto();

            using (var contexto = new SMEManagementContextData())
            {
                grupo = await ObterGrupo(relatorioPortuguesFiltroDto, grupo, contexto);

                periodo = await ObterPeriodo(relatorioPortuguesFiltroDto, contexto);

                perguntas = await ObterPerguntas(relatorioPortuguesFiltroDto, perguntas, contexto);

                dados = await ObterDadosRelatorioPorTurma(relatorioPortuguesFiltroDto, dados, contexto);
            }

            var alunos = await ObterAlunosTurma(relatorioPortuguesFiltroDto, periodo);

            if (dados == null)
            {
                PreencherAlunosSemRespostas(relatorio, alunos);
                PreencherGraficoSemRespostas(perguntas, grupo, relatorio, alunos);
            }
            else
            {
                MapearRelatorioPorTurma(dados, perguntas, relatorio, alunos);
                MapearGraficoPorTurma(dados, perguntas, grupo, alunos, relatorio);
            }

            relatorio.Alunos = relatorio.Alunos.OrderBy(x => x.NomeAluno).ToList();

            return(relatorio);
        }
コード例 #17
0
        public async Task <RelatorioAutoralLeituraProducaoDto> ObterRelatorioConsolidadoPortugues(RelatorioPortuguesFiltroDto filtroRelatorioSondagem)
        {
            var dados = new List <SondagemAlunoRespostas>();
            PeriodoFixoAnual       periodo   = null;
            Grupo                  grupo     = null;
            IEnumerable <Pergunta> perguntas = null;
            var relatorio = new RelatorioAutoralLeituraProducaoDto();

            using (var contexto = new SMEManagementContextData())
            {
                dados = await contexto.SondagemAlunoRespostas.Include(x => x.SondagemAluno).Include(x => x.Pergunta).Include(x => x.Resposta)
                        .FromSql(ObterConsultaCompleta(filtroRelatorioSondagem),
                                 ObterParametros(filtroRelatorioSondagem)).ToListAsync();

                periodo = await contexto.PeriodoFixoAnual.FirstOrDefaultAsync(x => x.PeriodoId == filtroRelatorioSondagem.PeriodoId && x.Ano == filtroRelatorioSondagem.AnoLetivo);

                grupo = await contexto.Grupo.FirstOrDefaultAsync(x => x.Id == filtroRelatorioSondagem.GrupoId);

                perguntas = await contexto.OrdemPergunta.Include(x => x.Pergunta).Where(x => x.GrupoId.Equals(filtroRelatorioSondagem.GrupoId)).OrderBy(p => p.OrdenacaoNaTela).Select(x => x.Pergunta).ToListAsync();
            }

            if (grupo == null)
            {
                throw new Exception($"Não encontrado grupo com o id '{filtroRelatorioSondagem.GrupoId}'");
            }

            relatorio.GrupoDescricao = grupo.Descricao;

            int quantidade = await ObterQuantidadeAlunosAtivos(filtroRelatorioSondagem, periodo);

            if (quantidade == 0)
            {
                throw new Exception("Não foi possivel obter os alunos ativos para o filtro especificado");
            }

            relatorio.Totais = new RelatorioPortuguesTotalizadores {
                Quantidade = quantidade
            };
            if (filtroRelatorioSondagem.GrupoId != GrupoEnum.ProducaoTexto.Name())
            {
                relatorio.Totais.Porcentagem = 100;
            }

            var listaRetorno = new List <RelatorioPortuguesPerguntasDto>();

            if (dados == null || !dados.Any())
            {
                PreencherPerguntasForaLista(listaRetorno, perguntas);

                ObterSemPreenchimento(dados, quantidade, listaRetorno);

                relatorio.Perguntas = listaRetorno;

                MapearGrafico(grupo, relatorio);

                return(relatorio);
            }

            PopularListaRetorno(dados, quantidade, perguntas, listaRetorno);

            relatorio.Perguntas = listaRetorno;

            MapearGrafico(grupo, relatorio);

            return(relatorio);
        }