public async Task VendaProduto(Produto produto, int quantidade, double valor) { // Cria um movimento de compra var movimento = CriarMovimentoCompra(produto, quantidade, valor); // Realiza tratamentos no produto produto.Quantidade -= quantidade; produto.PrecoMedio = GetProdutoPrecoMedioNovo(produto, quantidade, valor); _context.Produtos.Update(produto); // Cria o titulo inicial var titulo = new TituloContas { Data = DateTime.Now, ProdutoId = movimento.ProdutoId, Saldo = movimento.Valor.Value, Situacao = Dtos.Enums.TituloContasSituacao.Aberto, ValorOriginal = movimento.Valor.Value, CodigoTransacao = movimento.CodigoTransacao }; await _context.TituloContas.AddAsync(titulo); // Salva o movimento de compra movimento.TituloContaId = titulo.Id; await _context.Movimentacoes.AddAsync(movimento); await _context.SaveChangesAsync(); }
public async Task SubstituirTitulo(Produto produto, TituloContas titulo) { var hasCreatedMovimento = await CreateLiquidacaoMovimento(produto, MovimentacaoTipo.liquidacaoIntegral, titulo.Id); if (!hasCreatedMovimento) { return; } var tituloSubstituto = new TituloContas { CodigoTransacao = titulo.CodigoTransacao, Data = DateTime.Now, Situacao = Dtos.Enums.TituloContasSituacao.Aberto, ProdutoId = produto.Id, Saldo = titulo.Saldo, TipoPagamento = Dtos.Enums.TituloTipoPagamento.Integral, ValorOriginal = titulo.Saldo }; await _context.TituloContas.AddAsync(tituloSubstituto); titulo.Situacao = Dtos.Enums.TituloContasSituacao.LiquidadoPorSubstituicao; titulo.Saldo = 0; titulo.TituloSubstitutoId = tituloSubstituto.Id; _context.TituloContas.Update(titulo); await _context.SaveChangesAsync(); }
public async Task <IActionResult> PostTituloContas([FromBody] TituloContas tituloContas) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } tituloContas.Situacao = Dtos.Enums.TituloContasSituacao.Aberto; var movimento = new Movimento { Data = DateTime.Now, Documento = new Documento { Tipo = TipoDocumento.Fiscal }, Natureza = Natureza.dev, MovimentacaoTipo = MovimentacaoTipo.sVenda, TituloContaId = tituloContas.Id // movimento.ProdutoId // movimento.Quantidade // movimento.Evento }; _context.Movimentacoes.Add(movimento); _context.TituloContas.Add(tituloContas); await _context.SaveChangesAsync(); return(CreatedAtAction("GetTituloContas", new { id = tituloContas.Id }, tituloContas)); }
public async Task <IActionResult> PutTituloContas([FromRoute] Guid id, [FromBody] TituloContas tituloContas) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (id != tituloContas.Id) { return(BadRequest()); } _context.Entry(tituloContas).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!TituloContasExists(id)) { return(NotFound()); } throw; } return(NoContent()); }
public async Task LiquidacaoIntegral(Produto produto, TituloContas titulo) { var hasCreatedMovimento = await CreateLiquidacaoMovimento(produto, MovimentacaoTipo.liquidacaoIntegral, titulo.Id); if (!hasCreatedMovimento) { return; } titulo.Situacao = Dtos.Enums.TituloContasSituacao.LiquidadoIntegral; titulo.Saldo = 0; _context.TituloContas.Update(titulo); await _context.SaveChangesAsync(); }
public async Task CancelarCompra(Produto produto, TituloContas titulo) { var hasCreatedMovimento = await CreateLiquidacaoMovimento(produto, MovimentacaoTipo.cancelamento, titulo.Id); if (!hasCreatedMovimento) { return; } var movimentoDeAbertura = await _context.Movimentacoes.FirstOrDefaultAsync(m => m.CodigoTransacao == titulo.CodigoTransacao); if (movimentoDeAbertura == null) { return; } produto.Quantidade += movimentoDeAbertura.Quantidade ?? 0; titulo.Situacao = Dtos.Enums.TituloContasSituacao.Cancelado; _context.Produtos.Update(produto); _context.TituloContas.Update(titulo); await _context.SaveChangesAsync(); }