Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Vanilson

[Resolvido] Problemas com actualização da quantidade do stock

Recommended Posts

Pessoal é o seguinte, estou a fazer actualização da quantidade dos produtos em stock em um sistema de venda, só que acontece a seguinte situação: se por acaso eu testar apenas a venda de um produto ele diminui a quantidade normalmente, agora se eu vender dois os mais produtos ele pega na quantidade do primeiro, segundo....n produtos soma tudo e subtrai na ultimo produto cadastrado no stock.

 

Exemplo:

 

Tabela stock

 

codigo_produto codigo_fornecedor quantidade preço data

1 2 4 ------ ------

2 4 19 ------ ------

 

Tendo em conta essa tabela se eu vender dois produtos (os produtos com código 1 e 2) e digamos que a cada produto vendido eu coloque como quantidade 2 ele irá somar 2 + 2 = 4 e vai pegar nesse 4 e subtrair por 19. O correcto seria ele ir no produto com código 1 e fazer 4-2 e no produto com código 2 fazer 19-2.

 

Eis o codigo:

StockDao.java

    private final String ACTUALIZAR_QUANTIDADE = "UPDATE stock SET quantidade = quantidade - ? WHERE codigo_produto = ? and codigo_fornecedor = ?";  
   public void actualizarQuantidade(Stock s) {  
       try {  
           conexao = Conexao.ligarBd();  
           ps = conexao.prepareStatement(ACTUALIZAR_QUANTIDADE);  
           ps.setInt(1, s.getQuantidade());  
           ps.setInt(2, s.getCodigoProduto());  
           ps.setInt(3, s.getCodigoFornecedor());  
           ps.executeUpdate();  
           ps.close();  
           conexao.close();  

       } catch (SQLException exception) {  
           JOptionPane.showMessageDialog(null, "Impossivel actualizar quantidade do stock " + exception, "Stock", JOptionPane.ERROR_MESSAGE);  
       }  
   }

Gui

   public void actualizarQuantidadeStock() {  
       Stock s = new Stock();  
       StockDao sd = new StockDao();  
       ls = new ArrayList<Stock>();  
       s.setQuantidade(Integer.parseInt(txtQuantidadeVendida.getText()));  
       s.setCodigoProduto(lsp.get(cboNomeProduto.getSelectedIndex()).getCodigoProduto());  
       s.setCodigoFornecedor(lsf.get(cboNomeFornecedor.getSelectedIndex()).getCodigoFornecedor());  
       ls.add(s);  
       for (int i = 0; i < ls.size(); i++) {  
           sd.actualizarQuantidade(ls.get(i));  
       }  
       //JOptionPane.showMessageDialog(null, lsp.get(cboNomeProduto.getSelectedIndex()).getCodigoProduto(), "Stock", JOptionPane.ERROR_MESSAGE);  
       //JOptionPane.showMessageDialog(null, lsf.get(cboNomeFornecedor.getSelectedIndex()).getCodigoFornecedor(), "Stock", JOptionPane.ERROR_MESSAGE);  
       JOptionPane.showMessageDialog(null, "Quantidade actualizada com sucesso", "Stock", JOptionPane.ERROR_MESSAGE);  
   }  
   public void inserir() {  
       if (ldv.size() == 0) {  
           JOptionPane.showMessageDialog(null, "Erro: Informe pelo menos uma venda a ser efectuada", "Venda", JOptionPane.ERROR_MESSAGE);  
       } else {  
           DetalhesVendaDao dvd = new DetalhesVendaDao();  
           DetalhesVenda dv = new DetalhesVenda();  
           for (int i = 0; i < ldv.size(); i++) {  
               dvd.inserir(ldv.get(i));  
               actualizarQuantidadeStock();  
           }  
           JOptionPane.showMessageDialog(null, "Nova venda efectuada com sucesso", "Venda", JOptionPane.INFORMATION_MESSAGE);  
       }  
   }  

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.