Opa renan vlw por me ajudar, não é uma duvida e sim uma base, como falado acima, tenho a classe produto compra e compraProduto, na classe compra.
@SuppressWarnings("serial")
@Entity
public class Compra implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long codigo;
private Double precoTotal;
private Double valor;
private Calendar Data = Calendar.getInstance();
@ManyToMany
private List<Produto> produtos = new ArrayList<Produto>();
@OneToOne
@JoinColumn(name = "formaDePagamento_codigo")
private FormaDePagamento formaDePagamento = new FormaDePagamento();
@OneToOne
@JoinColumn(name = "quantidadeParcela_codigo")
private QuantidadeParcela quantidadeParcela = new QuantidadeParcela();
private Double valorParcela;
na compra posso ter varios produtos correto? agora na classe produto.
@Entity
@SuppressWarnings("serial")
public class Produto implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long codigo;
private String nome;
private Double preco;
private Double precoAVender;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "fornecedor_codigo")
private Fornecedor fornecedor = new Fornecedor();
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "marca_codigo")
private Marca marca = new Marca();
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "estoque_codigo")
private Estoque estoque = new Estoque();
aqui irá gerar uma tabela associativa, que eu estou usando ela assim.
@Entity
@SuppressWarnings("serial")
public class Compra_produto implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long codigo;
@ManyToOne
@JoinColumn(name = "Compra_codigo", nullable = true)
private Compra compra = new Compra();
@ManyToOne
@JoinColumn(name = "produtos_codigo", nullable = true)
private Produto produto = new Produto();
private Integer quantidade;
Correto? Aqui sem nenhuma duvida e nenhum erro, depois tenho o meu bean, que é a compra.
@Named(value = "compraBean")
@ViewScoped
@SuppressWarnings("serial")
public class CompraBean implements Serializable {
@Inject
private ProdutoDao produtoDao;
@Inject
private Compra_produto compraProduto;
@Inject
private Compra compra;
@Inject
private Produto produto;
@Inject
private CompraProdutoDao compraProdutoDao;
@Inject
private FormaDePagamentoDao formaDePagamentoDao;
@Inject
private QuantidadeParcelaDao quantidadeParcelaDao;
@Inject
private CompraDao compraDao;
private List<Compra_produto> compraProdutos = new ArrayList<Compra_produto>();
@Transacional
public void salvar() {
if(compra.getCodigo() == null) {
compraDao.salvar(compra);
Compra compraCodigo = compraDao.buscarPorCodigo(compra.getCodigo());
compraProduto.setCompra(compraCodigo);
compraProdutoDao.salvar(compraProduto);
Mensagem.mensagemInfo("Compra realizado com sucesso");
} else {
}
this.compra = new Compra();
this.compraProduto = new Compra_produto();
}
@Transacional
public List<FormaDePagamento> getListaPagamentos() {
return formaDePagamentoDao.lista();
}
@Transacional
public List<QuantidadeParcela> getListaParcelas() {
return quantidadeParcelaDao.lista();
}
@Transacional
public List<Compra_produto> getListaCompraProdutos() {
return compraProdutoDao.lista();
}
@Transacional
public List<Produto> getListaProdutos() {
return produtoDao.listaProdutos();
}
@SuppressWarnings("unused")
@Transacional
public void valorProduto() {
List<Produto> produtos = produtoDao.listaProdutos();
for (Produto produto : produtos) {
compra.setPrecoTotal(compraProduto.getQuantidade()
* compraProduto.getProduto().getPreco());
}
System.out.println("Preço total da compra: "
+ this.compra.getPrecoTotal());
}
@SuppressWarnings("unused")
public void somarParcela() {
List<QuantidadeParcela> parcelas = quantidadeParcelaDao.lista();
for (QuantidadeParcela quantidadeParcela : parcelas) {
compra.setValorParcela(compra.getPrecoTotal()
/ compra.getQuantidadeParcela().getQuantidadeParcela());
}
System.out.println("Preço total parcela: "
+ this.compra.getPrecoTotal());
}
public void carregarProduto(Produto produto) {
this.produto = produto;
}
depois meu html
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
<ui:composition template="/template/template.xhtml">
<ui:define name="conteudo">
<h:form>
<p:dataTable>
<f:facet name="header">
<p:commandButton value="Compra" oncomplete="PF('compra').show();" />
</f:facet>
</p:dataTable>
</h:form>
<p:dialog widgetVar="compra" modal="true" appendTo="@(body)"
resizable="false" closable="true" draggable="false" header="Compra">
<h:form id="formularioCompra">
<h:panelGrid columns="2">
<p:outputLabel value="Produto: " for="produto" />
<p:selectOneMenu id="produto"
value="#{compraBean.compraProduto.produto}"
converter="produtoConverter">
<f:selectItem itemValue="" itemLabel="Selecione..." />
<f:selectItems value="#{compraBean.listaProdutos}" var="produto"
itemValue="#{produto}" itemLabel="#{produto.nome}" />
<p:ajax listener="#{compraBean.carregarProduto(produto)}"
update="precoUnitario" />
</p:selectOneMenu>
<p:outputLabel value="Preço unitario: " for="precoUnitario" />
<p:inputText id="precoUnitario"
value="#{compraBean.compraProduto.produto.preco}" readonly="true" />
<p:outputLabel value="Quantidade: " for="quantidade" />
<p:inputText id="quantidade"
value="#{compraBean.compraProduto.quantidade}">
<p:ajax listener="#{compraBean.valorProduto}" update="valorTotal" />
</p:inputText>
<p:outputLabel value="Valor Total: " for="valorTotal" />
<p:inputText id="valorTotal"
value="#{compraBean.compra.precoTotal}" />
<p:outputLabel value="Data: " for="data" />
<p:calendar id="data" value="#{compraBean.compra.data.time}">
<f:convertDateTime pattern="dd/MM/yyyy" />
</p:calendar>
<p:outputLabel value="Pagamento: " for="pagamento" />
<p:selectOneMenu id="pagamento"
value="#{compraBean.compra.formaDePagamento}"
converter="formaDePagamentoConverter">
<f:selectItem itemValue="" itemLabel="Selecione..." />
<f:selectItems value="#{compraBean.listaPagamentos}"
var="pagamento" itemValue="#{pagamento}"
itemLabel="#{pagamento.descricao}" />
</p:selectOneMenu>
<p:outputLabel value="Parcela: " for="parcela" />
<p:selectOneMenu id="parcela"
value="#{compraBean.compra.quantidadeParcela}"
converter="quantidadeParcelaConveter">
<f:selectItem itemValue="" itemLabel="Selecione..." />
<f:selectItems value="#{compraBean.listaParcelas}" var="parcela"
itemValue="#{parcela}" itemLabel="#{parcela.quantidadeParcela}" />
<p:ajax listener="#{compraBean.somarParcela}"
update="valorParcela" />
</p:selectOneMenu>
<p:outputLabel value="Valor parcela: " for="valorParcela" />
<p:inputText id="valorParcela"
value="#{compraBean.compra.valorParcela}" readonly="true" />
</h:panelGrid>
<p:commandButton value="Salvar"
actionListener="#{compraBean.salvar}" update="formularioCompra" />
</h:form>
</p:dialog>
</ui:define>
</ui:composition>
</html>
Ta salvando validando os campos tudo correto até aqui também não tenho nenhuma duvida, agora o jeito que estou fazendo ai encima, só estou conseguindo fazer compra de um produto, eu queria na hora da compra "adicionar" produto não só um, como por exemplo essa imagem.
https://www.google.com.br/search?q=tela+de+compra+sistema+web&tbm=isch&tbo=u&source=univ&sa=X&ved=0ahUKEwjW-a3M4uzSAhVGl5AKHaYdCbMQsAQIKA&biw=1360&bih=638#imgdii=7olrbv96OIFDHM:&imgrc=47woAhpolxBHxM:
Certo que essa imagem é de venda, mais é a mesma lófica que eu quero, ta vendo que ele tem um botão de inserir? e depois uma tabela mostrando os produtos que ele ta vendendo? Pode ver que tem 2 produtos, e eu quero é a mesma coisa.
Querer comprar varios produtos por vez e não um por um como estou fazendo, mais não sei nem por onde começar a fazer isso, deu pra entender?