public async Task <IEnumerable <AlunoDadosBasicosDto> > ObterDadosAlunos(string turmaCodigo, int anoLetivo, int semestre) { var turma = await consultasTurma.ObterPorCodigo(turmaCodigo); var periodosAberto = await consultasPeriodoFechamento.ObterPeriodosComFechamentoEmAberto(turma.UeId); 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(turma.AnoLetivo, turma.ModalidadeTipoCalendario, semestre); if (tipoCalendario == null) { throw new NegocioException("Não foi encontrado calendário cadastrado para a turma"); } var periodosEscolares = await consultasPeriodoEscolar.ObterPeriodosEscolares(tipoCalendario.Id); if (periodosEscolares == null) { throw new NegocioException("Não foram encontrados periodos escolares cadastrados para a turma"); } periodoEscolar = consultasPeriodoEscolar.ObterPeriodoPorData(periodosEscolares, DateTime.Today); if (periodoEscolar == null) { periodoEscolar = consultasPeriodoEscolar.ObterUltimoPeriodoPorData(periodosEscolares, DateTime.Today); } } var dadosAlunos = await consultasTurma.ObterDadosAlunos(turmaCodigo, anoLetivo, periodoEscolar); return(dadosAlunos.OrderBy(w => w.Nome)); }