private void GerarGraficoLeituraEscrita(RelatorioSondagemPortuguesPorTurmaRelatorioDto relatorio, string tipoRelatorio) { var grafico = new GraficoBarrasVerticalDto(800, $"Língua Portuguesa - {tipoRelatorio}"); int chaveIndex = 0; var legendas = new List <GraficoBarrasLegendaDto>(); var respostasAgrupadas = new List <RepostaTotalDto>(); var totalSemPreenchimento = 0; foreach (var aluno in relatorio.Planilha.Linhas) { var resposta = aluno.Respostas[0].Resposta; if (!string.IsNullOrEmpty(resposta)) { var respostaAgrupada = respostasAgrupadas.FirstOrDefault(r => r.Resposta == resposta); if (respostaAgrupada != null) { respostaAgrupada.Quantidade++; } else { respostasAgrupadas.Add(new RepostaTotalDto() { Resposta = resposta, Quantidade = 1, }); } } else { totalSemPreenchimento++; } } respostasAgrupadas = respostasAgrupadas.OrderBy(r => r.Resposta).ToList(); if (totalSemPreenchimento > 0) { respostasAgrupadas.Add(new RepostaTotalDto() { Resposta = "Sem Preenchimento", Quantidade = totalSemPreenchimento }); } foreach (var resposta in respostasAgrupadas) { var chave = Constantes.ListaChavesGraficos[chaveIndex++].ToString(); legendas.Add(new GraficoBarrasLegendaDto() { Chave = chave, Valor = resposta.Resposta }); grafico.EixosX.Add(new GraficoBarrasVerticalEixoXDto(resposta.Quantidade, chave)); } var valorMaximoEixo = grafico.EixosX.Max(a => int.Parse(a.Valor.ToString())); grafico.Legendas = legendas; grafico.EixoYConfiguracao = new GraficoBarrasVerticalEixoYDto(350, "Quantidade Alunos", valorMaximoEixo.ArredondaParaProximaDezena(), 10); relatorio.GraficosBarras.Add(grafico); }
private void GerarGraficoLeituraEmVozAltaProducaoTexto(RelatorioSondagemPortuguesPorTurmaRelatorioDto relatorio, string tipoRelatorio) { var grafico = new GraficoBarrasVerticalDto(800, $"Língua Portuguesa - {tipoRelatorio}"); int chaveIndex = 0; var legendas = new List <GraficoBarrasLegendaDto>(); foreach (var pergunta in relatorio.Cabecalho.Perguntas) { var chave = Constantes.ListaChavesGraficos[chaveIndex].ToString(); legendas.Add(new GraficoBarrasLegendaDto() { Chave = chave, Valor = pergunta.Nome }); grafico.EixosX.Add(new GraficoBarrasVerticalEixoXDto(0, chave)); chaveIndex++; } var chaveLegendaSemPreenchimento = Constantes.ListaChavesGraficos[chaveIndex].ToString(); legendas.Add(new GraficoBarrasLegendaDto() { Chave = chaveLegendaSemPreenchimento, Valor = "Sem preenchimento" }); grafico.EixosX.Add(new GraficoBarrasVerticalEixoXDto(0, chaveLegendaSemPreenchimento)); foreach (var aluno in relatorio.Planilha.Linhas) { var totalRespostas = 0; foreach (var pergunta in relatorio.Cabecalho.Perguntas) { var respostaAluno = aluno.Respostas.FirstOrDefault(r => r.PerguntaId == pergunta.Id && !string.IsNullOrEmpty(r.Resposta)); if (respostaAluno != null) { var legenda = legendas.FirstOrDefault(l => l.Valor == pergunta.Nome); var valorEixoX = grafico.EixosX.FirstOrDefault(e => e.Titulo == legenda.Chave); valorEixoX.Valor++; totalRespostas++; } } if (totalRespostas == 0) { var valorEixoX = grafico.EixosX.FirstOrDefault(e => e.Titulo == chaveLegendaSemPreenchimento); valorEixoX.Valor++; } } var valorMaximoEixo = grafico.EixosX.Max(a => int.Parse(a.Valor.ToString())); grafico.Legendas = legendas; grafico.EixoYConfiguracao = new GraficoBarrasVerticalEixoYDto(320, "Quantidade Alunos", valorMaximoEixo.ArredondaParaProximaDezena(), 10); relatorio.GraficosBarras.Add(grafico); }
public async Task <string> Executar(FiltroRelatorioSincronoDto request) { var filtros = request.ObterObjetoFiltro <RelatorioSondagemPortuguesPorTurmaFiltroDto>(); if (filtros.ProficienciaId == ProficienciaSondagemEnum.Autoral && filtros.GrupoId == GrupoSondagemEnum.CapacidadeLeitura.Name()) { throw new NegocioException("Grupo fora do esperado."); } var semestre = (filtros.Bimestre <= 2) ? 1 : 2; var dataDoPeriodo = await mediator.Send(new ObterDataPeriodoFimSondagemPorSemestreAnoLetivoQuery(semestre, filtros.AnoLetivo)); var alunosDaTurma = await mediator.Send(new ObterAlunosPorTurmaDataSituacaoMatriculaQuery(Int32.Parse(filtros.TurmaCodigo), dataDoPeriodo)); if (alunosDaTurma == null || !alunosDaTurma.Any()) { throw new NegocioException("Não foi possível localizar os alunos da turma."); } var relatorioPerguntas = await ObterPerguntas(filtros); RelatorioSondagemPortuguesPorTurmaRelatorioDto relatorio = new RelatorioSondagemPortuguesPorTurmaRelatorioDto() { Cabecalho = await ObterCabecalho(filtros, relatorioPerguntas, dataDoPeriodo), Planilha = new RelatorioSondagemPortuguesPorTurmaPlanilhaDto() { Linhas = await ObterLinhas(filtros, alunosDaTurma) } }; if (relatorio == null) { throw new NegocioException("Não foi possível localizar dados com os filtros informados."); } relatorio.GraficosBarras = new List <GraficoBarrasVerticalDto>(); if (filtros.ProficienciaId == ProficienciaSondagemEnum.Leitura || filtros.ProficienciaId == ProficienciaSondagemEnum.Escrita) { var tipoRelatorio = filtros.ProficienciaId == ProficienciaSondagemEnum.Leitura ? "Leitura" : "Escrita"; GerarGraficoLeituraEscrita(relatorio, tipoRelatorio); } if (filtros.ProficienciaId == ProficienciaSondagemEnum.Autoral && (filtros.GrupoId == GrupoSondagemEnum.LeituraVozAlta.Name() || filtros.GrupoId == GrupoSondagemEnum.ProducaoTexto.Name())) { var tipoRelatorio = filtros.GrupoId == GrupoSondagemEnum.LeituraVozAlta.Name() ? "Leitura em voz alta" : "Produção de texto"; GerarGraficoLeituraEmVozAltaProducaoTexto(relatorio, tipoRelatorio); } return(await mediator.Send(new GerarRelatorioHtmlParaPdfCommand("RelatorioSondagemPortuguesPorTurma", relatorio, Guid.NewGuid(), envioPorRabbit : false))); }