Baixar estoque

Ola, gostaria de saber como faço pra dar baixa no estoque quando uma venda for efetuada?
segue abaixo o codigo da venda

private void salvarNoBanco(){ try { Contato c = new ContatoDao().getLista(jCCliente.getSelectedItem().toString()).get(0); for (int i = 0; i < this.vendas.getRowCount(); i++) { Vendas ven = new Vendas(); ven.setContato(c); ven.setDescricao(this.vendas.getValueAt(i, 0).toString()); ven.setQuant(Integer.valueOf(this.vendas.getValueAt(i, 1).toString())); ven.setValor(Double.valueOf(this.vendas.getValueAt(i,2).toString())); ven.setTotal(Double.valueOf(this.vendas.getValueAt(i,3).toString())); VendasDao dao =new VendasDao(); dao.adiciona(ven); } } catch (Exception ex) { System.out.println("Erro " + ex.getMessage()); } }

Eu usaria uma trigger no banco de dados. Acho mais fácil e prático do que fazer na própria aplicação.

Opa, aprJava!
Há a possibilidade do uso de Triggers, como o SalomaoNeto propôs.
Caso você queira fazer via código…

  1. Bom, suponho que sua venda seja modelada parecida com isso:
public class Produto {
    private long ID;
    private String nome;
    private int quantidadeEstoque;
}

public class ProdutoVenda {
    private Produto produto;
    private int quantidade;
}

public class Venda {
    private long ID;
    private Date data;
    private List<ProdutoVenda> produtos;
}

Caso seja, você poderia fazer assim:

[code]public void SalvarVenda(Venda entidadeVenda) throws SQLException {

VendaDAO entidadeVendaDAO = new VendaDAO();
ProdutoDAO entidadeProdutoDAO = new ProdutoDAO();
// Salva a venda no banco de dados.
entidadeVendaDAO.Salvar(entidadeVenda);

// Para cada um dos produtos da venda...
for (ProdutoVenda produto : entidadeVenda.getProdutos()) {

    // Recupera qual é o produto...
    Produto entidadeProduto = produto.getProduto();

    // Atualiza a quantidade dele, subtraindo da quantidade em estoque
    // a quantidade vendida.
    entidadeProduto.setQuantidadeEstoque(
        entidadeProduto.getQuantidadeEstoque() - produto.getQuantidade());

    // atualiza o produto na tabela.
    entidadeProdutoDAO.Atualizar(entidadeProduto);
}

}[/code]

Que tal?

Espero ter ajudado,
fique com Deus! :smiley:

Opa! esta ajundando sim e muito!!!
como ficaria a trigger no SQL pra isso?

