Пример #1
0
        private async Task TrataNovoNivel(WorkflowAprovacao wfAprovacao, WorkflowAprovacaoNivel nivelDoCargo, List <FuncionarioCargoDTO> funcionariosCargosDaUe)
        {
            var funcionariosDoNivel = funcionariosCargosDaUe.Where(a => a.CargoId == (int)nivelDoCargo.Cargo);
            var notificacaoBase     = wfAprovacao.Niveis.Where(a => a.Notificacoes.Any()).SelectMany(a => a.Notificacoes).FirstOrDefault();

            foreach (var funcionarioDoNivel in funcionariosDoNivel)
            {
                var notificarUsuarioCommand = new NotificarUsuarioCommand(
                    wfAprovacao.NotifacaoTitulo,
                    wfAprovacao.NotifacaoMensagem,
                    funcionarioDoNivel.FuncionarioRF,
                    (NotificacaoCategoria)wfAprovacao.NotificacaoCategoria,
                    (NotificacaoTipo)wfAprovacao.NotificacaoTipo,
                    wfAprovacao.DreId,
                    wfAprovacao.UeId,
                    wfAprovacao.TurmaId,
                    wfAprovacao.Ano,
                    notificacaoBase.Codigo,
                    notificacaoBase.CriadoEm);

                var notificacaoId = await mediator.Send(notificarUsuarioCommand);

                repositorioWorkflowAprovacaoNivelNotificacao.Salvar(new WorkflowAprovacaoNivelNotificacao()
                {
                    NotificacaoId            = notificacaoId,
                    WorkflowAprovacaoNivelId = nivelDoCargo.Id
                });
            }
        }
Пример #2
0
        private async Task <bool> VerificaSeExisteNivelEadiciona(WorkflowAprovacao wfAprovacao, WorkflowAprovacaoNivel nivelParaModificar, Cargo cargo, List <FuncionarioCargoDTO> funcionariosCargosDaUe)
        {
            var nivelDoCargo = wfAprovacao.ObterPrimeiroNivelPorCargo(cargo);

            var modificaNiveisPosteriores = false;

            if (nivelDoCargo == null)
            {
                modificaNiveisPosteriores = true;

                nivelDoCargo = new WorkflowAprovacaoNivel()
                {
                    Cargo      = cargo,
                    Nivel      = nivelParaModificar.Nivel + 1,
                    WorkflowId = wfAprovacao.Id
                };
            }
            else
            {
                if (nivelDoCargo.Notificacoes.Any())
                {
                    return(false);
                }
            }

            await TrataModificacaoDosNiveis(funcionariosCargosDaUe, wfAprovacao, nivelParaModificar, true, nivelDoCargo, modificaNiveisPosteriores);

            return(true);
        }
Пример #3
0
        private async Task <WorkflowAprovacao> MapearDtoParaEntidade(WorkflowAprovacaoDto workflowAprovacaoNiveisDto)
        {
            WorkflowAprovacao workflowAprovacao = new WorkflowAprovacao();

            workflowAprovacao.Ano                  = workflowAprovacaoNiveisDto.Ano;
            workflowAprovacao.DreId                = workflowAprovacaoNiveisDto.DreId;
            workflowAprovacao.UeId                 = workflowAprovacaoNiveisDto.UeId;
            workflowAprovacao.TurmaId              = workflowAprovacaoNiveisDto.TurmaId;
            workflowAprovacao.NotifacaoMensagem    = workflowAprovacaoNiveisDto.NotificacaoMensagem;
            workflowAprovacao.NotifacaoTitulo      = workflowAprovacaoNiveisDto.NotificacaoTitulo;
            workflowAprovacao.NotificacaoTipo      = workflowAprovacaoNiveisDto.NotificacaoTipo;
            workflowAprovacao.NotificacaoCategoria = workflowAprovacaoNiveisDto.NotificacaoCategoria;
            workflowAprovacao.Tipo                 = workflowAprovacaoNiveisDto.Tipo;

            foreach (var nivel in workflowAprovacaoNiveisDto.Niveis)
            {
                var workflowNivel = new WorkflowAprovacaoNivel()
                {
                    Cargo = nivel.Cargo,
                    Nivel = nivel.Nivel
                };

                if (nivel.UsuariosRf != null && nivel.UsuariosRf.Length > 0)
                {
                    foreach (var usuarioRf in nivel.UsuariosRf)
                    {
                        workflowNivel.Adicionar(await ObterUsuarioPorRf(usuarioRf));
                    }
                }

                workflowAprovacao.Adicionar(workflowNivel);
            }
            return(workflowAprovacao);
        }
