public async Task <GradeComponenteTurmaAulasDto> ObterGradeAulasTurmaProfessor(string turmaCodigo, long disciplina, int semana, DateTime dataAula, string codigoRf = null, bool ehRegencia = false)
        {
            var ue = repositorioUe.ObterUEPorTurma(turmaCodigo);

            if (ue == null)
            {
                throw new NegocioException("Ue não localizada.");
            }

            var turma = repositorioTurma.ObterPorId(turmaCodigo);

            if (turma == null)
            {
                throw new NegocioException("Turma não localizada.");
            }

            // Busca grade a partir dos dados da abrangencia da turma
            var grade = await ObterGradeTurma(ue.TipoEscola, turma.ModalidadeCodigo, turma.QuantidadeDuracaoAula);

            if (grade == null)
            {
                return(null);
            }

            // verifica se é regencia de classe
            var horasGrade = await TratarHorasGrade(disciplina, turma, grade, ehRegencia);

            if (horasGrade == 0)
            {
                return(null);
            }

            if (string.IsNullOrEmpty(codigoRf))
            {
                var usuario = await servicoUsuario.ObterUsuarioLogado();

                codigoRf = usuario.CodigoRf;
            }

            var horascadastradas = await ObtenhaHorasCadastradas(disciplina, semana, dataAula, codigoRf, turma, ehRegencia);

            return(new GradeComponenteTurmaAulasDto
            {
                QuantidadeAulasGrade = horasGrade,
                QuantidadeAulasRestante = horasGrade - horascadastradas
            });
        }
Exemplo n.º 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);
                });
            }
        }
 public Task <Ue> Handle(ObterUEPorTurmaCodigoQuery request, CancellationToken cancellationToken)
 => Task.FromResult(repositorioUe.ObterUEPorTurma(request.TurmaCodigo));