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()); }
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()); }
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); }
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); }
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); }
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()); }
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)); }
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); }
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); }
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); } }
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); }
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); }
public async Task <ActionResult> ObterDadosTeste([FromBody] RelatorioPortuguesFiltroDto filtro) { var relatorio = new RelatorioPortugues(); return(Ok(await relatorio.ObterRelatorioPorTurmasPortugues(filtro))); }
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()); }
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); }
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); }
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); }