예제 #1
0
        private void EnviaNotificacaoParaUe(IEnumerable <PeriodoFechamentoBimestre> fechamentosBimestre, long dreId)
        {
            var ues = repositorioUe.ObterPorDre(dreId);

            if (ues != null && ues.Any())
            {
                foreach (var ue in ues)
                {
                    Notificacao notificacao = MontaNotificacao(ue.Nome, "DRE", fechamentosBimestre, null, ue.CodigoUe);
                    var         diretores   = servicoEol.ObterFuncionariosPorCargoUe(ue.CodigoUe, (long)Cargo.Diretor);
                    if (diretores == null || !diretores.Any())
                    {
                        throw new NegocioException($"Não foram localizados diretores para Ue {ue.CodigoUe}.");
                    }

                    foreach (var diretor in diretores)
                    {
                        var usuario = servicoUsuario.ObterUsuarioPorCodigoRfLoginOuAdiciona(diretor.CodigoRf);
                        notificacao.UsuarioId = usuario.Id;

                        servicoNotificacao.Salvar(notificacao);
                    }
                }
            }
        }
        private void NotificarDiretorUeFechamentoReaberturaAprovado(FechamentoReabertura fechamentoReabertura, long codigoDaNotificacao, long nivelId)
        {
            var diretoresDaEscola = servicoEOL.ObterFuncionariosPorCargoUe(fechamentoReabertura.Ue.CodigoUe, (long)Cargo.Diretor);

            if (diretoresDaEscola == null && !diretoresDaEscola.Any())
            {
                throw new NegocioException("Não foi possível localizar o diretor da Ue desta reabertura de fechamento.");
            }

            foreach (var diretorDaEscola in diretoresDaEscola)
            {
                var usuario     = servicoUsuario.ObterUsuarioPorCodigoRfLoginOuAdiciona(diretorDaEscola.CodigoRf);
                var notificacao = new Notificacao()
                {
                    UeId      = fechamentoReabertura.Ue.CodigoUe,
                    UsuarioId = usuario.Id,
                    Ano       = fechamentoReabertura.CriadoEm.Year,
                    Categoria = NotificacaoCategoria.Aviso,
                    DreId     = fechamentoReabertura.Dre.CodigoDre,
                    Titulo    = "Cadastro de período de reabertura de fechamento - ano anterior",
                    Tipo      = NotificacaoTipo.Calendario,
                    Codigo    = codigoDaNotificacao,
                    Mensagem  = $@"O período de reabertura do fechamento de bimestre abaixo da {fechamentoReabertura.Ue.Nome} ({fechamentoReabertura.Dre.Nome}) foi aprovado pela supervisão escolar. <br />
                                  Descrição: { fechamentoReabertura.Descricao} < br />
                                  Início: { fechamentoReabertura.Inicio.ToString("dd/MM/yyyy")} < br />
                                  Fim: { fechamentoReabertura.Fim.ToString("dd/MM/yyyy")} < br />
                                  Bimestres: { fechamentoReabertura.ObterBimestresNumeral()}"
                };
                repositorioNotificacao.Salvar(notificacao);

                repositorioWorkflowAprovacaoNivelNotificacao.Salvar(new WorkflowAprovacaoNivelNotificacao()
                {
                    NotificacaoId = notificacao.Id, WorkflowAprovacaoNivelId = nivelId
                });
            }
        }
        public IEnumerable <(Cargo?Cargo, string Id)> ObterFuncionariosPorNivel(string codigoUe, Cargo?cargo, bool primeiroNivel = true)
        {
            IEnumerable <SupervisorEscolasDreDto> supervisoresEscola = null;
            IEnumerable <UsuarioEolRetornoDto>    funcionarios       = null;

            if (cargo == Cargo.Supervisor)
            {
                supervisoresEscola = repositorioSupervisorEscolaDre.ObtemSupervisoresPorUe(codigoUe);
            }
            else
            {
                funcionarios = servicoEOL.ObterFuncionariosPorCargoUe(codigoUe, (int)cargo);
            }

            if ((cargo == Cargo.Supervisor && (supervisoresEscola == null || !supervisoresEscola.Any())) ||
                (funcionarios == null || !funcionarios.Any()))
            {
                Cargo?cargoProximoNivel = ObterProximoNivel(cargo, primeiroNivel);

                if (!cargoProximoNivel.HasValue)
                {
                    return(null);
                }

                return(ObterFuncionariosPorNivel(codigoUe, cargoProximoNivel, false));
            }
            else
            {
                if (cargo == Cargo.Supervisor)
                {
                    return(supervisoresEscola.Select(s => (Cargo: cargo, Id: s.SupervisorId)));
                }
                else
                {
                    return(funcionarios.Select(f => (Cargo: cargo, Id: f.CodigoRf)));
                }
            }
        }
예제 #4
0
        private void EnviaNotificacaoParaNivel(WorkflowAprovacaoNivel nivel, long codigoNotificacao)
        {
            Notificacao    notificacao;
            List <Usuario> usuarios = nivel.Usuarios.ToList();

            if (nivel.Cargo.HasValue)
            {
                if (nivel.Cargo == Cargo.Supervisor)
                {
                    var supervisoresEscola = repositorioSupervisorEscolaDre.ObtemSupervisoresPorUe(nivel.Workflow.UeId);
                    if (supervisoresEscola == null || supervisoresEscola.Count() == 0)
                    {
                        throw new NegocioException($"Não foram encontrados supervisores atribuídos para a escola de código {nivel.Workflow.UeId} para enviar para o nível {nivel.Nivel}.");
                    }

                    foreach (var supervisorEscola in supervisoresEscola)
                    {
                        usuarios.Add(servicoUsuario.ObterUsuarioPorCodigoRfLoginOuAdiciona(supervisorEscola.SupervisorId));
                    }
                }
                else
                {
                    var funcionariosRetornoEol = servicoEOL.ObterFuncionariosPorCargoUe(nivel.Workflow.UeId, (int)nivel.Cargo.Value);
                    if (funcionariosRetornoEol == null || funcionariosRetornoEol.Count() == 0)
                    {
                        throw new NegocioException($"Não foram encontrados funcionários de cargo {nivel.Cargo.GetAttribute<DisplayAttribute>().Name} para a escola de código {nivel.Workflow.UeId} para enviar para o nível {nivel.Nivel}.");
                    }

                    foreach (var usuario in funcionariosRetornoEol)
                    {
                        usuarios.Add(servicoUsuario.ObterUsuarioPorCodigoRfLoginOuAdiciona(usuario.CodigoRf));
                    }
                }
            }

            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);
                }
            }
        }