Exemple #1
0
        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));
        }