public async Task <string> RegistrarOrdemCompra(int clienteId, int produtoId, int quantidadeCompra) { var cliente = await _clienteRepositorio.ConsultarPorId(clienteId).ConfigureAwait(false); var produto = await _produtoRepositorio.ConsultarPorId(produtoId).ConfigureAwait(false); if (quantidadeCompra <= 0) { throw new InvalidOperationException("Quantidade solicitada não suficiente para compra."); } if (produto.Estoque <= 0) { throw new InvalidOperationException("Quantidade em estoque não suficiente para compra."); } var valorOperacao = Math.Round(produto.PrecoUnitario * quantidadeCompra, 2); if (valorOperacao > cliente.Saldo) { throw new InvalidOperationException("Cliente não possui saldo suficiente para compra."); } if (Math.Round(quantidadeCompra * produto.PrecoUnitario, 2) < produto.ValorMinimoDeCompra) { throw new InvalidOperationException("Quantidade mínima não atendida para compra."); } if (valorOperacao > produto.Estoque) { throw new InvalidOperationException("Quantidade em estoque não suficiente para compra."); } var novaOrdemDeCompra = new OrdemCompra { ClienteId = cliente.Id, ProdutoId = produto.Id, DataOperacao = DateTime.Now, PrecoUnitario = produto.PrecoUnitario, ValorOperacao = valorOperacao, QuantidadeSolicitada = quantidadeCompra }; return(await _ordemCompraRepositorio.RegistrarOrdemCompra(novaOrdemDeCompra).ConfigureAwait(false)); }
public async Task <string> RegistrarOrdemCompra(OrdemCompra ordemCompra) { await Task.Run(() => _dataStore.OrdensCompras.Add(ordemCompra)).ConfigureAwait(false); return(ordemCompra.Id); }
public Task <bool> AlterarOrdemCompra(OrdemCompra ordemCompra) { throw new NotImplementedException(); }