private static void MapearGrafico(Grupo grupo, RelatorioAutoralLeituraProducaoDto relatorio)
        {
            var grafico = new Grafico
            {
                NomeGrafico = grupo.Descricao,
                Barras      = relatorio.Perguntas.Select(pergunta => new GraficoBarra
                {
                    Label = pergunta.Nome,
                    Value = pergunta.Total.Quantidade
                }).ToList()
            };

            relatorio.Graficos.Add(grafico);
        }
        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);
        }