Пример #4
0
        private async Task AprovarNivel(WorkflowAprovacaoNivel nivel, WorkflowAprovacao workflow, long codigoDaNotificacao)
        {
            var niveis = workflow.ObtemNiveisParaEnvioPosAprovacao();

            if (niveis != null && niveis.Any())
            {
                EnviaNotificacaoParaNiveis(niveis.ToList(), codigoDaNotificacao);
            }
            else
            {
                if (workflow.Tipo == WorkflowAprovacaoTipo.Evento_Liberacao_Excepcional)
                {
                    await AprovarUltimoNivelEventoLiberacaoExcepcional(codigoDaNotificacao, workflow.Id);
                }
                else if (workflow.Tipo == WorkflowAprovacaoTipo.ReposicaoAula)
                {
                    await AprovarUltimoNivelDaReposicaoAula(codigoDaNotificacao, workflow.Id);
                }
                else if (workflow.Tipo == WorkflowAprovacaoTipo.Evento_Data_Passada)
                {
                    AprovarUltimoNivelDeEventoDataPassada(codigoDaNotificacao, workflow.Id);
                }
                else if (workflow.Tipo == WorkflowAprovacaoTipo.Fechamento_Reabertura)
                {
                    AprovarUltimoNivelDeEventoFechamentoReabertura(codigoDaNotificacao, workflow.Id, nivel.Id);
                }
                else if (workflow.Tipo == WorkflowAprovacaoTipo.AlteracaoNotaFechamento)
                {
                    await AprovarAlteracaoNotaFechamento(codigoDaNotificacao, workflow.Id, workflow.TurmaId, workflow.CriadoRF, workflow.CriadoPor);
                }
            }
        }
Пример #5
0
        public async Task Aprovar(WorkflowAprovacao workflow, bool aprovar, string observacao, long notificacaoId)
        {
            WorkflowAprovacaoNivel nivel = workflow.ObterNivelPorNotificacaoId(notificacaoId);

            var codigoDaNotificacao = nivel.Notificacoes.FirstOrDefault(a => a.Id == notificacaoId)?.Codigo;

            if (codigoDaNotificacao == null)
            {
                throw new NegocioException("Não foi possível localizar a notificação.");
            }

            nivel.PodeAprovar();

            var niveisParaPersistir = workflow.ModificarStatusPorNivel(aprovar ? WorkflowAprovacaoNivelStatus.Aprovado : WorkflowAprovacaoNivelStatus.Reprovado, nivel.Nivel, observacao);

            AtualizaNiveis(niveisParaPersistir);

            if (aprovar)
            {
                await AprovarNivel(nivel, workflow, (long)codigoDaNotificacao);
            }
            else
            {
                await ReprovarNivel(workflow, (long)codigoDaNotificacao, observacao, nivel.Cargo, nivel);
            }
        }
        private void AprovarNivel(WorkflowAprovacaoNivel nivel, long notificacaoId, WorkflowAprovacao workflow, long codigoDaNotificacao)
        {
            var niveis = workflow.ObtemNiveisParaEnvioPosAprovacao();

            if (niveis != null)
            {
                EnviaNotificacaoParaNiveis(niveis.ToList(), codigoDaNotificacao);
            }
            else
            {
                if (workflow.Tipo == WorkflowAprovacaoTipo.Evento_Liberacao_Excepcional)
                {
                    AprovarUltimoNivelEventoLiberacaoExcepcional(codigoDaNotificacao, workflow.Id);
                }
                else if (workflow.Tipo == WorkflowAprovacaoTipo.ReposicaoAula)
                {
                    AprovarUltimoNivelDaReposicaoAula(codigoDaNotificacao, workflow.Id);
                }
                else if (workflow.Tipo == WorkflowAprovacaoTipo.Evento_Data_Passada)
                {
                    AprovarUltimoNivelDeEventoDataPassada(codigoDaNotificacao, workflow.Id);
                }
                else if (workflow.Tipo == WorkflowAprovacaoTipo.Fechamento_Reabertura)
                {
                    AprovarUltimoNivelDeEventoFechamentoReabertura(codigoDaNotificacao, workflow.Id, nivel.Id);
                }
            }
        }
