(Resolvido)Duplicidade de Dados - MySQL

Bom dia a todos!!!

Meu sistema de venda de produtos, está funcionando da seguinte maneira:

Tela de Vendas:

Clico em Novo e abre-se uma janela:

Aqui o usuario preenche as informações relacionadas ao cliente, e em seguida ele vai add os produtos clicando em Adicionar Produtos, ao clicar em Adicionar Produtos abre-se uma nova Janela:

aqui o usuario irá preencher os dados dos produtos(Produto, Quantidade) o valor unitario e valor total do item são gerados automaticamente, até aqui está tudo ok!

Agora depois que os dados dos produtos foram preenchidos pelo usuario, ele irá salvar o produto na grid(veja na imagem que há uma grid, ele receberá os produtos).

A lógica que eu gostaria:

Toda vez que o usuario clicar em salvar, o produtos e suas informações são salvas na grid, e os campos são limpos para add um novo produto e o ciclo se repete até que todos os produtos estejam add na grid, ao terminar o usuario clicar em fechar e ai sim a janela se fecha, mas eu não tenho a menor ideia de como fazer, neste momento o botão salvar não tem Logica nenhum, está zerado.

Depende de como você quer salvar, se quer salvar apenas na sessão. Faça uma interface e deixe isso salvo numa lista na memória do programa enquanto ele estiver executando, e a lista não for limpa tudo estará salvo lá. Agora se você quer algo mais complexo, você pode fazer da forma mais simples que é criando um arquivo (.TXT/.XML/.YML, etc…) ou então um banco de dados.

1 curtida

Eu quero salvar tudo no banco de dados

consegui dar uma evoluida e agora está assim depois que salvo:

@Lucas_Camara alguma dica? rs

1 curtida

Quando vc clica em Salvar para adicionar o produto nessa tabela, vc tem que adicionar na Venda também (usando aquele método de addProduto).

E tah estranho esse Textfield na coluna Quantidade. Não deveria ser adicionado o valor do textfield em vez do componente textfield?

faz commit do código que eu vejo ele aqui

1 curtida

@Lucas_Camara


Consegui arrumar a coluna Produtos e Valor Unitário, resta apenas a quantidade

no banco aparentemente está sendo tudo salvo.

@Lucas_Camara

Excelente!

Quais a colunas que a tabela do banco de dados Venda tem?

1 curtida

@Lucas_Camara

Do jeito que essa tabela está, uma venda poderá ter apenas um produto, pois o id do produto está na venda. Tente imaginar um registro nessa tabela de uma venda que tenha mais de um produto.

1 curtida

@Lucas_Camara

então neste caso a melhor solução seria voltar a ter uma classe para a venda e outra classe para os produtos vendidos, como estava antes?

Se vc quiser vincular um mesmo produto em várias vendas e permitir que uma venda possua mais de um produto, sim. Mas é importante que vc entenda o pq disso. Essa parte da modelagem é importante conhecer.

1 curtida

@Lucas_Camara

Vamos por partes

1º eu voltei a classe ProdutoVendido para o sistema (atualizei no git)

2º Veja que no momento de adicionar um produto para venda, o comboBox não busca mais os produtos e nem o valor Unitario, então como disse antes, vamos por partes…1ª coisa: Como fazer buscar?

No momento, o código deste comboBox está assim:

List<ProdutoVendido> listaDeProdutos = produtoVendidoRepository.findAll();
		txtProdutos.setItemLabelGenerator(produtoVendido -> produtoVendido.getProduto().getNome());
		txtProdutos.setItems(listaDeProdutos);
		txtProdutos.addValueChangeListener(event -> {

			NumberFormat formatter = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));

			try {

				txtValorUnitario.setValue(formatter.format(event.getValue().getProduto().getValor()));

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

		});

ANTES, quando estava buscando, estava assim:

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

		});

A combobox de produtos, tu pode deixar do jeito que estava, pois ela é para apresentar os produtos cadastrados msm (independente da venda).

1 curtida

@Lucas_Camara

Agora é contigo, farei tudo na ordem que vc pedir…qual o próximo passo?

Como está o código do click do botão Adicionar Produtos (digo o botão que adiciona o produto à venda da modal menor)?

1 curtida

@Lucas_Camara

este código

    btnAddProduto.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
		btnAddProduto.addClickListener(e -> {
			
			addClickModal();
			grid.getDataProvider().refreshAll();
			
		}); 

é deste botão:

Esse é o método do botão Add Produto então. Na ação dele, vc deve pegar os dados dos campos e adicionar na venda.

O produto adicionado na venda, é aquela ProdutoVendido. É nela que será armazenada qual o produto está sendo vendido, por qual valor e a quantidade.

1 curtida

@Lucas_Camara

Ok entendi, e qual será nosso próximo passo?

Assim?

	btnAddProduto.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
		btnAddProduto.addClickListener(e -> {
			venda.addProduto(txtProdutos, txtQuantidade, txtValorUnitario, txtValorTotalDoItem);
			
			addClickModal();
			grid.getDataProvider().refreshAll();
			
		});

Isso, mas não passe os elementos da tela (textfields, comboboxes, etc) para a venda. Vc deve passar o produto e os valores de quantidade (Integer) e o valor produto (Double).

1 curtida