private async Task MontaSecoes(RelatorioParecerConclusivoDto retorno, IEnumerable <RelatorioParecerConclusivoRetornoDto> parecesParaTratar, int anoLetivo, string dreCodigoEnviado,
                                       string ueCodigoEnviado, long cicloIdEnviado, int modalidadeId, int?semestre, string[] anos, long parecerConclusivoId)
        {
            IEnumerable <string> dresCodigos;

            if (retorno.DreNome == "Todas")
            {
                var dresRetorno = await mediator.Send(new ObterTodasDresQuery());

                dresCodigos = dresRetorno.Select(a => a.Codigo);

                foreach (var dre in dresRetorno)
                {
                    var dreParaAdicionar = new RelatorioParecerConclusivoDreDto();
                    dreParaAdicionar.Codigo = dre.Codigo;
                    dreParaAdicionar.Nome   = dre.Abreviacao;

                    await TrataUes(parecesParaTratar, dreParaAdicionar, anoLetivo, dre.Id, ueCodigoEnviado, cicloIdEnviado, modalidadeId, semestre, anos, parecerConclusivoId);

                    retorno.Dres.Add(dreParaAdicionar);
                }
            }
            else
            {
                var dreUnicaParaAdicionar = await mediator.Send(new ObterDrePorCodigoQuery()
                {
                    DreCodigo = dreCodigoEnviado
                });

                var dreParaAdicionar = new RelatorioParecerConclusivoDreDto();
                dreParaAdicionar.Codigo = dreUnicaParaAdicionar.Codigo;
                dreParaAdicionar.Nome   = dreUnicaParaAdicionar.Abreviacao;

                if (retorno.UeNome == "Todas")
                {
                    await TrataUes(parecesParaTratar, dreParaAdicionar, anoLetivo, dreUnicaParaAdicionar.Id, "", cicloIdEnviado, modalidadeId, semestre, anos, parecerConclusivoId);
                }
                else
                {
                    await TrataUes(parecesParaTratar, dreParaAdicionar, anoLetivo, dreUnicaParaAdicionar.Id, ueCodigoEnviado, cicloIdEnviado, modalidadeId, semestre, anos, parecerConclusivoId);
                }

                retorno.Dres.Add(dreParaAdicionar);
            }
        }
        private async Task TrataUes(IEnumerable <RelatorioParecerConclusivoRetornoDto> parecesParaTratar, RelatorioParecerConclusivoDreDto dreParaAdicionar, int anoLetivo,
                                    long dreId, string ueCodigoEnviado, long cicloIdEnviado, int modalidadeId, int?semestre, string[] anos, long parecerConclusivoId)
        {
            List <Ue> uesDaDre = new List <Ue>();

            if (string.IsNullOrEmpty(ueCodigoEnviado))
            {
                uesDaDre = (await mediator.Send(new ObterUesPorDreSemestreModadalidadeAnoIdQuery(dreId, semestre, modalidadeId, anos))).ToList();
            }
            else
            {
                var ue = await mediator.Send(new ObterUePorCodigoQuery(ueCodigoEnviado));

                uesDaDre.Add(ue);
            }

            foreach (var ueDaDre in uesDaDre)
            {
                var ueParaAdicionar = new RelatorioParecerConclusivoUeDto();
                ueParaAdicionar.Nome   = ueDaDre.NomeComTipoEscola;
                ueParaAdicionar.Codigo = ueDaDre.Codigo;

                await TrataCiclosDaUe(parecesParaTratar, ueDaDre.Id, ueParaAdicionar, anoLetivo, modalidadeId, cicloIdEnviado, anos, parecerConclusivoId);

                dreParaAdicionar.Ues.Add(ueParaAdicionar);
            }
        }