Пример #7
0
        private async Task TrataNovoFuncionarioNivel(WorkflowAprovacao wfAprovacao, WorkflowAprovacaoNivel nivelDoCargo, string funcionarioRF)
        {
            var notificacaoBase = wfAprovacao.Niveis.Where(a => a.Notificacoes.Any()).SelectMany(a => a.Notificacoes).FirstOrDefault();

            var notificarUsuarioCommand = new NotificarUsuarioCommand(
                wfAprovacao.NotifacaoTitulo,
                wfAprovacao.NotifacaoMensagem,
                funcionarioRF,
                (NotificacaoCategoria)wfAprovacao.NotificacaoCategoria,
                (NotificacaoTipo)wfAprovacao.NotificacaoTipo,
                wfAprovacao.DreId,
                wfAprovacao.UeId,
                wfAprovacao.TurmaId,
                wfAprovacao.Ano,
                notificacaoBase.Codigo,
                notificacaoBase.CriadoEm);

            var notificacaoId = await mediator.Send(notificarUsuarioCommand);

            repositorioWorkflowAprovacaoNivelNotificacao.Salvar(new WorkflowAprovacaoNivelNotificacao()
            {
                NotificacaoId            = notificacaoId,
                WorkflowAprovacaoNivelId = nivelDoCargo.Id
            });
        }
Пример #8
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);
        }
        public async Task <string> ValidarWorkflowAprovacao(long notificacaoId)
        {
            var workflow = ObterWorkflow(notificacaoId);

            if (workflow.Tipo == WorkflowAprovacaoTipo.ReposicaoAula)
            {
                WorkflowAprovacaoNivel nivel = workflow.ObterNivelPorNotificacaoId(notificacaoId);
                var codigoDaNotificacao      = nivel.Notificacoes.FirstOrDefault(a => a.Id == notificacaoId).Codigo;
                return(await servicoWorkflowAprovacao.VerificaAulaReposicao(workflow.Id, codigoDaNotificacao));
            }

            return(null);
        }
        public void Aprovar(WorkflowAprovacao workflow, bool aprovar, string observacao, long notificacaoId)
        {
            WorkflowAprovacaoNivel nivel = workflow.ObterNivelPorNotificacaoId(notificacaoId);

            nivel.PodeAprovar();

            var niveisParaPersistir = workflow.ModificarStatusPorNivel(aprovar ? WorkflowAprovacaoNivelStatus.Aprovado : WorkflowAprovacaoNivelStatus.Reprovado, nivel.Nivel, observacao);

            AtualizaNiveis(niveisParaPersistir);

            var codigoDaNotificacao = nivel.Notificacoes
                                      .FirstOrDefault(a => a.Id == notificacaoId).Codigo;

            if (aprovar)
            {
                AprovarNivel(nivel, notificacaoId, workflow, codigoDaNotificacao);
            }
            else
            {
                ReprovarNivel(workflow, codigoDaNotificacao, observacao, nivel.Cargo, nivel);
            }
        }
Пример #11
0
        public void Aprovar(WorkflowAprovacao workflow, bool aprovar, string observacao, long notificacaoId)
        {
            WorkflowAprovacaoNivel nivel = workflow.ObterNivelPorNotificacaoId(notificacaoId);

            nivel.PodeAprovar();

            var niveisParaPersistir = workflow.ModificarStatusPorNivel(aprovar ? WorkflowAprovacaoNivelStatus.Aprovado : WorkflowAprovacaoNivelStatus.Reprovado, nivel.Nivel, observacao);

            AtualizaNiveis(niveisParaPersistir);

            if (aprovar)
            {
                var codigoDaNotificacao = nivel.Notificacoes
                                          .FirstOrDefault(a => a.Id == notificacaoId).Codigo;

                var niveis = workflow.ObtemNiveisParaEnvioPosAprovacao();
                if (niveis != null)
                {
                    EnviaNotificacaoParaNiveis(niveis.ToList(), codigoDaNotificacao);
                }
            }
        }
Пример #12
0
        private async Task TrataCargoDiretor(List <FuncionarioCargoDTO> funcionariosCargosDaUe, WorkflowAprovacao wfAprovacao, WorkflowAprovacaoNivel nivelParaModificar)
        {
            var ad = funcionariosCargosDaUe.FirstOrDefault(a => a.CargoId == (int)Cargo.AD);

            if (ad != null)
            {
                var adicionouNivelAd = await VerificaSeExisteNivelEadiciona(wfAprovacao, nivelParaModificar, Cargo.AD, funcionariosCargosDaUe);

                if (!adicionouNivelAd)
                {
                    await TrataSupervisoresDiretor(funcionariosCargosDaUe, wfAprovacao, nivelParaModificar);
                }
            }
            else
            {
                await TrataSupervisoresDiretor(funcionariosCargosDaUe, wfAprovacao, nivelParaModificar);
            }
        }
