private CompensacaoAusencia MapearEntidade(long id, CompensacaoAusenciaDto compensacaoDto)
        {
            CompensacaoAusencia compensacao = new CompensacaoAusencia();

            if (id > 0)
            {
                compensacao = repositorioCompensacaoAusencia.ObterPorId(id);
            }

            compensacao.DisciplinaId = compensacaoDto.DisciplinaId;
            compensacao.Bimestre     = compensacaoDto.Bimestre;
            compensacao.Nome         = compensacaoDto.Atividade;
            compensacao.Descricao    = compensacaoDto.Descricao;

            return(compensacao);
        }
示例#2
0
        public void NotificarCompensacaoAusencia(long compensacaoId)
        {
            // Verifica se compensação possui alunos vinculados
            var alunos = repositorioCompensacaoAusenciaAluno.ObterPorCompensacao(compensacaoId).Result;

            if (alunos == null || !alunos.Any())
            {
                return;
            }

            // Verifica se possui aluno não notificado na compensação
            alunos = alunos.Where(a => !a.Notificado);
            if (!alunos.Any())
            {
                return;
            }

            // Carrega dados da compensacao a notificar
            var          compensacao   = repositorioCompensacaoAusencia.ObterPorId(compensacaoId);
            var          turma         = repositorioTurma.ObterPorId(compensacao.TurmaId);
            var          ue            = repositorioUe.ObterUEPorTurma(turma.CodigoTurma);
            var          dre           = repositorioDre.ObterPorId(ue.DreId);
            var          disciplinaEOL = ObterNomeDisciplina(compensacao.DisciplinaId);
            MeusDadosDto professor     = servicoEOL.ObterMeusDados(compensacao.CriadoRF).Result;

            // Carrega dados dos alunos não notificados
            var alunosTurma = servicoEOL.ObterAlunosPorTurma(turma.CodigoTurma).Result;
            var alunosDto   = new List <CompensacaoAusenciaAlunoQtdDto>();

            foreach (var aluno in alunos)
            {
                var alunoEol = alunosTurma.FirstOrDefault(a => a.CodigoAluno == aluno.CodigoAluno);
                alunosDto.Add(new CompensacaoAusenciaAlunoQtdDto()
                {
                    NumeroAluno            = alunoEol.NumeroAlunoChamada,
                    CodigoAluno            = aluno.CodigoAluno,
                    NomeAluno              = alunoEol.NomeAluno,
                    QuantidadeCompensacoes = aluno.QuantidadeFaltasCompensadas
                });
            }

            var gestores = BuscaGestoresUe(ue.CodigoUe);

            if (gestores != null && gestores.Any())
            {
                foreach (var gestor in gestores)
                {
                    var notificacaoId = NotificarCompensacaoAusencia(compensacaoId
                                                                     , gestor.Usuario
                                                                     , professor.Nome
                                                                     , professor.CodigoRf
                                                                     , disciplinaEOL
                                                                     , turma.CodigoTurma
                                                                     , turma.Nome
                                                                     , turma.ModalidadeCodigo.GetAttribute <DisplayAttribute>().ShortName
                                                                     , ue.CodigoUe
                                                                     , ue.Nome
                                                                     , ue.TipoEscola.GetAttribute <DisplayAttribute>().ShortName
                                                                     , dre.CodigoDre
                                                                     , dre.Nome
                                                                     , compensacao.Bimestre
                                                                     , compensacao.Nome
                                                                     , alunosDto);

                    // Grava vinculo de notificação x compensação
                    repositorioNotificacaoCompensacaoAusencia.Inserir(notificacaoId, compensacaoId);
                }

                // Marca aluno como notificado
                alunosDto.ForEach(alunoDto =>
                {
                    var aluno        = alunos.FirstOrDefault(a => a.CodigoAluno == alunoDto.CodigoAluno);
                    aluno.Notificado = true;
                    repositorioCompensacaoAusenciaAluno.Salvar(aluno);
                });
            }
        }
