Bom dia, este tópico ficará um pouco longo, pois quero explicar exatamente o problema.
Tenho este sistema de vendas:
Neste momento ele está limpo pois não lancei nenhuma venda. Para lançar uma venda clico no botão Novo e abre-se a janela de vendas:
Informo o nome do cliente e automaticamente os campos telefone e celular são preenchidos(cliente previamente cadastrado no banco):
Com as informações do cliente preenchidas, o usuário vai adicionar os itens que este cliente irá comprar, para isso ele clicar no botão +item, cada vez que ele clicar neste botão ele poderá adicionar um produto: (na imagem abaixo cliquei 2x no botão +Item):
Tudo está funcionando perfeitamente até aqui, operações matemáticas ok, banco ok
agora vou salvar esta venda, clicando no botão Salvar: e a venda será lançada na lista e consequentemente na grid:
Como dito anteriormente tudo Ok até aqui.
Agora vou repetir todo este processo, para lançar uma segunda venda…então vou clicar no botão Novo, vejam o que acontece:
o Nome do cliente, telefone e celular, estão ok, limpos para receber outro cliente…mas os produtos da primeira venda, estão lançados na segunda venda.
Sei agora que devo criar um metodo para limpar estes produtos toda vez que o botão salvar ou fechar for clicado e chamar este metodo dentro deste botões.
Mas não sei como fazer, pois vejam o código que adiciona cada produto:
private void adicionaProduto() {
ComboBox<Produto> txtProdutos = new ComboBox<>();
NumberField txtQuantidade = new NumberField("Quantidade");
TextField txtValorUnitario = new TextField("Valor Unitário");
TextField txtValorTotalItem = new TextField("Valor Total Item");
txtProdutos.setWidth("370px");
txtProdutos.setLabel("Produtos");
List<Produto> listaDeProdutos = produtoRepository.findAll();
txtProdutos.setItemLabelGenerator(Produto::getNome);
txtProdutos.setItems(listaDeProdutos);
txtProdutos.addValueChangeListener(event -> {
NumberFormat formatter = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));
try {
txtValorUnitario.setValue(formatter.format(event.getValue().getValor()));
} catch (Exception e) {
e.printStackTrace();
}
});
//==========================================================================================================================
txtQuantidade.setHasControls(true);
txtQuantidade.setValue(null);
txtQuantidade.setMin(1);
txtQuantidade.addValueChangeListener(event -> {
NumberFormat formatter = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));
double valorTotal = 0;
try {
valorTotal = formatter.parse(txtValorUnitario.getValue()).doubleValue() * txtQuantidade.getValue();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
txtValorTotalItem.setValue(formatter.format(valorTotal));
double soma = 0;
for (TextField tf : valores) {
try {
soma += formatter.parse(tf.getValue()).doubleValue();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
campoSomaValores.setValue(formatter.format(soma));
});
HorizontalLayout linhaNova = new HorizontalLayout();
linhaNova.add(txtProdutos, txtQuantidade, txtValorUnitario, txtValorTotalItem);
venderDiv.add(linhaNova);
valores.add(txtValorTotalItem);
}
Todas as variaveis, incluindo o layout horizontal que é adicionado toda vez que clico +item está dentro de um metodo.
Sendo assim, não sei como acessar o layout ou acessar as variaveis que estão dentro de um metodo, a partir de outro metodo
É com isso que preciso de ajuda…preciso limpar estes campos(produto, quantidade, valor Unitario e Valor Total Item) toda vez que eu salvar ou fechar a venda
Toda ideia é bem vinda!!





