Fala pessoal, estou nos finalmentes da minha aplicação, porém, cheguei em uma parte q me tomou alguns diass já, e é o seguinte, eu estou finalizando um sistema de frente de caixa e nele tenho um “backup” pra caso de um “pique” de luz ou algo que feche de forma errada a aplicação, e até ai funciona, me é retornado o id do cupom que eu utilizo para poder buscar os produtos cadastrados com aqueles itens, e ai que entra meu problema, na parte de finalização da venda eu consigo o valor total da compra, mas não se já foi pago algo, ou o percentual de desconto da compra, até tentei uma lógica mas na hora de validar não consegui pensar em nada…detalhe é que tenho 3 tabelas que compõe isto, Cupom, CupomItens, CupomMeiosPag, onde no primeiro é armazenado todos os dados do cupom, como datas, cliente, vendedor, etc. O segundo cadastra cada produto adicionado com o id do cupom, e o terceiro armazena as formas de pagamento e os valores(é a tabela que pensei em usar para poder fazer essa parte). segue meu código de “backup”->
public class RecuperaVenda {
/* Esta classe fica responsável por pegar
* vendas ainda não finalizadas('cupomfechado == false'),
* para recuperar os itens e valores em caso de queda
* de energia ou semelhantesS
*/
private static BigDecimal prodQtde = BigDecimal.ZERO;
private static BigDecimal valorTotalPago;
private static double percDesconto;
private static BigDecimal valorRestante;
public static boolean isOpenedSale = false;
public static boolean finalizaVendaIsOpened = false;
public RecuperaVenda() {
retrieveOpenedCupom();
}
//Pega o ultimo cupom aberto que tem e retorna o id do cupom
public void retrieveOpenedCupom() {
Connection conn = DefaultConnection.openConnectionADefaultConnection();
ResultSet result;
int idCupom = 0;
try {
Statement stmt = conn.createStatement();
result = stmt.executeQuery("SELECT idcupom, valortotalpago, percdesconto, valorrestante FROM cupom WHERE cupomfechado = 'false' ORDER BY idcupom DESC LIMIT(1);");
while(result.next()) {
idCupom = result.getInt("idcupom");
if(idCupom != 0) {
isOpenedSale = true;
percDesconto = Double.parseDouble(result.getString("percdesconto"));
Venda.cupom = new Cupom();
Venda.cupom.setIdCupom(idCupom);
retrieveCupomItens(idCupom);
}
else {
return;
}
}
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
//Recupera o codigo dos produtos baseados no id do cupom capturado acima
private void retrieveCupomItens(int idCupom) {
Connection conn = DefaultConnection.openConnectionADefaultConnection();
ResultSet result;
try {
Statement stmt = conn.createStatement();
result = stmt.executeQuery("SELECT codigo, qtde FROM cupomitens WHERE idcupom = '"+idCupom+"'");
while(result.next()) {
String prodCod = result.getString("codigo");
prodQtde = new BigDecimal(result.getString("qtde"));
retrieveProductFromCupomIten(prodCod);
}
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
//busca pelos produtos com os códigos retornados acima e preenche na tela novamente
private void retrieveProductFromCupomIten(String prcod) {
Connection conn = DefaultConnection.openConnectionADefaultConnection();
ResultSet result;
List<Produto> produtoList = new ArrayList<>();
try {
Statement stmt = conn.createStatement();
result = stmt.executeQuery("SELECT * FROM produto WHERE prodcod = '"+prcod+"'");
while(result.next()) {
int idProd = result.getInt("idprod");
String prodCod = result.getString("prodcod");
String unMedCod = result.getString("unmedcod");
String prodDesc = result.getString("proddesc");
BigDecimal aliquota = new BigDecimal(result.getString("aliquota"));
String cstCod = result.getString("cstcod");
BigDecimal custoMedio = new BigDecimal(result.getString("customedio"));
String cfop = result.getString("cfop");
String iat = result.getString("iat");
String ippt = result.getString("ippt");
String horaEstImportacao = result.getString("horaestimportacao");
GregorianCalendar dataEstImportacao = toCalendar(result.getString("dataestimportacao"));
BigDecimal quantEstImportacao = new BigDecimal(result.getString("quantestimportacao"));
BigDecimal quantFisica = new BigDecimal(result.getString("quantfisica"));
BigDecimal precoLista = new BigDecimal(result.getString("precolista"));
produtoList.add(new Produto(idProd, prodCod, unMedCod, prodDesc,
aliquota, cstCod, custoMedio, cfop,
iat, ippt, horaEstImportacao, dataEstImportacao,
quantEstImportacao, quantFisica, precoLista));
JFrameTelaDeVendas.getFrameDeVenda().numberTextFieldQtde.setText(String.valueOf(prodQtde));
for(Produto produto : produtoList) {
PreencheCamposTelas.glassNf(produto);
prodQtde = BigDecimal.ZERO;
}
}
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
private static GregorianCalendar toCalendar(String dateToConvert) {
DateFormat df = new SimpleDateFormat("dd-MM-yyyy");
GregorianCalendar cal = null;
Date date = null;
try {
date = df.parse(dateToConvert);
cal = new GregorianCalendar();
cal.setTime(date);
} catch (ParseException e) {
e.printStackTrace();
}
return cal;
}
private static void retrieveOpenedPayment(int idCupom) {
Connection conn = DefaultConnection.openConnectionADefaultConnection();
Statement stmt;
try {
stmt = conn.createStatement();
ResultSet result = stmt.executeQuery("SELECT forpagvencod, valorpago FROM cupommeiospag WHERE idcupom = '"+idCupom+"';");
valorTotalPago = new BigDecimal(result.getString("valorpago"));
valorRestante = new BigDecimal(result.getString("valorrestante"));
JFrameFinalizacaoVenda.getFrameFinalizacaoVenda().textFieldTotalPago.setText(String.valueOf(valorTotalPago));
JFrameFinalizacaoVenda.getFrameFinalizacaoVenda().textFieldDesconto.setText(String.valueOf(percDesconto));
JFrameFinalizacaoVenda.getFrameFinalizacaoVenda().textFieldValorASerPago.setText(String.valueOf(valorRestante));
} catch (SQLException e) {
e.printStackTrace();
}
}
quem puder me ajudar com algum artigo, lógica ou tiver algum exemplo me ajudaria muito