private async Task <RelatorioSondagemPortuguesConsolidadoCabecalhoDto> ObterCabecalho(RelatorioSondagemPortuguesConsolidadoLeituraFiltroDto filtros)
        {
            var usuario = await mediator.Send(new ObterUsuarioPorCodigoRfQuery()
            {
                UsuarioRf = filtros.UsuarioRF
            });

            string dreAbreviacao = "Todas";

            if (filtros.DreCodigo != null && filtros.DreCodigo != "0")
            {
                var dre = await mediator.Send(new ObterDrePorCodigoQuery()
                {
                    DreCodigo = filtros.DreCodigo
                });

                dreAbreviacao = dre.Abreviacao;
            }

            string ueNomeComTipoEscola = "Todas";

            if (filtros.UeCodigo != null & filtros.UeCodigo != String.Empty)
            {
                var ue = await mediator.Send(new ObterUePorCodigoQuery(filtros.UeCodigo));

                ueNomeComTipoEscola = ue.NomeComTipoEscola;
            }

            var proficiencia = !String.IsNullOrEmpty(filtros.GrupoId) ? filtros.GrupoId : filtros.ProficienciaId.ToString();

            if (proficiencia == GrupoSondagemEnum.LeituraVozAlta.Name())
            {
                proficiencia = GrupoSondagemEnum.LeituraVozAlta.ShortName();
            }
            else if (proficiencia == GrupoSondagemEnum.ProducaoTexto.Name())
            {
                proficiencia = GrupoSondagemEnum.ProducaoTexto.ShortName();
            }
            else if (proficiencia == ProficienciaSondagemEnum.Escrita.Name())
            {
                proficiencia = ProficienciaSondagemEnum.Escrita.Name();
            }
            else if (proficiencia == ProficienciaSondagemEnum.Leitura.Name())
            {
                proficiencia = ProficienciaSondagemEnum.Leitura.Name();
            }

            return(await Task.FromResult(new RelatorioSondagemPortuguesConsolidadoCabecalhoDto()
            {
                DataSolicitacao = DateTime.Now.ToString("dd/MM/yyyy"),
                Dre = dreAbreviacao,
                Periodo = $"{ filtros.Bimestre }° Bimestre",
                Rf = filtros.UsuarioRF,
                Ue = ueNomeComTipoEscola,
                Usuario = usuario.Nome,
                AnoLetivo = filtros.AnoLetivo,
                AnoTurma = filtros.Ano,
                Turma = "Todas",
                ComponenteCurricular = ComponenteCurricularSondagemEnum.Portugues.ShortName(),
                Proficiencia = proficiencia,
                EhProducaoTexto = filtros.GrupoId == GrupoSondagemEnum.ProducaoTexto.Name()
            }));
        }
        private async Task <List <RelatorioSondagemPortuguesConsolidadoRespostaDto> > ObterRespostasGrupo(RelatorioSondagemPortuguesConsolidadoLeituraFiltroDto filtros)
        {
            GrupoSondagemEnum grupoSondagemEnum = filtros.GrupoId == GrupoSondagemEnum.LeituraVozAlta.Name() ?
                                                  GrupoSondagemEnum.LeituraVozAlta : GrupoSondagemEnum.ProducaoTexto;

            var semestre = (filtros.Bimestre <= 2) ? 1 : 2;

            var dataReferencia = await mediator.Send(new ObterDataPeriodoFimSondagemPorSemestreAnoLetivoQuery(semestre, filtros.AnoLetivo));

            int alunosPorAno = await mediator.Send(new ObterTotalAlunosPorUeAnoSondagemQuery(
                                                       filtros.Ano.ToString(),
                                                       filtros.UeCodigo,
                                                       filtros.AnoLetivo,
                                                       dataReferencia,
                                                       Convert.ToInt64(filtros.DreCodigo)
                                                       ));

            var periodo = await mediator.Send(new ObterPeriodoPorTipoQuery(filtros.Bimestre, TipoPeriodoSondagem.Bimestre));

            var perguntas = await mediator.Send(new ObterPerguntasPorGrupoQuery(grupoSondagemEnum, ComponenteCurricularSondagemEnum.Portugues));

            var dados = await mediator.Send(new ObterRespostasPorFiltrosQuery()
            {
                AnoLetivo            = filtros.AnoLetivo,
                TurmaAno             = filtros.Ano,
                DreCodigo            = filtros.DreCodigo,
                UeCodigo             = filtros.UeCodigo,
                GrupoId              = filtros.GrupoId,
                ComponenteCurricular = ComponenteCurricularSondagemEnum.Portugues,
                PeriodoId            = periodo.Id
            });

            var respostas = new List <RelatorioSondagemPortuguesConsolidadoRespostaDto>();

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

                ObterSemPreenchimento(dados, alunosPorAno, respostas);

                return(respostas);
            }

            PopularListaRetorno(dados, alunosPorAno, perguntas, respostas);

            return(respostas);
        }
        private async Task <List <RelatorioSondagemPortuguesConsolidadoRespostaDto> > ObterRespostasProficiencia(RelatorioSondagemPortuguesConsolidadoLeituraFiltroDto filtros)
        {
            IEnumerable <RelatorioSondagemPortuguesPorTurmaPlanilhaQueryDto> linhasSondagem = null;

            linhasSondagem = await mediator.Send(new ObterRelatorioSondagemPortuguesPorTurmaQuery()
            {
                DreCodigo    = filtros.DreCodigo,
                UeCodigo     = filtros.UeCodigo,
                AnoLetivo    = filtros.AnoLetivo,
                AnoTurma     = filtros.Ano,
                Bimestre     = filtros.Bimestre,
                Proficiencia = filtros.ProficienciaId
            });

            var dataReferencia = await mediator.Send(new ObterDataPeriodoFimSondagemPorBimestreAnoLetivoQuery(filtros.Bimestre, filtros.AnoLetivo));

            int alunosPorAno = await mediator.Send(new ObterTotalAlunosPorUeAnoSondagemQuery(
                                                       filtros.Ano.ToString(),
                                                       filtros.UeCodigo,
                                                       filtros.AnoLetivo,
                                                       dataReferencia,
                                                       Convert.ToInt64(filtros.DreCodigo)
                                                       ));

            var respostas = new List <RelatorioSondagemPortuguesConsolidadoRespostaDto>();

            var respAgrupado = linhasSondagem.GroupBy(o => o.Resposta).Select(g => new { Label = g.Key, Value = g.Count() }).OrderBy(r => r.Label).ToList();

            foreach (var item in respAgrupado)
            {
                if (!string.IsNullOrEmpty(item.Label))
                {
                    RelatorioSondagemPortuguesConsolidadoRespostaDto itemRetorno = new RelatorioSondagemPortuguesConsolidadoRespostaDto();

                    itemRetorno.Resposta   = MontarTextoProficiencia(item.Label);
                    itemRetorno.Quantidade = item.Value;
                    itemRetorno.Percentual = Math.Round(((decimal)item.Value / (decimal)alunosPorAno) * 100, 2);
                    itemRetorno.Total      = alunosPorAno;
                    respostas.Add(itemRetorno);
                }
            }

            var totalRespostas = respostas.Sum(r => r.Quantidade);

            if (alunosPorAno > totalRespostas)
            {
                var totalSemPreenchimento = alunosPorAno - totalRespostas;

                RelatorioSondagemPortuguesConsolidadoRespostaDto itemRetorno = new RelatorioSondagemPortuguesConsolidadoRespostaDto();

                itemRetorno.Resposta   = MontarTextoProficiencia(string.Empty);
                itemRetorno.Quantidade = totalSemPreenchimento;
                itemRetorno.Percentual = Math.Round(((decimal)totalSemPreenchimento / (decimal)alunosPorAno) * 100, 2);
                itemRetorno.Total      = alunosPorAno;
                respostas.Add(itemRetorno);
            }

            return(respostas);
        }
