Galera, tenho uma dúvida e espero que alguém possa me ajudar.
Tenho as seguintes tabelas no meu banco: venda, itens venda, orçamento e itens orçamento.
Conforme eu vou adicionando produtos na jtable de produtos, o algorítimo já insere os produtos na tabela itens venda no banco e já vai dando baixo no estoque na tabela produto. O frame de orçamento é praticamente igual ao de venda, no entanto, a baixa no estoque não é feita e ao término do mesmo, é inserido no banco o status de “pendente”.
Eu fiz o seguinte, na pesquisa de orçamento, ao selecionar um orçamento um botão é habilitado e tenho a opção de negar ou autorizar o orçamento, com isso muda o status do orçamento no banco.
Se o status for negado ele apenas altera o status, mas se for autorizado o Frame de venda é aberto com os campos já preenchidos. Quero fazer isso para o usuário não tem que digitar tudo de novo na hora de fazer a venda, ou seja, já vir tudo preenchido e apenas conferir e clicar em finalizar para finalizar a venda.
Fiz o que citei acima, mas o que quero fazer e não estou conseguindo é o seguinte: Quero que ao iniciar esse frame de venda seja feito a baixa do estoque dos produtos com base nos itens da tabela itens orçamento. Por enquanto eu fiz o seguinte:
Eu tenho as classes de Modelo e Controle que cuidam das transações com o banco, mas fiz o que está abaixo no frame de visão do “consulta orçamento”.
O cod que está no final da instrução sql é passado como parâmetro ao mudar o status do orçamento selecionado.
O try/catch faz a inclusão do valor 0 na tabela de venda, mas o outro try/catch não faz nada. = (
Alguém poderia me ajudar a fazer o insert corretamente? Desde já agradeço.
mod.setOrcStatus((String) jComboStatus.getSelectedItem());
mod.setCodOrcamento(cod);
con.conexao();
if (jComboStatus.getSelectedItem().equals("AUTORIZADO")) {
control.alteraOrcamento(mod);
try {
PreparedStatement pst = con.fazcon.prepareStatement("insert into venda (venda_vlr)values(?)");
pst.setFloat(1, 0);
pst.execute();
con.executaSQL("select * from venda order by venda_codigo");
con.rs.last();
codVenda = con.rs.getInt("venda_codigo");
} catch (SQLException ex) {
JOptionPane.showMessageDialog(rootPane, "Erro:" + ex);
}
con.executaSQL("select *from orcamento inner join itens_orcamento_produto on orcamento.orc_codigo = itens_orcamento_produto.orc_codigo inner join produto\n"
+ "on itens_orcamento_produto.prod_codigo = produto.prod_codigo where orcamento.orc_codigo =" + cod);
try {
con.rs.first();
while (con.rs.next()) {
quantidadeProduto = con.rs.getInt("quantidade_produto");
codigoProduto = con.rs.getInt("prod_codigo");
con.executaSQL("select * from produto where prod_codigo=" + codigoProduto);
int qtdeProduto = con.rs.getInt("prod_quantidade");
if (qtdeProduto >= quantidadeProduto) {
PreparedStatement pst = con.fazcon.prepareStatement("insert into itens_venda_produto(venda_codigo,prod_codigo,quantidade_produto)values(?,?,?)");
pst.setInt(1, codVenda);
pst.setInt(2, codigoProduto);
pst.setInt(3, quantidadeProduto);
pst.execute();
//Baixa de estoque
int quant = 0, resul = 0;
con.executaSQL("select *from produto where prod_codigo ='" + codigoProduto + "'");
con.rs.first();
quant = con.rs.getInt("prod_quantidade");
resul = quant - quantidadeProduto;
pst = con.fazcon.prepareStatement("update produto set prod_quantidade=? where prod_codigo=?");
pst.setInt(1, resul);
pst.setInt(2, codigoProduto);
pst.execute();
} else {
JOptionPane.showMessageDialog(null, "Estoque insuficiente");
}
}
} catch (SQLException ex) {
//con.desconecta();
JOptionPane.showMessageDialog(null, "Erro ao adicionar produto!" + ex);
}