public async Task <ActionResult <string> > ObterDados([FromBody] ParametersModel parameters)
        {
            if (parameters.Discipline == "Língua Portuguesa")
            {
                if (parameters.ClassroomReport)
                {
                    PollReportPortugueseStudentResult result = new PollReportPortugueseStudentResult();
                    result = await BuscarDadosPorTurmaAsync(parameters);

                    return(Ok(result));
                }
                else
                {
                    PollReportPortugueseResult result = new PollReportPortugueseResult();
                    result = await BuscarDadosSyncAsync(parameters, "2019", parameters.CodigoDRE, parameters.CodigoEscola, parameters.CodigoCurso);

                    return(Ok(result));
                }
            }
            else if (parameters.Discipline == "Matemática")
            {
                if (parameters.ClassroomReport)
                {
                    if (parameters.Proficiency == "Números")
                    {
                        PollReportMathStudentNumbersResult result = BuscaDadosMathTurmaNumbersAsync(parameters.Proficiency,
                                                                                                    parameters.Term,
                                                                                                    parameters.CodigoDRE,
                                                                                                    parameters.CodigoEscola,
                                                                                                    parameters.CodigoTurmaEol, parameters.CodigoCurso);



                        return(Ok(result));
                    }
                    else
                    {
                        PollReportMathStudentResult result = BuscaDadosMathTurmaAsync(parameters.Proficiency,
                                                                                      parameters.Term,
                                                                                      parameters.CodigoDRE,
                                                                                      parameters.CodigoEscola,
                                                                                      parameters.CodigoTurmaEol, parameters.CodigoCurso);


                        return(Ok(result));
                    }
                }

                else    // cONSOLIDADO
                {
                    var result = await BuscaDadosMathAsync(parameters, "2019", parameters.CodigoDRE, parameters.CodigoEscola, parameters.CodigoCurso);

                    return(Ok(result));
                }
            }

            return(NotFound());
        }
        public async Task <ActionResult <string> > ObterDados([FromBody] ParametersModel parameters)
        {
            var businessPoll = new Data.Business.PollPortuguese(_config);

            if (int.Parse(parameters.CodigoCurso) >= 7 && parameters.Discipline == "Matemática")
            {
                var filtro = new filtrosRelatorioDTO()
                {
                    AnoEscolar          = int.Parse(parameters.CodigoCurso),
                    AnoLetivo           = int.Parse(parameters.SchoolYear),
                    CodigoDre           = parameters.CodigoDRE,
                    CodigoUe            = parameters.CodigoEscola,
                    CodigoTurmaEol      = parameters.CodigoTurmaEol,
                    DescricaoDisciplina = parameters.Discipline,
                    DescricaoPeriodo    = parameters.Term,
                };
                var obj = new RelatorioMatematicaAutoral();

                if (parameters.ClassroomReport)
                {
                    var relatorioPorTurma = await obj.ObterRelatorioPorTurma(filtro);

                    return(Ok(relatorioPorTurma));
                }
                var relatorioConsolidado = await obj.ObterRelatorioMatematicaAutoral(filtro);

                return(Ok(relatorioConsolidado));
            }

            Periodo periodo = await businessPoll.ObterPeriodoRelatorioPorDescricao(parameters.Term);


            if (parameters.Discipline == "Língua Portuguesa")
            {
                if (parameters.ClassroomReport)
                {
                    if (Convert.ToInt32(parameters.CodigoCurso) < 4)
                    {
                        PollReportPortugueseStudentResult result = new PollReportPortugueseStudentResult();
                        result = await BuscarDadosPorTurmaAsync(parameters, periodo);

                        return(Ok(result));
                    }

                    if (parameters.GrupoId != null && parameters.GrupoId.Equals("e27b99a3-789d-43fb-a962-7df8793622b1"))
                    {
                        var relatorioCapacidadeLeitura = new RelatorioPortuguesCapacidadeLeitura();
                        var relatorio = await relatorioCapacidadeLeitura.ObterRelatorioCapacidadeLeituraPorTurma(new RelatorioPortuguesFiltroDto
                        {
                            AnoEscolar             = Convert.ToInt32(parameters.CodigoCurso),
                            AnoLetivo              = Convert.ToInt32(parameters.SchoolYear),
                            CodigoDre              = parameters.CodigoDRE,
                            CodigoUe               = parameters.CodigoEscola,
                            ComponenteCurricularId = "c65b2c0a-7a58-4d40-b474-23f0982f14b1",
                            GrupoId     = "e27b99a3-789d-43fb-a962-7df8793622b1",
                            PeriodoId   = periodo.Id,
                            CodigoTurma = parameters.CodigoTurmaEol
                        });

                        return(Ok(relatorio));
                    }

                    return(Ok(await ObterRelatorioProducaoTextoLeituraVozAlta(parameters, periodo)));
                }
                else
                {
                    if (periodo == null)
                    {
                        return(StatusCode(500, $"Não foi possivel encontrar o périodo com descrição {parameters.Term}"));
                    }

                    if (Convert.ToInt32(parameters.CodigoCurso) < 4)
                    {
                        PollReportPortugueseResult result = new PollReportPortugueseResult();
                        result = await BuscarDadosSyncAsync(parameters, parameters.SchoolYear, parameters.CodigoDRE, parameters.CodigoEscola, parameters.CodigoCurso, businessPoll, periodo);

                        return(Ok(result));
                    }

                    if (parameters.GrupoId.Equals("e27b99a3-789d-43fb-a962-7df8793622b1"))
                    {
                        var relatorioCapacidadeLeitura = new RelatorioPortuguesCapacidadeLeitura();
                        var relatorioCapacidade        = await relatorioCapacidadeLeitura.ObterRelatorioCapacidadeLeitura(new RelatorioPortuguesFiltroDto
                        {
                            AnoEscolar             = Convert.ToInt32(parameters.CodigoCurso),
                            AnoLetivo              = Convert.ToInt32(parameters.SchoolYear),
                            CodigoDre              = parameters.CodigoDRE,
                            CodigoUe               = parameters.CodigoEscola,
                            ComponenteCurricularId = "c65b2c0a-7a58-4d40-b474-23f0982f14b1",
                            GrupoId   = "e27b99a3-789d-43fb-a962-7df8793622b1",
                            PeriodoId = periodo.Id
                        });

                        return(Ok(relatorioCapacidade));
                    }
                    return(Ok(await BuscarDadosAutoralAsync(parameters, periodo.Id)));
                }
            }
            else if (parameters.Discipline == "Matemática")
            {
                if (parameters.ClassroomReport)
                {
                    if (parameters.Proficiency == "Números")
                    {
                        PollReportMathStudentNumbersResult result = await BuscaDadosMathTurmaNumbersAsync(parameters.Proficiency,
                                                                                                          parameters.Term,
                                                                                                          parameters.CodigoDRE,
                                                                                                          parameters.CodigoEscola,
                                                                                                          parameters.CodigoTurmaEol, parameters.CodigoCurso, parameters.SchoolYear);

                        return(Ok(result));
                    }
                    else
                    {
                        PollReportMathStudentResult result = await BuscaDadosMathTurmaAsync(parameters.Proficiency,
                                                                                            parameters.Term,
                                                                                            parameters.CodigoDRE,
                                                                                            parameters.CodigoEscola,
                                                                                            parameters.CodigoTurmaEol, parameters.CodigoCurso, parameters.SchoolYear);

                        return(Ok(result));
                    }
                }

                else    // cONSOLIDADO
                {
                    var result = await BuscaDadosMathAsync(parameters, parameters.SchoolYear, parameters.CodigoDRE, parameters.CodigoEscola, parameters.CodigoCurso, periodo);

                    return(Ok(result));
                }
            }

            return(NotFound());
        }
        public async Task <PollReportPortugueseResult> BuscarDadosRelatorioPortugues(string proficiencia, string bimestre, string anoLetivo, string codigoDre, string codigoEscola, string codigoCurso)
        {
            var liststudentPollPortuguese = new List <StudentPollPortuguese>();

            var listReturn = new List <PollReportPortugueseItem>();

            using (Contexts.SMEManagementContext db = new Contexts.SMEManagementContext())
            {
                var listStudentsPollPortuguese    = new List <Models.Academic.PortuguesePoll>();
                IQueryable <PortuguesePoll> query = db.Set <PortuguesePoll>();

                query = db.PortuguesePolls.Where(x => x.schoolYear == anoLetivo);

                //montando filtros genericamente
                if (!string.IsNullOrWhiteSpace(codigoDre))
                {
                    query = query.Where(u => u.dreCodeEol == codigoDre);
                }

                if (!string.IsNullOrWhiteSpace(codigoEscola))
                {
                    query = query.Where(u => u.schoolCodeEol == codigoEscola);
                }

                if (!string.IsNullOrWhiteSpace(codigoCurso))
                {
                    query = query.Where(u => u.yearClassroom == codigoCurso);
                }

                List <SME.Pedagogico.Gestao.Data.DTO.PortChartDataModel> graficos = new List <SME.Pedagogico.Gestao.Data.DTO.PortChartDataModel>();

                switch (bimestre)
                {
                case "1° Bimestre":
                {
                    if (proficiencia == "Escrita")
                    {
                        var writing1B = query.GroupBy(fu => fu.writing1B).Select(g => new { Label = g.Key, Value = g.Count() }).ToList();

                        foreach (var item in writing1B)
                        {
                            if (!item.Label.Trim().Equals(""))
                            {
                                PollReportPortugueseItem itemRetorno = new PollReportPortugueseItem();
                                itemRetorno.OptionName      = MontarTextoProficiencia(item.Label);
                                itemRetorno.studentQuantity = item.Value;
                                listReturn.Add(itemRetorno);

                                graficos.Add(new SME.Pedagogico.Gestao.Data.DTO.PortChartDataModel()
                                    {
                                        Name  = MontarTextoProficiencia(item.Label),
                                        Value = item.Value
                                    });
                            }
                        }
                    }

                    else         //leitura
                    {
                        var reading1B = query.GroupBy(fu => fu.reading1B).Select(g => new { Label = g.Key, Value = g.Count() }).ToList();

                        foreach (var item in reading1B)
                        {
                            if (!item.Label.Trim().Equals(""))
                            {
                                PollReportPortugueseItem itemRetorno = new PollReportPortugueseItem();
                                itemRetorno.OptionName      = MontarTextoProficiencia(item.Label);
                                itemRetorno.studentQuantity = item.Value;
                                listReturn.Add(itemRetorno);

                                graficos.Add(new SME.Pedagogico.Gestao.Data.DTO.PortChartDataModel()
                                    {
                                        Name  = MontarTextoProficiencia(item.Label),
                                        Value = item.Value
                                    });
                            }
                        }
                    }
                }
                break;

                case "2° Bimestre":
                {
                    if (proficiencia == "Escrita")
                    {
                        var writing2B = query.GroupBy(fu => fu.writing2B).Select(g => new { Label = g.Key, Value = g.Count() }).ToList();

                        foreach (var item in writing2B)
                        {
                            if (!item.Label.Trim().Equals(""))
                            {
                                PollReportPortugueseItem itemRetorno = new PollReportPortugueseItem();
                                itemRetorno.OptionName      = MontarTextoProficiencia(item.Label);
                                itemRetorno.studentQuantity = item.Value;
                                listReturn.Add(itemRetorno);

                                graficos.Add(new SME.Pedagogico.Gestao.Data.DTO.PortChartDataModel()
                                    {
                                        Name  = MontarTextoProficiencia(item.Label),
                                        Value = item.Value
                                    });
                            }
                        }
                    }
                    else         //leitura
                    {
                        var reading2B = query.GroupBy(fu => fu.reading2B).Select(g => new { Label = g.Key, Value = g.Count() }).ToList();

                        foreach (var item in reading2B)
                        {
                            if (!item.Label.Trim().Equals(""))
                            {
                                PollReportPortugueseItem itemRetorno = new PollReportPortugueseItem();
                                itemRetorno.OptionName      = MontarTextoProficiencia(item.Label);
                                itemRetorno.studentQuantity = item.Value;
                                listReturn.Add(itemRetorno);

                                graficos.Add(new SME.Pedagogico.Gestao.Data.DTO.PortChartDataModel()
                                    {
                                        Name  = MontarTextoProficiencia(item.Label),
                                        Value = item.Value
                                    });
                            }
                        }
                    }
                }
                break;

                case "3° Bimestre":
                {
                    if (proficiencia == "Escrita")
                    {
                        var writing3B = query.GroupBy(fu => fu.writing3B).Select(g => new { Label = g.Key, Value = g.Count() }).ToList();

                        foreach (var item in writing3B)
                        {
                            if (!item.Label.Trim().Equals(""))
                            {
                                PollReportPortugueseItem itemRetorno = new PollReportPortugueseItem();
                                itemRetorno.OptionName      = MontarTextoProficiencia(item.Label);
                                itemRetorno.studentQuantity = item.Value;
                                listReturn.Add(itemRetorno);

                                graficos.Add(new SME.Pedagogico.Gestao.Data.DTO.PortChartDataModel()
                                    {
                                        Name  = MontarTextoProficiencia(item.Label),
                                        Value = item.Value
                                    });
                            }
                        }
                    }
                    else         //leitura
                    {
                        var reading3B = query.GroupBy(fu => fu.reading3B).Select(g => new { Label = g.Key, Value = g.Count() }).ToList();

                        foreach (var item in reading3B)
                        {
                            if (!item.Label.Trim().Equals(""))
                            {
                                PollReportPortugueseItem itemRetorno = new PollReportPortugueseItem();
                                itemRetorno.OptionName      = MontarTextoProficiencia(item.Label);
                                itemRetorno.studentQuantity = item.Value;
                                listReturn.Add(itemRetorno);

                                graficos.Add(new SME.Pedagogico.Gestao.Data.DTO.PortChartDataModel()
                                    {
                                        Name  = MontarTextoProficiencia(item.Label),
                                        Value = item.Value
                                    });
                            }
                        }
                    }
                }
                break;

                case "4° Bimestre":
                {
                    if (proficiencia == "Escrita")
                    {
                        var writing4B = query.GroupBy(fu => fu.writing4B).Select(g => new { Label = g.Key, Value = g.Count() }).ToList();

                        foreach (var item in writing4B)
                        {
                            if (!item.Label.Trim().Equals(""))
                            {
                                PollReportPortugueseItem itemRetorno = new PollReportPortugueseItem();
                                itemRetorno.OptionName      = MontarTextoProficiencia(item.Label);
                                itemRetorno.studentQuantity = item.Value;
                                listReturn.Add(itemRetorno);

                                graficos.Add(new SME.Pedagogico.Gestao.Data.DTO.PortChartDataModel()
                                    {
                                        Name  = MontarTextoProficiencia(item.Label),
                                        Value = item.Value
                                    });
                            }
                        }
                    }
                    else         //leitura
                    {
                        var reading4B = query.GroupBy(fu => fu.reading4B).Select(g => new { Label = g.Key, Value = g.Count() }).ToList();

                        foreach (var item in reading4B)
                        {
                            if (!item.Label.Trim().Equals(""))
                            {
                                PollReportPortugueseItem itemRetorno = new PollReportPortugueseItem();
                                itemRetorno.OptionName      = MontarTextoProficiencia(item.Label);
                                itemRetorno.studentQuantity = item.Value;
                                listReturn.Add(itemRetorno);

                                graficos.Add(new SME.Pedagogico.Gestao.Data.DTO.PortChartDataModel()
                                    {
                                        Name  = MontarTextoProficiencia(item.Label),
                                        Value = item.Value
                                    });
                            }
                        }
                    }
                }
                break;
                }

                int total = 0;
                foreach (var item in listReturn)
                {
                    total += item.studentQuantity;
                }

                foreach (var item in listReturn)
                {
                    item.StudentPercentage = (double)item.studentQuantity / (double)total * 100;
                }

                SME.Pedagogico.Gestao.Data.DTO.PollReportPortugueseResult retorno = new PollReportPortugueseResult();
                retorno.Results = listReturn;

                var listaGrafico = graficos.GroupBy(fu => fu.Name).Select(g => new { Label = g.Key, Value = g.Sum(soma => soma.Value) }).ToList();
                graficos = new List <SME.Pedagogico.Gestao.Data.DTO.PortChartDataModel>();
                foreach (var item in listaGrafico)
                {
                    graficos.Add(new SME.Pedagogico.Gestao.Data.DTO.PortChartDataModel()
                    {
                        Name  = item.Label,
                        Value = item.Value
                    });
                }
                retorno.ChartData = graficos;

                return(retorno);
            }
        }