示例#3
0
        public async Task <CompensacaoAusenciaCompletoDto> ObterPorId(long id)
        {
            var compensacao = repositorioCompensacaoAusencia.ObterPorId(id);

            if (compensacao == null)
            {
                throw new NegocioException("Compensação de ausencia não localizada.");
            }

            var compensacaoDto = MapearParaDtoCompleto(compensacao);

            compensacao.Alunos = await consultasCompensacaoAusenciaAluno.ObterPorCompensacao(compensacao.Id);

            // Busca os nomes de alunos do EOL por turma
            var turma = await repositorioTurma.ObterPorId(compensacao.TurmaId);

            compensacaoDto.TurmaId = turma.CodigoTurma;

            var alunos = await servicoEOL.ObterAlunosPorTurma(turma.CodigoTurma);

            if (alunos == null)
            {
                throw new NegocioException("Alunos não localizados para a turma.");
            }

            var disciplinasEOL = await repositorioComponenteCurricular.ObterDisciplinasPorIds(new long[] { long.Parse(compensacao.DisciplinaId) });

            if (disciplinasEOL == null || !disciplinasEOL.Any())
            {
                throw new NegocioException("Disciplina informada na compensação não localizada no EOL.");
            }

            var quantidadeMaximaCompensacoes = int.Parse(await mediator.Send(new ObterValorParametroSistemaTipoEAnoQuery(TipoParametroSistema.QuantidadeMaximaCompensacaoAusencia, DateTime.Today.Year)));
            var percentualFrequenciaAlerta   = int.Parse(await mediator.Send(new ObterValorParametroSistemaTipoEAnoQuery(disciplinasEOL.First().Regencia ? TipoParametroSistema.CompensacaoAusenciaPercentualRegenciaClasse : TipoParametroSistema.CompensacaoAusenciaPercentualFund2, DateTime.Today.Year)));

            foreach (var aluno in compensacao.Alunos)
            {
                // Adiciona nome do aluno no Dto de retorno
                var alunoEol = alunos.FirstOrDefault(a => a.CodigoAluno == aluno.CodigoAluno);
                if (alunoEol != null)
                {
                    var alunoDto = MapearParaDtoAlunos(aluno);
                    alunoDto.Nome = alunoEol.NomeAluno;

                    var frequenciaAluno = consultasFrequencia.ObterPorAlunoDisciplinaData(aluno.CodigoAluno, compensacao.DisciplinaId, DateTime.Now);
                    if (frequenciaAluno != null)
                    {
                        alunoDto.QuantidadeFaltasTotais       = int.Parse((frequenciaAluno.NumeroFaltasNaoCompensadas + alunoDto.QuantidadeFaltasCompensadas).ToString());
                        alunoDto.PercentualFrequencia         = frequenciaAluno.PercentualFrequencia;
                        alunoDto.MaximoCompensacoesPermitidas = quantidadeMaximaCompensacoes > alunoDto.QuantidadeFaltasTotais ? alunoDto.QuantidadeFaltasTotais : quantidadeMaximaCompensacoes;
                        alunoDto.Alerta = frequenciaAluno.PercentualFrequencia <= percentualFrequenciaAlerta;
                    }
                    else
                    {
                        alunoDto.PercentualFrequencia = 100;
                    }

                    compensacaoDto.Alunos.Add(alunoDto);
                }
            }

            if (disciplinasEOL.First().Regencia)
            {
                var disciplinasRegencia = await consultasCompensacaoAusenciaDisciplinaRegencia.ObterPorCompensacao(compensacao.Id);

                var disciplinasIds = disciplinasRegencia.Select(x => long.Parse(x.DisciplinaId));

                if (!disciplinasIds.Any())
                {
                    return(compensacaoDto);
                }

                disciplinasEOL = await repositorioComponenteCurricular.ObterDisciplinasPorIds(disciplinasIds.ToArray());

                foreach (var disciplinaEOL in disciplinasEOL)
                {
                    compensacaoDto.DisciplinasRegencia.Add(new DisciplinaNomeDto()
                    {
                        Codigo = disciplinaEOL.CodigoComponenteCurricular.ToString(),
                        Nome   = disciplinaEOL.Nome
                    });
                }
            }

            return(compensacaoDto);
        }
示例#4
0
        public async Task Salvar(long id, CompensacaoAusenciaDto compensacaoDto)
        {
            // Busca dados da turma
            var turma = await BuscaTurma(compensacaoDto.TurmaId);

            // Consiste periodo
            var periodo = await BuscaPeriodo(turma, compensacaoDto.Bimestre);

            var usuario = await servicoUsuario.ObterUsuarioLogado();

            await ValidaProfessorPodePersistirTurma(compensacaoDto.TurmaId, usuario.CodigoRf, periodo.PeriodoFim);

            // Valida mesma compensação no ano
            var compensacaoExistente = await repositorioCompensacaoAusencia.ObterPorAnoTurmaENome(turma.AnoLetivo, turma.Id, compensacaoDto.Atividade, id);

            if (compensacaoExistente != null)
            {
                throw new NegocioException($"Já existe essa compensação cadastrada para turma no ano letivo.");
            }

            CompensacaoAusencia compensacaoBanco = new CompensacaoAusencia();

            if (id > 0)
            {
                compensacaoBanco = repositorioCompensacaoAusencia.ObterPorId(id);
            }

            // Carrega dasdos da disciplina no EOL
            await ConsisteDisciplina(long.Parse(compensacaoDto.DisciplinaId), compensacaoDto.DisciplinasRegenciaIds, compensacaoBanco.Migrado);

            // Persiste os dados
            var compensacao = MapearEntidade(compensacaoDto, compensacaoBanco);

            compensacao.TurmaId   = turma.Id;
            compensacao.AnoLetivo = turma.AnoLetivo;

            List <string> codigosAlunosCompensacao = new List <string>();

            unitOfWork.IniciarTransacao();
            try
            {
                await repositorioCompensacaoAusencia.SalvarAsync(compensacao);
                await GravarDisciplinasRegencia(id > 0, compensacao.Id, compensacaoDto.DisciplinasRegenciaIds);

                codigosAlunosCompensacao = await GravarCompensacaoAlunos(id > 0, compensacao.Id, compensacaoDto.TurmaId, compensacaoDto.DisciplinaId, compensacaoDto.Alunos, periodo);

                unitOfWork.PersistirTransacao();
            }
            catch (Exception)
            {
                unitOfWork.Rollback();
                throw;
            }

            if (codigosAlunosCompensacao.Any())
            {
                await mediator.Send(new IncluirFilaCalcularFrequenciaPorTurmaCommand(codigosAlunosCompensacao, periodo.PeriodoFim, compensacaoDto.TurmaId, compensacaoDto.DisciplinaId, periodo.Bimestre));
            }

            Cliente.Executar <IServicoNotificacaoFrequencia>(c => c.NotificarCompensacaoAusencia(compensacao.Id));
        }