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