/// <summary> /// Valida se a nota de compra está pronta para a aprovação /// </summary> /// <param name="idNotaCompra">id da nota de compra</param> /// <param name="tokenCancelamento">O token de cancelamento para a operação assíncrona</param> /// <returns>Retorna true na execução normal</returns> private async Task ValidarAprovacaoNotaDeCompraAsync(long idNotaCompra, CancellationToken tokenCancelamento = default) { NotaDeCompra notaDeCompra = await unitOfWork.NotaDeCompraRepositorio.PrimeiroOuDefaultAsync(predicado : x => x.Id == idNotaCompra, carregamentoAntecipado : x => x.Include(v => v.HistoricoAprovacoes), tokenCancelamento : tokenCancelamento); Configuracoes configuracoes = ObterConfiguracoes(notaDeCompra.ValorTotal); if (notaDeCompra.HistoricoAprovacoes.Count(x => x.Operacao == "A") == configuracoes.Aprovacoes) { notaDeCompra.Status = true; unitOfWork.NotaDeCompraRepositorio.Atualizar(notaDeCompra); await unitOfWork.PersistirAsync(tokenCancelamento); } }
/// <summary> /// Registra os vistos nas notas de compra /// </summary> /// <param name="idUsuario">id de usuário</param> /// <param name="idNotaCompra">id da nota de compra</param> /// <param name="tokenCancelamento">O token de cancelamento para a operação assíncrona</param> /// <returns>Retorna true na execução normal</returns> public async Task <bool> RegistrarVistoAsync(long idUsuario, long idNotaCompra, CancellationToken tokenCancelamento = default) { try { UsuarioModel usuario = await usuarioServices.ObterAsync(idUsuario); NotaDeCompra notaDeCompra = await unitOfWork.NotaDeCompraRepositorio.PrimeiroOuDefaultAsync(predicado : x => x.Id == idNotaCompra, carregamentoAntecipado : x => x.Include(v => v.HistoricoAprovacoes) .ThenInclude(u => u.Usuario), tokenCancelamento : tokenCancelamento); foreach (var item in notaDeCompra.HistoricoAprovacoes) { if (item.Usuario.Id == usuario.Id) { break; } } HistoricoAprovacoes historicoAprovacoes = new HistoricoAprovacoes { Data = DateTime.Now, NotaDeCompra = notaDeCompra, Operacao = "V", Usuario = await unitOfWork.UsuarioRepositorio.PrimeiroOuDefaultAsync(x => x.Id == idUsuario, tokenCancelamento : tokenCancelamento) }; await unitOfWork.HistoricoAprovacoesRepositorio.IncluirAsync(historicoAprovacoes, tokenCancelamento); await unitOfWork.PersistirAsync(tokenCancelamento); await ValidarAprovacaoNotaDeCompraAsync(idNotaCompra, tokenCancelamento); return(true); } catch (Exception erro) { return(false); // Todo Giulliano: Gerar log // throw; } }
/// <summary> /// Valida o status da nota de compra /// </summary> /// <param name="notaDeCompra">nota de compra a ser validada</param> /// <returns>Status da nota de compra</returns> private StatusNotaDeCompra ValidarStatusNotaDeCompra(NotaDeCompra notaDeCompra) { int qtdVistos = notaDeCompra.HistoricoAprovacoes.Count(x => x.Operacao == "V"); int qtdAprovacoes = notaDeCompra.HistoricoAprovacoes.Count(x => x.Operacao == "A"); Configuracoes configuracoes = ObterConfiguracoes(notaDeCompra.ValorTotal); if (qtdAprovacoes == configuracoes.Aprovacoes && qtdVistos == configuracoes.Vistos) { return(StatusNotaDeCompra.Aprovada); } else if (qtdVistos == configuracoes.Vistos) { return(StatusNotaDeCompra.AguardandoAprovacao); } else { return(StatusNotaDeCompra.Pendente); } }