Exemplo n.º 1
0
        public async Task ExcluirWorkflowNotificacoes(long id)
        {
            var workflow = repositorioWorkflowAprovacao.ObterEntidadeCompleta(id);

            if (workflow == null)
            {
                throw new NegocioException("Não foi possível localizar o fluxo de aprovação.");
            }

            if (workflow.Niveis.Any(n => n.Status == WorkflowAprovacaoNivelStatus.Reprovado))
            {
                return;
            }

            foreach (WorkflowAprovacaoNivel wfNivel in workflow.Niveis)
            {
                wfNivel.Status = WorkflowAprovacaoNivelStatus.Excluido;
                workflowAprovacaoNivel.Salvar(wfNivel);

                foreach (Notificacao notificacao in wfNivel.Notificacoes)
                {
                    repositorioWorkflowAprovacaoNivelNotificacao.ExcluirPorWorkflowNivelNotificacaoId(wfNivel.Id, notificacao.Id);
                    repositorioNotificacao.Remover(notificacao);
                }
            }

            workflow.Excluido = true;
            await repositorioWorkflowAprovacao.SalvarAsync(workflow);
        }
        public async Task <bool> Handle(ExcluirWorkflowCommand request, CancellationToken cancellationToken)
        {
            var workflow = repositorioWorkflowAprovacao.ObterEntidadeCompleta(request.WorkflowId);

            if (workflow == null)
            {
                throw new NegocioException("Não foi possível localizar o fluxo de aprovação.");
            }

            if (workflow.Niveis.Any(n => n.Status == WorkflowAprovacaoNivelStatus.Reprovado))
            {
                return(false);
            }

            foreach (WorkflowAprovacaoNivel wfNivel in workflow.Niveis)
            {
                wfNivel.Status = WorkflowAprovacaoNivelStatus.Excluido;
                repositorioWorkflowAprovacaoNivel.Salvar(wfNivel);

                foreach (Notificacao notificacao in wfNivel.Notificacoes)
                {
                    repositorioWorkflowAprovacaoNivelNotificacao.ExcluirPorWorkflowNivelNotificacaoId(wfNivel.Id, notificacao.Id);
                    repositorioNotificacao.Remover(notificacao);
                }
            }

            workflow.Excluido = true;
            await repositorioWorkflowAprovacao.SalvarAsync(workflow);

            return(true);
        }
        private WorkflowAprovacao ObterWorkflow(long notificacaoId)
        {
            WorkflowAprovacao workflow = repositorioWorkflowAprovacao.ObterEntidadeCompleta(0, notificacaoId);

            if (workflow == null)
            {
                throw new NegocioException($"Não foi possível localizar o fluxo de aprovação da notificação {notificacaoId}");
            }
            return(workflow);
        }
Exemplo n.º 4
0
        public void Aprovar(bool aprovar, long notificacaoId, string observacao)
        {
            var workflow = repositorioWorkflowAprovacao.ObterEntidadeCompleta(0, notificacaoId);

            if (workflow == null)
            {
                throw new NegocioException($"Não foi possível localizar o fluxo de aprovação da notificação {notificacaoId}");
            }

            unitOfWork.IniciarTransacao();

            servicoWorkflowAprovacao.Aprovar(workflow, aprovar, observacao, notificacaoId);

            unitOfWork.PersistirTransacao();
        }
Exemplo n.º 5
0
        public async Task <bool> Handle(AlteraWorkflowAprovacaoNivelNotificacaoCargoCommand request, CancellationToken cancellationToken)
        {
            var wfAprovacao = repositorioWorkflowAprovacao.ObterEntidadeCompleta(request.WorkflowId);

            if (wfAprovacao == null)
            {
                throw new NegocioException("Não foi possível obter o workflow de aprovação.");
            }

            var nivelParaModificar = wfAprovacao.ObterNivelPorNotificacaoId(request.NotificacaoId);

            if (nivelParaModificar == null)
            {
                throw new NegocioException("Não foi possível obter o nível do workflow de aprovação.");
            }

            switch (nivelParaModificar.Cargo)
            {
            case Cargo.CP:
                await TrataCargoCP(request.FuncionariosCargos, wfAprovacao, nivelParaModificar);

                break;

            case Cargo.AD:
                await TrataCargoAD(request.FuncionariosCargos, wfAprovacao, nivelParaModificar);

                break;

            case Cargo.Diretor:
                await TrataCargoDiretor(request.FuncionariosCargos, wfAprovacao, nivelParaModificar);

                break;

            case Cargo.Supervisor:
                await TrataCargoSupervisor(request.FuncionariosCargos, wfAprovacao, nivelParaModificar);

                break;

            case Cargo.SupervisorTecnico:
                break;

            default:
                break;
            }

            return(true);
        }
Exemplo n.º 6
0
        public async Task <bool> Handle(AlteraWorkflowAprovacaoNotificacaoCargoCommand request, CancellationToken cancellationToken)
        {
            var wfAprovacao = repositorioWorkflowAprovacao.ObterEntidadeCompleta(request.WorkflowId);

            if (wfAprovacao == null)
            {
                throw new NegocioException("Não foi possível obter o workflow de aprovação.");
            }

            var nivelParaModificar = wfAprovacao.ObterNivelPorNotificacaoId(request.NotificacaoId);

            if (nivelParaModificar == null)
            {
                throw new NegocioException("Não foi possível obter o nível do workflow de aprovação.");
            }


            //Verifico se tem notificação para excluir, quando o funcionário não está mais no cargo
            var listaIds = new List <long>();

            foreach (var notificacao in nivelParaModificar.Notificacoes.Where(a => !a.Excluida))
            {
                if (!request.FuncionariosCargos.Any(a => a.FuncionarioRF == notificacao.Usuario.CodigoRf))
                {
                    listaIds.Add(notificacao.Id);
                }
            }

            if (listaIds.Any())
            {
                await repositorioNotificacao.ExcluirLogicamentePorIdsAsync(listaIds.ToArray());
            }


            //Verifico se os funcionários no nível tem notificação
            foreach (var funcionario in request.FuncionariosCargos)
            {
                if (!nivelParaModificar.Notificacoes.Where(a => !a.Excluida).Any(a => a.Usuario.CodigoRf == funcionario.FuncionarioRF))
                {
                    await TrataNovoFuncionarioNivel(wfAprovacao, nivelParaModificar, funcionario.FuncionarioRF);
                }
            }


            return(true);
        }
        public WorkflowAprovacao ObtemPorId(long id)
        {
            var wf = repositorioWorkflowAprovacao.ObterEntidadeCompleta(0, id);

            return(wf);
        }