Opa, Nicolas Fernandes!
esta modelada assim:[code]
public class Produto {

private Long id1;
private double preco;
private int quantidade;
private String nome1, categoria;

public class Contato {
private Long id;
private String nome,bairro,rua,referencia;

public class Vendas {

private double valor, total;
private String descricao;
Long idvenda;
private int quant;
private Contato contato;

//ProdutoDao
public void adiciona(Produto p1) throws SQLException {
String sql = “insert into produtos(nome1, preco, quantidade)”
+ “values (?,?,?)”;
PreparedStatement stmt = (PreparedStatement) conexao.prepareStatement(sql);
stmt.setString(1, p1.getNome1());
stmt.setDouble(2, p1.getPreco());
stmt.setInt(3, p1.getQuantidade());
stmt.execute();
stmt.close();
}

public List<Produto> getLista(String nome1) throws SQLException {
    String sql = "select * from produtos where nome1 like? Order by nome1";
    PreparedStatement stmt = (PreparedStatement) this.conexao.prepareStatement(sql);
    stmt.setString(1, nome1);
    ResultSet rs = stmt.executeQuery();
    List<Produto> minhaLista = new ArrayList<Produto>();
    while (rs.next()) {
        Produto p1 = new Produto();
        p1.setId1(Long.valueOf(rs.getString("id1")));
        p1.setNome1(rs.getString("nome1"));
        p1.setPreco(Double.valueOf(rs.getString("preco")));
        p1.setQuantidade(Integer.valueOf(rs.getString("quantidade")));
        minhaLista.add(p1);

    }
    rs.close();
    stmt.close();
    return minhaLista;
}

public void altera(Produto p1) throws SQLException {
    String sql = "update produtos set nome1=?, preco=?,quantidade=?"
            + " where id1=?";

    PreparedStatement stmt = (PreparedStatement) conexao.prepareStatement(sql);
    stmt.setString(1, p1.getNome1());
    stmt.setDouble(2, p1.getPreco());
    stmt.setInt(3, p1.getQuantidade());
    stmt.setLong(4, p1.getId1());
    stmt.execute();
    stmt.close();
}

public void remove(Produto p1) throws SQLException {
    String sql = "delete from produtos  where id1=?";
    PreparedStatement stmt = (PreparedStatement) conexao.prepareStatement(sql);
    stmt.setLong(1, p1.getId1());
    stmt.execute();
    stmt.close();
}

}
//VendasDao

public void adiciona(Vendas e1) throws SQLException {
String sql = “insert into venda(descricao, quant, valor, total,contatos_id1,idvenda)”
+ “values (?,?,?,?,?,0)”;
PreparedStatement stmt = (PreparedStatement) conexao.prepareStatement(sql);
stmt.setString(1, e1.getDescricao());
stmt.setInt(2, e1.getQuant());
stmt.setDouble(3, e1.getValor());
stmt.setDouble(4,e1.getTotal());
stmt.setLong(5,e1.getContato().getId());
stmt.execute();
stmt.close();
}

public List<Vendas> getLista(String rua) throws SQLException {
    String sql = "select * from venda where nome like? Order by nome";
    PreparedStatement stmt = (PreparedStatement) this.conexao.prepareStatement(sql);
    stmt.setString(1, rua);
    ResultSet rs = stmt.executeQuery();
    List<Vendas> minhaLista = new ArrayList<Vendas>();
    while (rs.next()) {
        Vendas e1 = new Vendas();
        e1.setIdvenda(Long.valueOf(rs.getString("idvenda")));
        e1.setDescricao(rs.getString("descricao"));
        e1.setQuant(rs.getInt("quant"));
        e1.setValor(rs.getDouble("valor"));
        e1.setTotal(rs.getDouble("total"));
        minhaLista.add(e1);

    }
    rs.close();
    stmt.close();
    return minhaLista;
}





public void altera(Vendas e1) throws SQLException {
    String sql = "update venda set descricao=?, quant=?,valor=?,total=?"
            + " where idvenda=?";

    PreparedStatement stmt = (PreparedStatement) conexao.prepareStatement(sql);
    stmt.setString(1, e1.getDescricao());
    stmt.setInt(2, e1.getQuant());
    stmt.setDouble(3, e1.getValor());
    stmt.setDouble(4, e1.getTotal());
    stmt.setLong(5, e1.getIdvenda());
    stmt.execute();
    stmt.close();
}

public void remove(Vendas e1) throws SQLException {
    String sql = "delete from endereco  where idvenda=?";
    PreparedStatement stmt = (PreparedStatement) conexao.prepareStatement(sql);
    stmt.setLong(1, e1.getIdvenda());
    stmt.execute();
    stmt.close();
}

}
//ContatoDao

public void adiciona(Contato c1) throws SQLException {
String sql = “insert into contatos (nome, rua, bairro, referencia)”
+ “values (?,?,?,?)”;
PreparedStatement stmt = (PreparedStatement) conexao.prepareStatement(sql);
stmt.setString(1, c1.getNome());
stmt.setString(2, c1.getRua());
stmt.setString(3, c1.getBairro());
stmt.setString(4, c1.getReferencia());
stmt.execute();
stmt.close();
}

public List<Contato> getLista(String nome) throws SQLException {
    String sql = "select * from contatos where nome like? Order by nome";
    PreparedStatement stmt = (PreparedStatement) this.conexao.prepareStatement(sql);
    stmt.setString(1, nome);
    ResultSet rs = stmt.executeQuery();
    List<Contato> minhaLista = new ArrayList<Contato>();
    while (rs.next()) {
        Contato c1 = new Contato();
        c1.setId(Long.valueOf(rs.getString("id")));
        c1.setNome(rs.getString("nome"));
        c1.setRua(rs.getString("rua"));
        c1.setBairro(rs.getString("bairro"));
        c1.setReferencia(rs.getString("referencia"));
        minhaLista.add(c1);

    }
    rs.close();
    stmt.close();
    return minhaLista;
}





public void altera(Contato c1) throws SQLException {
    String sql = "update contatos set nome=?, rua=?,bairro=?, referencia=?"
            + " where id=?";

    PreparedStatement stmt = (PreparedStatement) conexao.prepareStatement(sql);
    stmt.setString(1, c1.getNome());
    stmt.setString(2, c1.getRua());
    stmt.setString(3, c1.getBairro());
    stmt.setString(4, c1.getReferencia());
    stmt.setLong(5, c1.getId());
    stmt.execute();
    stmt.close();
}

public void remove(Contato c1) throws SQLException {
    String sql = "delete from contatos  where id=?";
    PreparedStatement stmt = (PreparedStatement) conexao.prepareStatement(sql);
    stmt.setLong(1, c1.getId());
    stmt.execute();
    stmt.close();
}

}

