public async Task <IHttpActionResult> PostMovimentoEstoque(MovimentoEstoqueBindingModel model) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var produto = await db.Produtos.FindAsync(model.IdProduto); if (produto == null) { ThrowProdutoNotFound(model.IdProduto.Value); } var movimento = new MovimentoEstoque { Produto = produto, Quantidade = model.Quantidade, Data = model.Data.GetValueOrDefault(DateTime.Now), Observacao = model.Observacao }; service.CriarMovimento(movimento); await db.SaveChangesAsync(); return(CreatedAtRoute("DefaultApi", new { movimento.Id }, movimento)); }
public async Task <IHttpActionResult> PostVenda(VendaBindingModel vendaModel) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } Usuario user = await db.Users.FirstAsync(u => u.Email == User.Identity.Name); Venda venda = new Venda() { Atendente = user, Data = DateTime.Now, FormaPagamento = vendaModel.FormaPagamento }; if (vendaModel.IdCliente.HasValue) { Cliente cliente = await db.Clientes.FindAsync(vendaModel.IdCliente); if (cliente != null) { venda.Cliente = cliente; } } foreach (var itemModel in vendaModel.Itens) { Produto produto = await db.Produtos.FindAsync(itemModel.IdProduto); if (venda.Cliente != null) { if (venda.Cliente.Restricoes.Count > 0 && venda.Cliente.Restricoes.Select(p => p.Id).Contains(itemModel.IdProduto)) { throw new Exception("Cliente não pode consumir o produto " + produto.Nome); } } ItemVenda item = new ItemVenda() { Preco = itemModel.Preco, Produto = produto, Quantidade = itemModel.Quantidade }; venda.Itens.Add(item); estoqueService.CriarMovimento(item); } if (venda.Cliente != null && vendaModel.FormaPagamento == FormaPagamento.PrePago) { venda.Cliente.Saldo = venda.Cliente.Saldo - venda.Total; } db.Vendas.Add(venda); await db.SaveChangesAsync(); return(CreatedAtRoute("DefaultApi", new { id = venda.Id }, venda)); }