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);
        }
Ejemplo n.º 2
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);
        }