コード例 #1
0
        private Cargo?EnviaNotificacaoParaNivel(WorkflowAprovacaoNivel nivel, long codigoNotificacao)
        {
            Notificacao    notificacao;
            List <Usuario> usuarios = nivel.Usuarios.ToList();

            if (nivel.Cargo.HasValue)
            {
                var funcionariosRetorno = servicoNotificacao.ObterFuncionariosPorNivel(nivel.Workflow.UeId, nivel.Cargo);

                foreach (var funcionario in funcionariosRetorno)
                {
                    try
                    {
                        usuarios.Add(servicoUsuario.ObterUsuarioPorCodigoRfLoginOuAdiciona(string.Empty, funcionario.Id, buscaLogin: true));
                    }
                    catch (Exception e)
                    {
                        SentrySdk.CaptureException(e);
                    }
                }
            }

            foreach (var usuario in usuarios)
            {
                notificacao = new Notificacao()
                {
                    Ano       = nivel.Workflow.Ano,
                    Categoria = nivel.Workflow.NotificacaoCategoria,
                    DreId     = nivel.Workflow.DreId,
                    UeId      = nivel.Workflow.UeId,
                    Mensagem  = nivel.Workflow.NotifacaoMensagem,
                    Tipo      = nivel.Workflow.NotificacaoTipo,
                    Titulo    = nivel.Workflow.NotifacaoTitulo,
                    TurmaId   = nivel.Workflow.TurmaId,
                    UsuarioId = usuario.Id,
                    Codigo    = codigoNotificacao
                };

                nivel.Adicionar(notificacao);

                repositorioNotificacao.Salvar(notificacao);

                repositorioWorkflowAprovacaoNivelNotificacao.Salvar(new WorkflowAprovacaoNivelNotificacao()
                {
                    NotificacaoId            = notificacao.Id,
                    WorkflowAprovacaoNivelId = nivel.Id
                });

                if (notificacao.Categoria == NotificacaoCategoria.Workflow_Aprovacao)
                {
                    nivel.Status = WorkflowAprovacaoNivelStatus.AguardandoAprovacao;
                    workflowAprovacaoNivel.Salvar(nivel);
                }
            }

            return(nivel.Cargo);
        }
