Dar baixa no estoque

13 respostas
J

Bom estou desenvolvendo uma aplicação que ela possui um frente de caixa e um cadastro de produtos entre outros.
Só que tenho uma dúvida, quando vou cadastrar o produto eu informo qual a quantidade que vai ter no estoque e qual o estoque critico que aquele produto pode chegar.
Por exemplo, entro 20 pacotes de arroz, e o estoque critico é 5.
até ai ta tudo certo, só que quando forem efetuar uma venda e compra 1 pacote de arroz eu quero q de baixa no estoque do arroz.
por exemplo, o cliente comprou 1 pacote de arroz então se o estoque era 20 passou a ser 19.
No Formulario possui um botão salvar, na hora que o usuario clicasse no botao ele desse a baixa no estoque.
Só que como faço para dar baixa ?
qual código eu uso ? Por favor me ajudem.

13 Respostas

I

Quando vc ta efetuando a venda vc não da a busca do produto?

Digamos que vc tem um atributo na sua tela de qtdadeVendida

basta na hora de salvar vc pegar o seu produto.getEstoque() - qtdadeVendida e setar de volta no seu estoque, dessa forma ele dará baixa no estoque.

D

Amigo, UPDATE na tabela…
SET estoque = novoValor…

J

VC tem q implementar no mesmo método que salva a venda um código que faz a atualização do estoque dos produtos
± assim:

public void salvarVenda(Produto p, Int qtd)
{
      .... codigo para salvar a venda
      Produto pa = DAO.getProduto(p.id);
     pa.setEstoque = pq.getEstoque() - qtd;
     DAO.salvarAtualizarProduto(pa);
}

Exemplo bem simples, mas pode variar muito dependendo da estrutura q vc tem.
Da mesma forma vc deve implementar algo somando no estoque, no método que salva a as Compras.
qq coisa posta o seu código que fica mais fácil de t ajudar.

R

Amigo, imagine a seguinte situação:

Você fez todo seu código la de insert e e quando as informações que você mandou para o banco
chegam a ele, o mesmo retorna uma exceção, você teria que dar um ROLLBACK no banco, muito bem,

veja como costumo contornar este problema:

Primeiro, não se preocupe com ficar fazendo código para fazer este controle.
Segundo, estude trigger e vai ver que ela vai solucionar o seu problema de uma forma muito eficiente.

vou deixar um exemplo de uma trigger que estou usando no meu sistema para que você possa ter uma
idéia do que estou falando:

SET TERM ^ ;



CREATE OR ALTER TRIGGER TG_UP FOR T_UTILIZACAO_PRODUTO
ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 0
AS
begin
  if (inserting) then
  begin
    update t_produto
    set QTDE_ATUAL_PRO = QTDE_ATUAL_PRO - new.qtde_udp
    where T_PRODUTO.COD_PRO = new.COD_PRO;
  end

  if (deleting) then
  begin
    update t_produto
    set QTDE_ATUAL_PRO = QTDE_ATUAL_PRO + old.qtde_udp
    where T_PRODUTO.COD_PRO = old.COD_PRO;
  end

  if (updating) then
  begin
    update t_produto
    set QTDE_ATUAL_PRO = QTDE_ATUAL_PRO - new.qtde_udp
    where T_PRODUTO.COD_PRO = new.COD_PRO;
    update t_produto
    set QTDE_ATUAL_PRO = QTDE_ATUAL_PRO + old.qtde_udp
    where T_PRODUTO.COD_PRO = old.COD_PRO;
  end
end
^


SET TERM ; ^

espero ter ajudado, e bons estudos xD'

J

No meu Banco(MySQL) eu tenho a tabela de Produtos que tem o campo de quantidade_estoque, e na minha tabela de vendas eu tenho o campo quantidade_produtos_venda.
Quando eu clicar no botão salvar quero que a quantida_estoque seja subtraida pela quantidade_produtos_venda.

O Código que eu uso para salvar a venda no banco é esse:

public boolean efetuarVenda(Venda venda) {

try {

con = acessoBD.conectar();

ps = con.prepareStatement(efetuarVendaItens);\ método->> efetuarVenda = insert into vendas (id_produto, id_venda, quant_venda, valor) values(?, ?, ?, ?);
ps.setInt(1, venda.getItensVenda().get(i).getProduto().getId());
        ps.setInt(2, venda.getId());
        ps.setInt(3, venda.getItensVenda().get(i).getQtde());
        ps.setDouble(4, venda.getItensVenda().get(i).getValor());

            ps.executeUpdate();
        }
        acessoBD.desconectar();
        return true;

    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
}

e na hora que clica no botão chama esse método->

private void registraVenda() {

if (getCliente() == null) {

JOptionPane.showMessageDialog(this, Selecione um Cliente, Erro, JOptionPane.ERROR_MESSAGE);

} else if (itensVendas.isEmpty()) {

JOptionPane.showMessageDialog(this, Insira Itens na Venda, Erro, JOptionPane.ERROR_MESSAGE);

} else {

Venda venda = new Venda();

venda.setClientes(getCliente());

venda.setItensVenda(itensVendas);

VendaBD vendaBD = new VendaBD();

if (vendaBD.efetuarVenda(venda)) {

JOptionPane.showMessageDialog(this, Venda registrada com sucesso!, Informação, JOptionPane.INFORMATION_MESSAGE);

}

}

}