예제 #4
0
        private async Task <List <RelatorioSondagemPortuguesConsolidadoLeituraPlanilhaDto> > ObterPlanilhas(RelatorioSondagemPortuguesConsolidadoLeituraFiltroDto filtros, int alunosPorAno, GrupoSondagemEnum grupoSondagemEnum = GrupoSondagemEnum.CapacidadeLeitura)
        {
            IEnumerable <RelatorioSondagemPortuguesConsolidadoLeituraPlanilhaQueryDto> linhasSondagem = await mediator.Send(new ObterRelatorioSondagemPortuguesConsolidadoLeituraQuery()
            {
                DreCodigo   = filtros.DreCodigo,
                UeCodigo    = filtros.UeCodigo,
                TurmaCodigo = filtros.TurmaCodigo,
                AnoLetivo   = filtros.AnoLetivo,
                AnoTurma    = filtros.Ano,
                Bimestre    = filtros.Bimestre,
                Grupo       = grupoSondagemEnum
            });

            var planilhas = new List <RelatorioSondagemPortuguesConsolidadoLeituraPlanilhaDto>();

            var ordens = linhasSondagem.GroupBy(o => o.Ordem).Select(x => x.FirstOrDefault()).ToList();

            if (ordens.Count == 0)
            {
                var respostasDto = new List <RelatorioSondagemPortuguesConsolidadoLeituraPlanilhaRespostaDto>();
                respostasDto.Add(new RelatorioSondagemPortuguesConsolidadoLeituraPlanilhaRespostaDto()
                {
                    Resposta   = "Sem preenchimento",
                    Quantidade = alunosPorAno,
                    Total      = alunosPorAno,
                    Percentual = 1
                });

                var ordensSondagem = await mediator.Send(new ObterOrdensSondagemPorGrupoQuery()
                {
                    Grupo = grupoSondagemEnum
                });

                foreach (var ordem in ordensSondagem)
                {
                    planilhas.Add(new RelatorioSondagemPortuguesConsolidadoLeituraPlanilhaDto()
                    {
                        Ordem     = ordem.Descricao,
                        Perguntas = new List <RelatorioSondagemPortuguesConsolidadoLeituraPlanilhaPerguntaDto>()
                        {
                            new RelatorioSondagemPortuguesConsolidadoLeituraPlanilhaPerguntaDto()
                            {
                                Pergunta  = String.Empty,
                                Respostas = respostasDto
                            }
                        }
                    });
                }
            }
            foreach (var ordem in ordens)
            {
                var perguntasDto = new List <RelatorioSondagemPortuguesConsolidadoLeituraPlanilhaPerguntaDto>();

                var perguntas = linhasSondagem.Where(o => o.Ordem == ordem.Ordem).GroupBy(p => p.Pergunta).Select(x => x.FirstOrDefault()).ToList();
                foreach (var pergunta in perguntas)
                {
                    var respostasDto = new List <RelatorioSondagemPortuguesConsolidadoLeituraPlanilhaRespostaDto>();

                    var respostas      = linhasSondagem.Where(o => o.Ordem == ordem.Ordem && o.Pergunta == pergunta.Pergunta).ToList();
                    var totalRespostas = respostas.Sum(o => o.Quantidade);
                    foreach (var resposta in respostas)
                    {
                        respostasDto.Add(new RelatorioSondagemPortuguesConsolidadoLeituraPlanilhaRespostaDto()
                        {
                            Resposta   = resposta.Resposta,
                            Quantidade = resposta.Quantidade,
                            Total      = alunosPorAno,
                            Percentual = Decimal.Divide(resposta.Quantidade, alunosPorAno)
                        });
                    }

                    respostasDto.Add(new RelatorioSondagemPortuguesConsolidadoLeituraPlanilhaRespostaDto()
                    {
                        Resposta   = "Sem preenchimento",
                        Quantidade = alunosPorAno - totalRespostas,
                        Total      = alunosPorAno,
                        Percentual = Decimal.Divide(alunosPorAno - totalRespostas, alunosPorAno)
                    });

                    perguntasDto.Add(new RelatorioSondagemPortuguesConsolidadoLeituraPlanilhaPerguntaDto()
                    {
                        Pergunta  = pergunta.Pergunta,
                        Respostas = respostasDto
                    });
                }

                planilhas.Add(new RelatorioSondagemPortuguesConsolidadoLeituraPlanilhaDto()
                {
                    Ordem     = ordem.Ordem,
                    Perguntas = perguntasDto
                });
            }

            return(await Task.FromResult(planilhas));
        }