Ejemplo n.º 1
0
        private async Task <PeriodoEscolarDto> BuscaPeriodo(Turma turma, int bimestre)
        {
            var tipoCalendario = await repositorioTipoCalendario.BuscarPorAnoLetivoEModalidade(turma.AnoLetivo, turma.ModalidadeCodigo == Modalidade.EJA?ModalidadeTipoCalendario.EJA : ModalidadeTipoCalendario.FundamentalMedio);

            PeriodoEscolarDto periodo = null;

            // Eja possui 2 calendarios por ano
            if (turma.ModalidadeCodigo == Modalidade.EJA)
            {
                if (turma.Semestre == 1)
                {
                    periodo = (await consultasPeriodoEscolar.ObterPorTipoCalendario(tipoCalendario.Id)).Periodos
                              .FirstOrDefault(p => p.Bimestre == bimestre && p.PeriodoInicio < new DateTime(turma.AnoLetivo, 6, 1));
                }
                else
                {
                    periodo = (await consultasPeriodoEscolar.ObterPorTipoCalendario(tipoCalendario.Id)).Periodos
                              .FirstOrDefault(p => p.Bimestre == bimestre && p.PeriodoFim > new DateTime(turma.AnoLetivo, 6, 1));
                }
            }
            else
            {
                periodo = (await consultasPeriodoEscolar.ObterPorTipoCalendario(tipoCalendario.Id)).Periodos
                          .FirstOrDefault(p => p.Bimestre == bimestre);
            }

            if (!await consultasTurma.TurmaEmPeriodoAberto(turma, DateTime.Today, bimestre, tipoCalendario: tipoCalendario))
            {
                throw new NegocioException($"Período do {bimestre}º Bimestre não está aberto.");
            }

            return(periodo);
        }
        private PeriodoEscolarDto BuscaPeriodo(int anoLetivo, Modalidade modalidadeCodigo, int bimestre, int semestre)
        {
            var tipoCalendario = repositorioTipoCalendario.BuscarPorAnoLetivoEModalidade(anoLetivo, modalidadeCodigo == Modalidade.EJA ? ModalidadeTipoCalendario.EJA : ModalidadeTipoCalendario.FundamentalMedio);

            PeriodoEscolarDto periodo = null;

            // Eja possui 2 calendarios por ano
            if (modalidadeCodigo == Modalidade.EJA)
            {
                if (semestre == 1)
                {
                    periodo = consultasPeriodoEscolar.ObterPorTipoCalendario(tipoCalendario.Id).Periodos
                              .FirstOrDefault(p => p.Bimestre == bimestre && p.PeriodoInicio < new DateTime(anoLetivo, 6, 1));
                }
                else
                {
                    periodo = consultasPeriodoEscolar.ObterPorTipoCalendario(tipoCalendario.Id).Periodos
                              .FirstOrDefault(p => p.Bimestre == bimestre && p.PeriodoFim > new DateTime(anoLetivo, 6, 1));
                }
            }
            else
            {
                periodo = consultasPeriodoEscolar.ObterPorTipoCalendario(tipoCalendario.Id).Periodos
                          .FirstOrDefault(p => p.Bimestre == bimestre);
            }

            // TODO alterar verificação para checagem de periodo de fechamento e reabertura do fechamento depois de implementado
            if (DateTime.Now < periodo.PeriodoInicio || DateTime.Now > periodo.PeriodoFim)
            {
                throw new NegocioException($"Período do {bimestre}º Bimestre não está aberto.");
            }

            return(periodo);
        }
        private PeriodoEscolar ObterPeriodo(long Id, PeriodoEscolarDto periodo)
        {
            var periodoSalvar = repositorioPeriodo.ObterPorId(Id);

            periodoSalvar.PeriodoInicio = periodo.PeriodoInicio.Date;
            periodoSalvar.PeriodoFim    = periodo.PeriodoFim.Date;

            return(periodoSalvar);
        }
 private PeriodoEscolar MapearParaDominio(PeriodoEscolarDto periodoDto, long tipoCalendario)
 {
     return(new PeriodoEscolar
     {
         Bimestre = periodoDto.Bimestre,
         PeriodoInicio = periodoDto.PeriodoInicio.Date,
         PeriodoFim = periodoDto.PeriodoFim.Date,
         TipoCalendarioId = tipoCalendario,
         Migrado = false,
     });
 }
        private IndicativoFrequenciaDto ObterIndicativoFrequencia(AlunoPorTurmaResposta aluno, string disciplinaId, PeriodoEscolarDto bimestre, int percentualAlerta, int percentualCritico)
        {
            var frequenciaAluno = repositorioFrequenciaAlunoDisciplinaPeriodo.Obter(aluno.CodigoAluno, disciplinaId, bimestre.PeriodoInicio, bimestre.PeriodoFim, TipoFrequenciaAluno.PorDisciplina);

            // Frequencia não calculada
            if (frequenciaAluno == null)
            {
                return(null);
            }

            int percentualFrequencia = (int)Math.Round(frequenciaAluno.PercentualFrequencia, 0);

            // Critico
            if (percentualFrequencia <= percentualCritico)
            {
                return new IndicativoFrequenciaDto()
                       {
                           Tipo = TipoIndicativoFrequencia.Critico, Percentual = percentualFrequencia
                       }
            }
            ;

            // Alerta
            if (percentualFrequencia <= percentualAlerta)
            {
                return new IndicativoFrequenciaDto()
                       {
                           Tipo = TipoIndicativoFrequencia.Alerta, Percentual = percentualFrequencia
                       }
            }
            ;

            return(null);
        }
