Example #1
0
        public async Task <IHttpActionResult> PostRecarga(RecargaBindingModel recargaModel)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }


            Usuario user = await db.Users.FirstAsync(u => u.Email == User.Identity.Name);

            Cliente cliente = await db.Clientes.FindAsync(recargaModel.IdCliente);

            decimal saldoAtual = cliente.Saldo;

            Recarga recarga = new Recarga()
            {
                Cliente = cliente,
                Data    = DateTime.Now,
                Usuario = user,
                Valor   = recargaModel.Valor
            };

            cliente.Saldo = saldoAtual + recargaModel.Valor;
            db.Recargas.Add(recarga);
            await db.SaveChangesAsync();

            return(CreatedAtRoute("DefaultApi", new { id = recarga.Id }, recarga));
        }
        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));
        }
Example #3
0
        public async Task <IHttpActionResult> PutMovimentoEstoque(int id, MovimentoEstoqueBindingModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != model.Id)
            {
                return(BadRequest());
            }

            var movimento = await db.MovimentosEstoque.FindAsync(id);

            var produto = await db.Produtos.FindAsync(model.IdProduto);

            if (movimento == null)
            {
                return(NotFound());
            }
            if (produto == null)
            {
                ThrowProdutoNotFound(model.IdProduto.Value);
            }

            int quantidadeAnterior = movimento.Quantidade;

            movimento.Produto    = produto;
            movimento.Quantidade = model.Quantidade;
            movimento.Data       = model.Data.GetValueOrDefault(movimento.Data);
            movimento.Observacao = model.Observacao;

            service.EditarMovimento(movimento, quantidadeAnterior);

            try
            {
                await db.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!MovimentoEstoqueExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
Example #4
0
        public async Task <IHttpActionResult> Post(ProdutoBindingModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            Produto produto = new Produto();

            model.MapToProduto(produto);
            Context.Produtos.Add(produto);

            await Context.SaveChangesAsync();

            return(Created("/api/produtos/" + produto.Id, produto));
        }
Example #5
0
        public async Task <IHttpActionResult> PostRestricao(int id, int idProduto)
        {
            Cliente cliente = await db.Clientes.FindAsync(id);

            if (cliente == null)
            {
                return(NotFound());
            }

            Produto produto = await db.Produtos.FindAsync(idProduto);

            if (produto == null)
            {
                return(NotFound());
            }

            Usuario user = await this.AppUserManager.FindByEmailAsync(User.Identity.Name);

            IdentityRole role = await this.AppRoleManager.FindByIdAsync(user.Roles.FirstOrDefault().RoleId);

            if (role.Name == "Responsavel" && cliente.Responsavel.Id != user.Id)
            {
                return(Unauthorized());
            }

            cliente.Restricoes.Add(produto);
            await db.SaveChangesAsync();

            return(Created(String.Format("/api/clientes/{0}/restricoes", id), cliente.Restricoes.Select(p => p.Id)));
        }