public async Task <FrequenciaAluno> ObterFrequenciaGeralAlunoPorTurmaEComponente(string alunoCodigo, string turmaCodigo, string componenteCurricularCodigo = "") { var frequenciaAlunoPeriodos = await repositorioFrequenciaAlunoDisciplinaPeriodo.ObterFrequenciaGeralAluno(alunoCodigo, turmaCodigo, componenteCurricularCodigo); if (frequenciaAlunoPeriodos == null || !frequenciaAlunoPeriodos.Any()) { return(null); } var frequenciaAluno = new FrequenciaAluno() { TotalAulas = frequenciaAlunoPeriodos.Sum(f => f.TotalAulas), TotalAusencias = frequenciaAlunoPeriodos.Sum(f => f.TotalAusencias), TotalCompensacoes = frequenciaAlunoPeriodos.Sum(f => f.TotalCompensacoes), }; var turma = await repositorioTurma.ObterPorCodigo(turmaCodigo); var tipoCalendario = await consultasTipoCalendario.ObterPorTurma(turma); var periodos = await consultasPeriodoEscolar.ObterPeriodosEscolares(tipoCalendario.Id); periodos.ToList().ForEach(p => { var frequenciaCorrespondente = frequenciaAlunoPeriodos.SingleOrDefault(f => f.Bimestre == p.Bimestre); frequenciaAluno.AdicionarFrequenciaBimestre(p.Bimestre, frequenciaCorrespondente != null ? frequenciaCorrespondente.PercentualFrequencia : 100); }); return(frequenciaAluno); }
private async Task <PeriodoEscolar> ObterPeriodoEscolar(Turma turma, int semestre) { var tipoCalendario = await consultasTipoCalendario.BuscarPorAnoLetivoEModalidade(turma.AnoLetivo, turma.ModalidadeTipoCalendario, turma.Semestre); if (tipoCalendario == null) { throw new NegocioException("Tipo de Calendario não localizado para a turma!"); } var periodosEscolares = await consultasPeriodoEscolar.ObterPeriodosEscolares(tipoCalendario.Id); if (periodosEscolares == null || !periodosEscolares.Any()) { throw new NegocioException("Não localizados periodos escolares para o calendario da turma!"); } var periodoAtual = periodosEscolares.FirstOrDefault(c => c.Bimestre == semestre * 2); if (periodoAtual == null) { throw new NegocioException($"Não localizado periodo escolar para o semestre {semestre}!"); } return(periodoAtual); }
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)); }