Ejemplo n.º 6
0
        public MarcadorFrequenciaDto ObterMarcadorAluno(AlunoPorTurmaResposta aluno, PeriodoEscolarDto bimestre)
        {
            MarcadorFrequenciaDto marcador = null;

            string dataSituacao = $"{aluno.DataSituacao.Day}/{aluno.DataSituacao.Month}/{aluno.DataSituacao.Year}";

            switch (aluno.CodigoSituacaoMatricula)
            {
            case SituacaoMatriculaAluno.Ativo:
                // Macador "Novo" durante 15 dias se iniciou depois do inicio do bimestre
                if ((aluno.DataSituacao > bimestre.PeriodoInicio) && (aluno.DataSituacao.AddDays(15) <= DateTime.Now.Date))
                {
                    marcador = new MarcadorFrequenciaDto()
                    {
                        Tipo      = TipoMarcadorFrequencia.Novo,
                        Descricao = $"Estudante Novo: Data da matrícula {dataSituacao}"
                    }
                }
                ;
                break;

            case SituacaoMatriculaAluno.Transferido:
                var detalheEscola = aluno.Transferencia_Interna ?
                                    $"para escola {aluno.EscolaTransferencia} e turma {aluno.TurmaTransferencia}" :
                                    "para outras redes";

                marcador = new MarcadorFrequenciaDto()
                {
                    Tipo      = TipoMarcadorFrequencia.Transferido,
                    Descricao = $"Estudante transferido: {detalheEscola} em {dataSituacao}"
                };

                break;

            case SituacaoMatriculaAluno.RemanejadoSaida:
                marcador = new MarcadorFrequenciaDto()
                {
                    Tipo      = TipoMarcadorFrequencia.Remanejado,
                    Descricao = $"Estudante remanejado: turma {aluno.TurmaRemanejamento} em {dataSituacao}"
                };

                break;

            case SituacaoMatriculaAluno.Desistente:
            case SituacaoMatriculaAluno.VinculoIndevido:
            case SituacaoMatriculaAluno.Falecido:
            case SituacaoMatriculaAluno.NaoCompareceu:
            case SituacaoMatriculaAluno.Deslocamento:
            case SituacaoMatriculaAluno.Cessado:
            case SituacaoMatriculaAluno.ReclassificadoSaida:
                marcador = new MarcadorFrequenciaDto()
                {
                    Tipo      = TipoMarcadorFrequencia.Inativo,
                    Descricao = $"Aluno inativo em {dataSituacao}"
                };

                break;

            default:
                break;
            }

            return(marcador);
        }