コード例 #2
0
        private async Task NotificarEscolaAlunosFaltososBimestre(string dreCodigo, string dreNome, string dreAbreviacao, TipoEscola tipoEscola, string ueCodigo, string ueNome, double percentualCritico, int bimestre, int ano, IEnumerable <IGrouping <string, AlunoFaltosoBimestreDto> > turmasAgrupadas, ModalidadeTipoCalendario modalidadeTipoCalendario)
        {
            var           titulo   = $"Alunos com baixa frequência da {tipoEscola.ShortName()} {ueNome} - {modalidadeTipoCalendario.Name()}";
            StringBuilder mensagem = new StringBuilder();

            mensagem.AppendLine($"<p>Abaixo segue a lista de turmas com alunos que tiveram frequência geral abaixo de <b>{percentualCritico}%</b> no <b>{bimestre}º bimestre</b> de <b>{ano}</b> da <b>{tipoEscola.ShortName()} {ueNome} (DRE {dreAbreviacao})</b>.</p>");

            foreach (var turmaAgrupada in turmasAgrupadas)
            {
                var alunosDaTurma = await servicoEOL.ObterAlunosPorTurma(turmaAgrupada.Key);

                var alunosFaltososTurma = alunosDaTurma.Where(c => turmaAgrupada.Any(a => a.AlunoCodigo == c.CodigoAluno));

                mensagem.AppendLine($"<p>Turma <b>{turmaAgrupada.First().TurmaModalidade.ShortName()} - {turmaAgrupada.First().TurmaNome}</b></p>");
                mensagem.AppendLine("<table style='margin-left: auto; margin-right: auto;' border='2' cellpadding='5'>");
                mensagem.AppendLine("<tr>");
                mensagem.AppendLine("<td style='padding: 5px;'>Nº</td>");
                mensagem.AppendLine("<td style='padding: 5px;'>Nome do aluno</td>");
                mensagem.AppendLine("<td style='padding: 5px;'>Percentual de Frequência</td>");
                mensagem.AppendLine("</tr>");

                foreach (var aluno in alunosFaltososTurma.OrderBy(a => a.NomeAluno))
                {
                    var percentualFrequenciaAluno = 100 - turmaAgrupada.FirstOrDefault(c => c.AlunoCodigo == aluno.CodigoAluno).PercentualFaltas;

                    mensagem.AppendLine("<tr>");
                    mensagem.Append($"<td style='padding: 5px;'>{aluno.NumeroAlunoChamada}</td>");
                    mensagem.Append($"<td style='padding: 5px;'>{aluno.NomeAluno}</td>");
                    mensagem.Append($"<td style='text-align: center;'>{percentualFrequenciaAluno:0.00} %</td>");
                    mensagem.AppendLine("</tr>");
                }
            }

            var funcionariosEol         = servicoNotificacao.ObterFuncionariosPorNivel(ueCodigo, Cargo.Supervisor);
            var functionariosEolCP      = servicoNotificacao.ObterFuncionariosPorNivel(ueCodigo, Cargo.CP);
            var functionariosEolAD      = servicoNotificacao.ObterFuncionariosPorNivel(ueCodigo, Cargo.AD);
            var functionariosEolDiretor = servicoNotificacao.ObterFuncionariosPorNivel(ueCodigo, Cargo.Diretor);

            NotficarFuncionariosAlunosFaltososBimestre(funcionariosEol, titulo, mensagem.ToString(), ueCodigo, dreCodigo);
            NotficarFuncionariosAlunosFaltososBimestre(functionariosEolCP, titulo, mensagem.ToString(), ueCodigo, dreCodigo);
            NotficarFuncionariosAlunosFaltososBimestre(functionariosEolAD, titulo, mensagem.ToString(), ueCodigo, dreCodigo);
            NotficarFuncionariosAlunosFaltososBimestre(functionariosEolDiretor, titulo, mensagem.ToString(), ueCodigo, dreCodigo);
        }
コード例 #3
0
        private IEnumerable <(Cargo?Cargo, Usuario Usuario)> BuscaGestoresUe(string codigoUe)
        {
            // Buscar gestor da Ue
            var funcionariosRetornoEol = servicoNotificacao.ObterFuncionariosPorNivel(codigoUe, Cargo.CP);

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

            var   cargoNotificacao = funcionariosRetornoEol.GroupBy(f => f.Cargo).Select(f => f.Key).First();
            Cargo?proximoNivel     = null;

            if (cargoNotificacao == Cargo.CP || cargoNotificacao == Cargo.AD)
            {
                proximoNivel = Cargo.Diretor;
            }
            else
            {
                proximoNivel = servicoNotificacao.ObterProximoNivel(cargoNotificacao, false);
            }

            if (proximoNivel != null)
            {
                funcionariosRetornoEol = funcionariosRetornoEol.Concat(servicoNotificacao.ObterFuncionariosPorNivel(codigoUe, proximoNivel));
            }
            else
            {
                return(null);
            }

            var usuarios = new List <(Cargo?, Usuario)>();

            foreach (var usuarioEol in funcionariosRetornoEol)
            {
                usuarios.Add((usuarioEol.Cargo, servicoUsuario.ObterUsuarioPorCodigoRfLoginOuAdiciona(usuarioEol.Id)));
            }

            return(usuarios);
        }
        public async Task <IEnumerable <long> > Handle(ObterFuncionariosIdPorCodigoUeECargoQuery request, CancellationToken cancellationToken)
        {
            var codigosRf = servicoNotificacao.ObterFuncionariosPorNivel(request.CodigoUe, request.Cargo).Select(x => x.Id).ToList();

            return(await mediator.Send(new ObterUsuariosIdPorCodigosRfQuery(codigosRf)));
        }