//Jframe
public class JPrincipal extends javax.swing.JFrame {

private Double num3;
DefaultTableModel tmContato = new DefaultTableModel(null, new String[]{"Codigo", "Nome", "Rua", "Bairro", "Referencia"});
List<Contato> contatos;
ListSelectionModel lsmContatos;
private ListSelectionModel lsmContato;
DefaultTableModel tmProduto = new DefaultTableModel(null, new String[]{"Codigo", "Descrição", "Preço", "Quantidade"});
List<Produto> produtos;
ListSelectionModel lsmProdutos;
private ListSelectionModel lsmProduto;
data mostra;
int iniciaComobo;
DefaultTableModel vendas = new DefaultTableModel(null, new String[]{"Descrição", "Quant", "Valor", "Total"}) {

    @Override
    public boolean isCellEditable(int row, int column) {
        return false;
    }
};

//eu preencho um table assim

public void tablePreenche() {
Adicionar:
{
double valor = Double.parseDouble(this.jTValorUnit.getText()) * Double.parseDouble(this.jTQuantVen.getText());
String[] linha = new String[]{
this.jCProduto.getSelectedItem().toString(),
this.jTQuantVen.getText(),
this.jTValorUnit.getText(),
String.valueOf(valor)};
vendas.addRow(linha);
}
}
// salvo no banco assim
private void salvarNoBanco(){
try {
Contato c = new ContatoDao().getLista(jCCliente.getSelectedItem().toString()).get(0);
for (int i = 0; i < this.vendas.getRowCount(); i++) {
Vendas ven = new Vendas();
ven.setContato©;
ven.setDescricao(this.vendas.getValueAt(i, 0).toString());
ven.setQuant(Integer.valueOf(this.vendas.getValueAt(i, 1).toString()));
ven.setValor(Double.valueOf(this.vendas.getValueAt(i,2).toString()));
ven.setTotal(Double.valueOf(this.vendas.getValueAt(i,3).toString()));
VendasDao dao =new VendasDao();
dao.adiciona(ven);
}
} catch (Exception ex) {
System.out.println("Erro " + ex.getMessage());
}
}

[/code]
gostaria de saber como baixar a quantidade d acordo que for vendendo se precisar de mais alguma coisa eu mando valeu pode ser trigger tambem tanto faz direto no sql ou na aplicaçao gostaria e d velo funcionando!
grato!

[quote=aprJava]gostaria de saber como baixar a quantidade d acordo que for vendendo se precisar de mais alguma coisa eu mando valeu pode ser trigger tambem tanto faz direto no sql ou na aplicaçao gostaria e d velo funcionando!
grato![/quote]

Ué, cara… Para baixar a quantidade de acordo com a venda, é só fazer a lógica:

  1. Você salva a venda do produto X. Você tem uma quantidade vendida deste produto;
  2. Você busca no seu banco de dados esse produto vendido. Ele tem uma quantidade em estoque;
  3. Você faz o seguinte cálculo: a quantidade em estoque do produto menos a quantidade vendida deste produto;
  4. Você atualiza o objeto deste produto com a nova quantidade em estoque e salva no banco.

Qual a dificuldade nesta lógica?
Fique com Deus! :smiley:

desculpe mais toda dificuldade. heheheehe
por isso postei todo esse codigo ae pra verificar se alguem pode mim ajudar
nao estou conseguindo fazer isso que voce falou
se puder olhar o codigo e dar uma força a mais agradeço
se não valeu do mesmo jeito ja ajudou.