public async Task <IEnumerable <AlunoDadosBasicosDto> > Handle(ListarAlunosDaTurmaPorComponenteRegistroIndividualQuery request, CancellationToken cancellationToken)
        {
            var periodosAberto = await repositorioEventoFechamento.ObterPeriodosFechamentoEmAberto(request.Turma.UeId, DateTime.Now.Date);

            PeriodoEscolar periodoEscolar;

            if (periodosAberto != null && periodosAberto.Any())
            {
                // caso tenha mais de um periodo em aberto (abertura e reabertura) usa o ultimo bimestre
                periodoEscolar = periodosAberto.OrderBy(c => c.Bimestre).Last();
            }
            else
            {
                // Caso não esteja em periodo de fechamento ou escolar busca o ultimo existente
                var tipoCalendario = await repositorioTipoCalendario.BuscarPorAnoLetivoEModalidade(request.Turma.AnoLetivo, request.Turma.ModalidadeTipoCalendario, request.Turma.Semestre);

                if (tipoCalendario == null)
                {
                    throw new NegocioException("Não foi encontrado calendário cadastrado para a turma");
                }
                var periodosEscolares = await mediator.Send(new ObterPeriodosEscolaresPorTipoCalendarioIdQuery(tipoCalendario.Id));

                if (periodosEscolares == null)
                {
                    throw new NegocioException("Não foram encontrados periodos escolares cadastrados para a turma");
                }

                periodoEscolar = periodosEscolares?.FirstOrDefault(p => p.DataDentroPeriodo(DateTime.Today));
                if (periodoEscolar == null)
                {
                    periodoEscolar = periodosEscolares.OrderByDescending(o => o.PeriodoInicio).FirstOrDefault(p => p.PeriodoFim <= DateTime.Today);
                }
            }

            var dadosAlunos = await mediator.Send(new ObterDadosAlunosQuery(request.Turma.CodigoTurma, request.Turma.AnoLetivo, periodoEscolar));

            return(dadosAlunos.OrderBy(w => w.Nome));
        }
Exemple #2
0
 public async Task <IEnumerable <PeriodoEscolar> > ObterPeriodosComFechamentoEmAberto(long ueId)
 => await repositorioEventoFechamento.ObterPeriodosFechamentoEmAberto(ueId, DateTime.Now.Date);