Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Tela de Vendas Asp.Net MVC

estou desenvolvendo um projeto de controle de estoque e resolvi adicionar uma tela de vendas simples, onde quero que a pessoa selecione um produto já existente e ele seja chamado numa lista e depois eu possa escolher a quantidade e ao gravar ele descontar do banco.

Eu criei uma tabela de vendas com os campos de Id, data e total, também criei uma tabela de item com Id, Produto, Quantidade, PrecoUnitario , subtotal (que multiplica a quantidade com o preco), uma chave estrangeira pra venda e pro produto e tenho também a tabela produto.

Meu maior problema está na hora de planejar a lógica para fazer isso

o que eu ja fiz até agora foi uma tela de venda onde ela lista as vendas e tem um botão de nova venda, quando você clica aparece um campo de data, você escolhe a data e clica em gerar nova venda, aí aparece um form e uma list para a pessoa colocar o produto e ele ser listado. Porém ele só faz isso.

Não sei se ficou confuso, mas qualquer coisa eu compartilho meu código para vocês verem.

2 respostas
solução!

Olá, Gabriel. Tudo bom?

Então, seu banco de dados é (me corrija se eu estiver errado):

Tabela_VENDAS
    Id,
    Data,
    Total

Tabela_PRODUTOS    
    (colunas não mencionadas)

Tabela_ITEMS
    Id,
    FK_PRODUTO, <~~ (estrangeira p/ Tabela_PRODUTOS)
    FK_VENDA, <~~ (estrangeira p/ Tabela_VENDAS)
    Quantidade,
    SubTotal,
    PrecoUnitario

Alguns comentários sobre a modelagem do banco:

  • A Tabela_ITEMS possui uma coluna chamada PrecoUnitario. Será que esta coluna não deveria fazer parte de Tabela_PRODUTOS?
  • A Tabela_ITEMS possui a coluna SubTotal. Mas, este valor é calculado à partir do preço unitário. Eu sugiro que você remova esta coluna da sua tabela e deixe o trabalho de cálculo para sua aplicação.
  • A Tabela_VENDAS possui uma coluna Total. Este valor poderia ser calculado pela aplicação no momento de exibição também.

Essas alterações no modelo fazem sentido quando pensamos na situação em que o preço de um produto muda. Nesta mudança, no modelo atual, deveremos atualizar várias outras tabelas: a tabela de items (coluna SubTotal) e a tabela de Vendas (coluna Total).

Gostaria de comentar também sobre a coluna Data da Tabela_VENDAS. Este nome pode ganhar muitos significados: data de criação VS. data de finalização VS. data de pagamento, etc.

Uma mudança no modelo pode trazer a estrutura a seguir:

Tabela_VENDAS
    Id,
    DataCriacao,
    DataFinalizacao

Tabela_PRODUTOS    
    Id,
    Nome,
    Descricao,
    Valor

Tabela_ITEMS
    Id,
    FK_PRODUTO, <~~ (estrangeira p/ Tabela_PRODUTOS)
    FK_VENDA, <~~ (estrangeira p/ Tabela_VENDAS)
    Quantidade

Agora, com relação a tela, você tem uma infinidade de escolhas para popular estas tabelas! Pelo que entendi, você está em uma aplicação Desktop. Certo? Você pode criar um formulário para criação de venda com a usabilidade:

  • 1.) Usuário adiciona um produto (pode ser por meio de um ComboBox ou um botão que abre outra grid para ele selecionar o produto);
  • 2.) No produto adicionado, o usuário pode mudar a quantidade de produtos;
  • 3.) Usuário pode adicionar mais produtos e ter uma quantidade diferente;
  • 4.) Usuário clica em OK e você tem sua venda criada.

Neste formulário, a coluna SubTotal (o total de cada Qtd. X Produto.Preco) é calculada dinamicamente. No formulário das vendas, a coluna Total também é calculada dinamicamente (soma do SubTotal de todas as vendas).

Então, pra finalizar, vamos supor o exemplo de uma loja de peças de computador.

  • Teremos os produtos HD de 500gb e o processador Intel Core I7;
  • Uma pessoa comprou 2 hds enquanto;
  • Outra pessoa comprou 1 hd e 1 processador.

Seu banco de dados ficará desta forma:

Tabela_PRODUTOS:

+----+-------------+------------------------+---------+
| Id | Nome        | Descricao              | Valor   |
+----+-------------+------------------------+---------+
| 01 |          HD |            HD de 500GB |  200.00 |
| 02 | Processador |  Intel Core I7, 3.2ghz | 1400.00 |
+----+-------------+------------------------+---------+

Tabela_VENDAS:

+----+-------------+
| Id | DataCriacao |
+----+-------------+
| 01 |  13/06/2018 |
| 02 |  13/06/2018 |
+----+-------------+

Tabela_ITEMS:

+----+------------+----------+------------+
| Id | FK_PRODUTO | FK_VENDA | Quantidade |
+----+------------+----------+------------+
| 01 |          1 |        1 |          2 | < ~~ Produto 1 (hd), da Venda 1 e qtd. 2
| 02 |          1 |        2 |          1 | < ~~ Produto 1 (hd), da Venda 2 e qtd. 1
| 03 |          2 |        2 |          1 | < ~~ Produto 2 (processador), da Venda 2 e qtd. 1
+----+------------+----------+------------+

O que você acha? Deu uma clarificada?

Abs e bons estudos.

Cara ajudou muito, eu realmente estava com problemas modelando o banco de dados.

Era um trabalho esse que eu precisava entregar e quis fazer às pressas... acabou que nem vou conseguir implementar a tela de vendas.

Mas mesmo assim obrigado pela explicação, vou estar estudando mais e aplicando o que você disse para treinar mais!

Abs, Valeu!