Ajuda para obter o valor correto

Bom dia a todos, tenho uma tela de vendas que está com o seguinte comportamento até aqui:

Na imagem acima, vejam que tudo está ok…os produtos, as quantidades, valor unitario, valor total do item…na parte inferior a soma dos produtos está ok tbm…então clico em salvar, tenho este resultado:

Que tbm está correto, pois só consegui implementar(com grandiosa ajuda de pessoas aqui do fórum) a lógica para salvar os produtos.

Então tentei fazer a mesma coisa para quantidade, unitario e total no que foi feito para produtos

o código para produtos está aqui:

    txtProdutos.setWidth("370px"); //txtProdutos é o comboBox onde escolho o produto a ser vendido
		txtProdutos.setLabel("Produtos");
		List<Produto> listaDeProdutos = produtoRepository.findAll();
		txtProdutos.setItemLabelGenerator(Produto::getNome);
		txtProdutos.setItems(listaDeProdutos);
		txtProdutos.addValueChangeListener(event -> {
			venda.addProduto(txtProdutos.getValue()); //aqui onde chamo o metodo que está na entidade Venda e adiciono o Produto a venda
			NumberFormat formatter = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));
			try {

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

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

		});

Tentando aplicar o mesmo esquema para quantidade por exemplo:

recebo a informação de que o metodo addProduto em Venda no tem argumentos Double

Como obter a quantidade neste caso?

metodo addProduto em Venda:

public void addProduto(Produto produto) {
		ProdutoVendido produtoVenda = new ProdutoVendido(id, null, produto, valorTotalVenda, valorTotalVenda,
				valorTotalVenda);
		produtos.add(produtoVenda);
	}

Acho que faz mais sentido passar um ProdutoVendido no método addProduto de Venda.
Nessa classe deve ter um campo para a quantidade vendida e o valor total.

@RoinujNosde

Bom dia

então seguindo o que vc falou:

Na classe Venda

	public void addProduto(ProdutoVendido produtoVendido) {
		ProdutoVendido produtoVenda = new ProdutoVendido(id, null, null, valorTotalVenda, valorTotalVenda,
				valorTotalVenda);
		produtos.add(produtoVenda);
	} 

Na classe ProdutoVendido:

package br.com.fjsistemas.backend;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@AllArgsConstructor
@NoArgsConstructor
@Data
@Getter
@Setter
@Entity
public class ProdutoVendido {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;
	
	@ManyToOne
	private Venda venda;
	
	@ManyToOne
	private Produto produto;
	
	private String quantidade;
	private String valorUnitario;
	private String valorTotalDoItem;
}

e agora na VendaView:


public void addProduto(ProdutoVendido produtoVendido) {
		ProdutoVendido produtoVenda = new ProdutoVendido(id, null, null, valorTotalVenda, valorTotalVenda,
				valorTotalVenda); // Isso aqui já não faz sentido. Já está vindo um ProdutoVendido como argumento, não precisa criar outro. Só deletar essa linha e usar o que o método pede.
		produtos.add(produtoVenda);
	}

@RoinujNosde

    public void addProduto(ProdutoVendido produtoVendido) {
		ProdutoVendido produtoVenda = new ProdutoVendido(id, null, null, null, null, null);
		produtos.add(produtoVenda);
	} 


public void addProduto(ProdutoVendido produto) {
    produtos.add(produto);
}

E sim, isso vai causar erro em outras áreas. Antes era Produto, agora é ProdutoVendido. Tem que mudar o outro trecho para passar um ProdutoVendido vendido.


Você não sabe ver o retorno de um método? Geralmente passando o mouse por cima do método, o IDE vai mostrar alguns detalhes.
No caso do seu “getValue()” que mostrou no erro, deve ser algo assim:
public Double getValue()
Ou seja, o método vai retornar um Double e você tá passando para um método que pede outra coisa.

@RoinujNosde

	public void addProduto(ProdutoVendido produto) {
	    produtos.add(produto);
	} 

não sei se é isso que vc quer ver, mas vamos la:








Não era para mandar prints de quando passa o mouse no método. Isso foi uma dica para você.

Você está sempre passando argumentos errados e saber o retorno de um método e o que o outro pede vai prevenir isso.

@RoinujNosde

deixando a classe Venda com 3 metodos:

	public void addProduto(ProdutoVendido produto) {
		produtos.add(produto);
	}

	private String valorTotalVenda;

	public void addProduto(Double value) {
		// TODO Auto-generated method stub
		
	}

	public void addProduto(Produto value) {
		// TODO Auto-generated method stub
		
	} 

Os erros de compilação deixam de existir, agora preciso ver a lógica destes metodos

Usuário clica no botão Adicionar produto:

  • um objeto ProdutoVendido é criado e adicionado na Venda
  • no listener de quantidade, você define a nova quantidade no objeto acima

Que tema é esse que você usa no Eclipse?

DevStyle @Fefo80

1 curtida