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