public async Task <IActionResult> CancelarPedido(Guid codigoTransacao) { var titulo = _context.TituloContas.FirstOrDefault(t => t.CodigoTransacao == codigoTransacao); if (titulo == null) { return(BadRequest("Título não encontrado!")); } if (titulo.Situacao == Dtos.Enums.TituloContasSituacao.LiquidadoIntegral) { return(BadRequest("Título já liquidado!")); } if (titulo.Situacao == Dtos.Enums.TituloContasSituacao.Cancelado) { return(BadRequest("Título cancelado!")); } var produto = await _context.Produtos.FindAsync(titulo.ProdutoId); if (produto == null) { return(BadRequest("Produto não encontrado!")); } var movimentoVenda = new MovimentoVenda(_context); await movimentoVenda.CancelarCompra(produto, titulo); return(Ok()); }
public async Task <IActionResult> LiquidacaoParcial(TituloLiquidacaoParcialInput input) { var titulo = _context.TituloContas.FirstOrDefault(t => t.CodigoTransacao == input.CodigoTransacao); if (titulo == null) { return(BadRequest("Título não encontrado!")); } if (titulo.Situacao == Dtos.Enums.TituloContasSituacao.LiquidadoIntegral) { return(BadRequest("Título já liquidado!")); } if (titulo.Situacao == Dtos.Enums.TituloContasSituacao.Cancelado) { return(BadRequest("Título cancelado!")); } var produto = await _context.Produtos.FindAsync(titulo.ProdutoId); if (produto == null) { return(BadRequest("Produto não encontrado!")); } if (titulo.Saldo < input.Valor) { return(BadRequest("Valor maior que o do titulo!")); } var movimentoVenda = new MovimentoVenda(_context); await movimentoVenda.LiquidacaoParcial(produto, titulo, input.Valor); return(Ok(produto)); }
public async Task <IActionResult> PostMovimento([FromBody] MovimentoInput input) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var produtoVinculado = _context.Produtos.Find(input.ProdutoVinculadoId); if (produtoVinculado == null) { return(BadRequest("Produto vinculado não encontrado")); } if (IsTipoSaida(input) && produtoVinculado.Quantidade < input.Quantidade) { return(BadRequest("A quantidade do produto " + produtoVinculado.Nome + " é menor que a solicitada")); } if (IsTipoSaida(input)) { // Saida var movimentoVenda = new MovimentoVenda(_context); await movimentoVenda.VendaProduto(produtoVinculado, input.Quantidade, input.Valor); return(Ok()); } // Cancelamento if (input.MovimentacaoTipo == MovimentacaoTipo.cancelamento) { return(BadRequest("Acesse o método de TituloContas/CancelarPedido")); } // Entrada produtoVinculado.Quantidade += input.Quantidade; await _context.Movimentacoes.AddAsync( new Movimento { Data = DateTime.Now, Documento = new Documento(), Natureza = Natureza.dev, ProdutoId = produtoVinculado.Id, Quantidade = input.Quantidade, Valor = input.Valor, IsCongelado = false, CodigoTransacao = Guid.NewGuid(), MovimentacaoTipo = input.MovimentacaoTipo, } ); _context.Produtos.Update(produtoVinculado); await _context.SaveChangesAsync(); return(Ok()); }
public async Task <IActionResult> ComprarProduto(Guid produtoId, int quantidade, double valor) { var produto = _context.Produtos.Find(produtoId); if (produto == null) { return(BadRequest("Produto não encontrado!")); } if (quantidade > produto.Quantidade) { return(BadRequest("A quantidade comprada é maior do que a disponível!")); } var movimentoVenda = new MovimentoVenda(_context); await movimentoVenda.VendaProduto(produto, quantidade, valor); return(Ok()); }