Qual Código eu uso para Subtrair o quantidade_estoque pela quantidade_produto_venda ?

D

Camarada, use as tags [ code] [/ code] para postar código.

Seguinte, você quer tratar disto onde? No banco de dados ou na aplicação?

J

Na aplicação, quero saber qual o código uso para fazer essa subtração e atualizar no campo da tabela;

Vlw ai galera ;D

D

Primeiro, leia isto e aplique o que se pede, http://guj.com.br/java/50115-voce-e-novo-no-guj-vai-criar-um-topico-e-colar-seu-codigo-fonte-leia-aqui-antes-por-favor.

Segundo, já ouviu falar em SQL UPDATE?

I

quando vc tem o seu objeto venda vc seta uma lista de itens venda correto? na sua lista, vc tem o objeto produto e a qtdade vendida correto?
agora pensa um pouco, como eu posso fazer pra realizar esse calculo?

vc vai pegar a qtdade em estoque do seu objeto produto e diminuir, com uma operação matemática básica, a qtdade vendida, em seguida setar no seu produto a qtdade atual e dar um update no seu produto…

Cara eu estou explicando dessa forma, e não dando o código, primeiro porque senão vc não aprende, só da um copy+paste e segundo pq não vou pensar no código por vc, a lógica eu e outras já explicaram, agora cabe a você pesquisar e desenvolver o código, ta tudo ai no post, não pede o código que ninguém vai te dar.

Abraço

J

Tentando aqui galera, Vlw ai;D

L

Bom dia!

Eu costumo utilizar trigger de base para automatizar essas tarefas, claro que utilizando transações e try/catch para evitar problemas.
Nesse link http://www.devmedia.com.br/post-1695-Introducao-a-triggers.html tem uma matéria bem simples sobre o assunto. Mesmo estando relacionado com SQL SERVER, o que importa é conhecer o conceito e como aplicar. Em que banco fazer isso vai depender de adaptações na sintaxe, mas nada complicado.

Abraços.

J

De volta aqi pessoal, quase conseguindo agora, vou falar o que eu consegui fazer:

Na Classe de conexao do formulario cadastro de produtos com o a tabela produtos, eu criei outra SQL e outro método que vou postar aki abaixo:

SQL: private String atualizaQuantidade = "update produto set quant_estoque = ? where produto.id = ?"; \\ o código SQL para atualizar o campo Quantidade Estoque

Método:

public boolean alteraQuantProduto(Produto produto) {
        try {
            con = acessoBD.conectar();
            ps = con.prepareStatement(atualizaQuantidade); \\ o SQL Acima

            ps.setInt(1, produto.getQuantEstoque());
             ps.setInt(2, produto.getId());

            ps.executeUpdate();

            acessoBD.desconectar();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

E logo depois Criei na Classe do Frente de Caixa outro método AlteraQuantiProduto:

private void alteraQuantiProduto() {

         ProdutoBD produtoBD = new ProdutoBD(); 
          produto.setQuantEstoque((Integer) tf_quantidade.getValue());\\ Obs: que ele ta pegando o valor que ta TextField do formulario de Frente de Caixa e colocando(update) no campo Quantidade_Estoque da tabela de Produto,  que ele ta apagando o que tinha antes e colocando o valor da quantidade de produtos que eu atribui na venda e não é pra fazer isso. O certo seria ele subtrair o que tava antes pela quantidade qe eu coloquei no TextFiexl, Por exemplo: Tinha 5 arroz no estoque, e na compra foi vendido 1, então é pra 4 arrox no estoque.
Eu  não estou sabendo pegar esse QuantEstoque e Subtrair pelo Valor atribuido no textFiel.

      
         if(produtoBD.alteraQuantProduto(produto)) {
               JOptionPane.showMessageDialog(this, "Quantidade alterada com sucesso!", "Confirmação", JOptionPane.INFORMATION_MESSAGE);
            }
          else {
                JOptionPane.showMessageDialog(this, "Erro ao alterar os dados!", "Erro", JOptionPane.ERROR_MESSAGE);
            }
        }

Só que ainda ah um Erro, Obs: que ele ta pegando o valor que ta TextField do formulario de Frente de Caixa e colocando no campo Quantidade_Estoque da tabela de Produto, Só que ele ta apagando o que tinha antes e colocando o valor da quantidade de produtos que eu atribui na venda e não é pra fazer isso. O certo seria ele subtrair o que tava antes pela quantidade qe eu coloquei no TextFiel, Por exemplo: Tinha 5 arroz no estoque, e na compra foi vendido 1, então é pra 4 arrox no estoque.
Eu só não estou sabendo pegar esse QuantEstoque e Subtrair pelo Valor atrivuido no textFiel. Da uma ajudinha ai pessoal, to quase Conseguindo.

D

Camarada, [ code] sem espaço entre os colchetes e a palavra.
Corrige isso.

Criado 24 de maio de 2011
Ultima resposta 24 de mai. de 2011
Respostas 13
Participantes 6