Baixar estoque

6 respostas
aprJava

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()); } }

6 Respostas

S

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

Nicolas_Fernandes

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:
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);
    }
}

Que tal?

Espero ter ajudado,
fique com Deus! :D

aprJava

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

aprJava
Opa, Nicolas Fernandes! esta modelada assim:
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(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());
        }
    }
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!
Nicolas_Fernandes

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!

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:

aprJava

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.

Criado 3 de março de 2012
Ultima resposta 5 de mar. de 2012
Respostas 6
Participantes 3