Ejemplo n.º 7
0
        private async Task <List <string> > GravarCompensacaoAlunos(bool alteracao, long compensacaoId, string turmaId, string disciplinaId, IEnumerable <CompensacaoAusenciaAlunoDto> alunosDto, PeriodoEscolarDto periodo)
        {
            var mensagensExcessao = new StringBuilder();

            List <CompensacaoAusenciaAluno>        listaPersistencia = new List <CompensacaoAusenciaAluno>();
            IEnumerable <CompensacaoAusenciaAluno> alunos            = new List <CompensacaoAusenciaAluno>();

            if (alteracao)
            {
                alunos = await repositorioCompensacaoAusenciaAluno.ObterPorCompensacao(compensacaoId);
            }

            // excluir os removidos da lista
            foreach (var alunoRemovido in alunos.Where(a => !alunosDto.Any(d => d.Id == a.CodigoAluno)))
            {
                alunoRemovido.Excluir();
                listaPersistencia.Add(alunoRemovido);
            }

            // altera as faltas compensadas
            foreach (var aluno in alunos.Where(a => !a.Excluido))
            {
                var frequenciaAluno = repositorioFrequencia.ObterPorAlunoDisciplinaData(aluno.CodigoAluno, disciplinaId, periodo.PeriodoFim);
                if (frequenciaAluno == null)
                {
                    mensagensExcessao.Append($"O aluno(a) [{aluno.CodigoAluno}] não possui ausência para compensar. ");
                    continue;
                }

                var faltasNaoCompensadas = frequenciaAluno.NumeroFaltasNaoCompensadas + aluno.QuantidadeFaltasCompensadas;

                var alunoDto = alunosDto.FirstOrDefault(a => a.Id == aluno.CodigoAluno);
                if (alunoDto.QtdFaltasCompensadas > faltasNaoCompensadas)
                {
                    mensagensExcessao.Append($"O aluno(a) [{alunoDto.Id}] possui apenas {frequenciaAluno.NumeroFaltasNaoCompensadas} faltas não compensadas. ");
                    continue;
                }

                aluno.QuantidadeFaltasCompensadas = alunoDto.QtdFaltasCompensadas;
                listaPersistencia.Add(aluno);
            }

            // adiciona os alunos novos
            foreach (var alunoDto in alunosDto.Where(d => !alunos.Any(a => a.CodigoAluno == d.Id)))
            {
                var frequenciaAluno = repositorioFrequencia.ObterPorAlunoDisciplinaData(alunoDto.Id, disciplinaId, periodo.PeriodoFim);
                if (frequenciaAluno == null)
                {
                    mensagensExcessao.Append($"O aluno(a) [{alunoDto.Id}] não possui ausência para compensar. ");
                    continue;
                }

                if (alunoDto.QtdFaltasCompensadas > frequenciaAluno.NumeroFaltasNaoCompensadas)
                {
                    mensagensExcessao.Append($"O aluno(a) [{alunoDto.Id}] possui apenas {frequenciaAluno.NumeroFaltasNaoCompensadas} faltas não compensadas. ");
                    continue;
                }

                listaPersistencia.Add(MapearCompensacaoAlunoEntidade(compensacaoId, alunoDto));
            }

            if (!string.IsNullOrEmpty(mensagensExcessao.ToString()))
            {
                throw new NegocioException(mensagensExcessao.ToString());
            }

            listaPersistencia.ForEach(aluno => repositorioCompensacaoAusenciaAluno.Salvar(aluno));

            // Recalcula Frequencia dos alunos envolvidos na Persistencia
            return(listaPersistencia.Select(a => a.CodigoAluno).ToList());
        }