Пример #1
0
        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);
        }
Пример #2
0
        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));
        }