Vanilson 2 Denunciar post Postado Janeiro 27, 2012 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
Vanilson 2 Denunciar post Postado Janeiro 28, 2012 Pessoal, consegui resolver o problema... Compartilhar este post Link para o post Compartilhar em outros sites