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