Пример #13
0
 private async Task ReprovarNivel(WorkflowAprovacao workflow, long codigoDaNotificacao, string motivo, Cargo?cargoDoNivelQueRecusou, WorkflowAprovacaoNivel nivel)
 {
     if (workflow.Tipo == WorkflowAprovacaoTipo.Evento_Liberacao_Excepcional)
     {
         TrataReprovacaoEventoLiberacaoExcepcional(workflow, codigoDaNotificacao, motivo, cargoDoNivelQueRecusou);
     }
     else if (workflow.Tipo == WorkflowAprovacaoTipo.ReposicaoAula)
     {
         await TrataReprovacaoReposicaoAula(workflow, codigoDaNotificacao, motivo);
     }
     else if (workflow.Tipo == WorkflowAprovacaoTipo.Evento_Data_Passada)
     {
         TrataReprovacaoEventoDataPassada(workflow, codigoDaNotificacao, motivo);
     }
     else if (workflow.Tipo == WorkflowAprovacaoTipo.Fechamento_Reabertura)
     {
         TrataReprovacaoFechamentoReabertura(workflow, codigoDaNotificacao, motivo, nivel.Id);
     }
     else if (workflow.Tipo == WorkflowAprovacaoTipo.AlteracaoNotaFechamento)
     {
         await TrataReprovacaoAlteracaoNotaFechamento(workflow, codigoDaNotificacao, motivo);
     }
 }
Пример #14
0
        private async Task TrataCargoSupervisor(List <FuncionarioCargoDTO> funcionariosCargosDaUe, WorkflowAprovacao wfAprovacao, WorkflowAprovacaoNivel nivelParaModificar)
        {
            var supervisorTecnico = funcionariosCargosDaUe.FirstOrDefault(a => a.CargoId == (int)Cargo.SupervisorTecnico);

            if (supervisorTecnico != null)
            {
                await VerificaSeExisteNivelEadiciona(wfAprovacao, nivelParaModificar, Cargo.SupervisorTecnico, funcionariosCargosDaUe);
            }
        }
Пример #15
0
        private async Task TrataCargoCP(List <FuncionarioCargoDTO> funcionariosCargosDaUe, WorkflowAprovacao wfAprovacao, WorkflowAprovacaoNivel nivelParaModificar)
        {
            var ad = funcionariosCargosDaUe.FirstOrDefault(a => a.CargoId == (int)Cargo.AD);

            if (ad != null)
            {
                await VerificaSeExisteNivelEadiciona(wfAprovacao, nivelParaModificar, Cargo.AD, funcionariosCargosDaUe);
            }
            else
            {
                var diretor = funcionariosCargosDaUe.FirstOrDefault(a => a.CargoId == (int)Cargo.Diretor);
                if (diretor != null)
                {
                    await VerificaSeExisteNivelEadiciona(wfAprovacao, nivelParaModificar, Cargo.Diretor, funcionariosCargosDaUe);
                }
                else
                {
                    var supervisor = funcionariosCargosDaUe.FirstOrDefault(a => a.CargoId == (int)Cargo.Supervisor);
                    if (supervisor != null)
                    {
                        await VerificaSeExisteNivelEadiciona(wfAprovacao, nivelParaModificar, Cargo.Supervisor, funcionariosCargosDaUe);
                    }
                    else
                    {
                        await VerificaSeExisteNivelEadiciona(wfAprovacao, nivelParaModificar, Cargo.SupervisorTecnico, funcionariosCargosDaUe);
                    }
                }
            }
        }
Пример #16
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);
                }
            }
        }
Пример #17
0
        private async Task TrataModificacaoDosNiveis(List <FuncionarioCargoDTO> funcionariosCargosDaUe, WorkflowAprovacao wfAprovacao, WorkflowAprovacaoNivel nivelParaModificar, bool modificarNivelAtual, WorkflowAprovacaoNivel nivelDoCargo, bool modificaNiveisPosteriores)
        {
            if (modificarNivelAtual)
            {
                if (modificaNiveisPosteriores)
                {
                    var niveisParaModificar = wfAprovacao.Niveis.Where(a => a.Nivel > nivelParaModificar.Nivel);

                    foreach (var nivel in niveisParaModificar)
                    {
                        nivel.Nivel += 1;
                        await repositorioWorkflowAprovacaoNivel.SalvarAsync(nivel);
                    }
                }

                await repositorioNotificacao.ExcluirLogicamentePorIdsAsync(nivelParaModificar.Notificacoes.Select(a => a.Id).ToArray());

                nivelParaModificar.Status = WorkflowAprovacaoNivelStatus.Substituido;
                nivelDoCargo.Status       = WorkflowAprovacaoNivelStatus.AguardandoAprovacao;

                await repositorioWorkflowAprovacaoNivel.SalvarAsync(nivelParaModificar);

                nivelDoCargo.Id = await repositorioWorkflowAprovacaoNivel.SalvarAsync(nivelDoCargo);
                await TrataNovoNivel(wfAprovacao, nivelDoCargo, funcionariosCargosDaUe);
            }
        }