Pessoal, atualmente estou criando um projeto para colocar o aprendizado em prática juntamente aos cursos. Tenho um projeto de venda, onde eu posso realizar uma venda de produtos, em Venda eu tenho uma lista de Itens, onde tenho relacionado um produto a um item, e nesse item defino a quantidade de produtos, e o valor total para salvar no banco. E não quero repetir produtos, ou adicionar caso tenha estoque zero. Porem o método gravar só faz as verificações, ou melhor, só entra nos "Ifs" se esse item na lista não estiver gravado no banco. Abaixo está o código: obs: deixei comentado os métodos para fazer os testes...
package br.com.loja.bean;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;
import br.com.loja.dao.ItemDAO;
import br.com.loja.dao.ProdutoDAO;
import br.com.loja.dao.VendaDAO;
import br.com.loja.modelo.Item;
import br.com.loja.modelo.Produto;
import br.com.loja.modelo.Venda;
@ManagedBean
@ViewScoped
public class VendaBean {
private Venda venda = new Venda();
private Item item = new Item();
private Integer codBuscaProduto;
public Integer getCodBuscaProduto() {
return codBuscaProduto;
}
public void setCodBuscaProduto(Integer codBuscaProduto) {
this.codBuscaProduto = codBuscaProduto;
}
public Venda getVenda() {
return venda;
}
public Item getItem() {
return item;
}
public void setItem(Item item) {
this.item = item;
}
public void carregaAdiciona() {
ProdutoDAO pDAO = new ProdutoDAO();
this.item.setProduto(pDAO.buscarPodutoPorCodigo(codBuscaProduto));
if (this.item.getProduto() == null) {
System.out.println("O objeto está null");
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Produto não encontrado"));
this.item = new Item();
} else {
if (this.venda.getListaDeProdutos().contains(this.item)) {
System.out.println("Achou o produto na lista e entrou no IF");
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage("O produto já está na lista"));
this.item = new Item();
} else {
if (this.item.getProduto().getEmEstoque() == 0) {
System.out.println("O objeto tem estoque 0");
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage("Não há quantia suficiente deste produto em estoque"));
this.item = new Item();
} else {
System.out.println("Adicionando o produto");
ItemDAO iDAO = new ItemDAO();
//iDAO.gravarItem(item);
this.venda.adicionaProduto(item);
this.item = new Item();
}
}
}
}
public void removeItem(Item item) {
this.venda.removeProduto(item);
ItemDAO iDAO = new ItemDAO();
//item = iDAO.buscaItem(item.getId());
//iDAO.removerItem(item);
}
public void alteraItem(Item item) {
ItemDAO iDAO = new ItemDAO();
System.out.println(item.getProduto().toString());
System.out.println(item.getQuantidade());
item.setValorTotal(item.getQuantidade().multiply(item.getProduto().getValor()));
System.out.println(item.getValorTotal());
iDAO.alteraItem(item);
}
public void gravarVenda() {
VendaDAO vDAO = new VendaDAO();
vDAO.gravarVenda(this.venda);
this.venda = new Venda();
}
}
Modelagem: Venda:
package br.com.loja.modelo;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class Venda {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private BigDecimal valor = new BigDecimal(0);
@Temporal(TemporalType.TIMESTAMP)
private Calendar data = Calendar.getInstance();
@Enumerated(EnumType.STRING)
private FormaPagamento formaPagamento;
@ManyToMany
private List<Item> listaDeProdutos = new ArrayList<Item>();
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public BigDecimal getValor() {
return valor;
}
public void setValor(BigDecimal valor) {
this.valor = valor;
}
public Calendar getData() {
return data;
}
public void setData(Calendar data) {
this.data = data;
}
public FormaPagamento getFormaPagamento() {
return formaPagamento;
}
public void setFormaPagamento(FormaPagamento formaPagamento) {
this.formaPagamento = formaPagamento;
}
public List<Item> getListaDeProdutos() {
return listaDeProdutos;
}
public void setListaDeProdutos(List<Item> listaDeProdutos) {
this.listaDeProdutos = listaDeProdutos;
}
public void adicionaProduto(Item item) {
this.listaDeProdutos.add(item);
}
public void removeProduto(Item item) {
this.listaDeProdutos.remove(item);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((data == null) ? 0 : data.hashCode());
result = prime * result + ((formaPagamento == null) ? 0 : formaPagamento.hashCode());
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((listaDeProdutos == null) ? 0 : listaDeProdutos.hashCode());
result = prime * result + ((valor == null) ? 0 : valor.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Venda other = (Venda) obj;
if (data == null) {
if (other.data != null)
return false;
} else if (!data.equals(other.data))
return false;
if (formaPagamento != other.formaPagamento)
return false;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
if (listaDeProdutos == null) {
if (other.listaDeProdutos != null)
return false;
} else if (!listaDeProdutos.equals(other.listaDeProdutos))
return false;
if (valor == null) {
if (other.valor != null)
return false;
} else if (!valor.equals(other.valor))
return false;
return true;
}
}
Produto
package br.com.loja.modelo;
import java.math.BigDecimal;
import java.util.Calendar;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Transient;
@Entity
public class Produto {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String nome;
private String modelo;
private String marca;
private BigDecimal valor = new BigDecimal(0);
private int qtdMinima;
private int emEstoque;
private Calendar dataLancamento = Calendar.getInstance();
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getModelo() {
return modelo;
}
public void setModelo(String modelo) {
this.modelo = modelo;
}
public String getMarca() {
return marca;
}
public void setMarca(String marca) {
this.marca = marca;
}
public BigDecimal getValor() {
return valor;
}
public void setValor(BigDecimal valor) {
this.valor = valor;
}
public int getQtdMinima() {
return qtdMinima;
}
public void setQtdMinima(int qtdMinima) {
this.qtdMinima = qtdMinima;
}
public Calendar getDataLancamento() {
return dataLancamento;
}
public void setDataLancamento(Calendar dataLancamento) {
this.dataLancamento = dataLancamento;
}
public int getEmEstoque() {
return emEstoque;
}
public void setEmEstoque(int emEstoque) {
this.emEstoque = emEstoque;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((dataLancamento == null) ? 0 : dataLancamento.hashCode());
result = prime * result + emEstoque;
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((marca == null) ? 0 : marca.hashCode());
result = prime * result + ((modelo == null) ? 0 : modelo.hashCode());
result = prime * result + ((nome == null) ? 0 : nome.hashCode());
result = prime * result + qtdMinima;
result = prime * result + ((valor == null) ? 0 : valor.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Produto other = (Produto) obj;
if (dataLancamento == null) {
if (other.dataLancamento != null)
return false;
} else if (!dataLancamento.equals(other.dataLancamento))
return false;
if (emEstoque != other.emEstoque)
return false;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
if (marca == null) {
if (other.marca != null)
return false;
} else if (!marca.equals(other.marca))
return false;
if (modelo == null) {
if (other.modelo != null)
return false;
} else if (!modelo.equals(other.modelo))
return false;
if (nome == null) {
if (other.nome != null)
return false;
} else if (!nome.equals(other.nome))
return false;
if (qtdMinima != other.qtdMinima)
return false;
if (valor == null) {
if (other.valor != null)
return false;
} else if (!valor.equals(other.valor))
return false;
return true;
}
}
Item:
package br.com.loja.modelo;
import java.math.BigDecimal;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
@Entity
public class Item {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@OneToOne
private Produto produto = new Produto();
private BigDecimal quantidade = new BigDecimal(0);
private BigDecimal valorTotal = new BigDecimal(0);
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Produto getProduto() {
return produto;
}
public void setProduto(Produto produto) {
this.produto = produto;
}
public BigDecimal getQuantidade() {
return quantidade;
}
public void setQuantidade(BigDecimal quantidade) {
this.quantidade = quantidade;
}
public BigDecimal getValorTotal() {
return valorTotal;
}
public void setValorTotal(BigDecimal valorTotal) {
this.valorTotal = valorTotal;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((produto == null) ? 0 : produto.hashCode());
result = prime * result + ((quantidade == null) ? 0 : quantidade.hashCode());
result = prime * result + ((valorTotal == null) ? 0 : valorTotal.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Item other = (Item) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
if (produto == null) {
if (other.produto != null)
return false;
} else if (!produto.equals(other.produto))
return false;
if (quantidade == null) {
if (other.quantidade != null)
return false;
} else if (!quantidade.equals(other.quantidade))
return false;
if (valorTotal == null) {
if (other.valorTotal != null)
return false;
} else if (!valorTotal.equals(other.valorTotal))
return false;
return true;
}
}
o xHTML ainda estou modificando pois estou fazendo junto a ele o curso de PrimeFaces, mas o básico já está funcionando
XHTML:
<?xml version="1.0" encoding="UTF-8" ?>
<!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="_template01.xhtml">
<ui:define name="titulo">Home</ui:define>
<ui:define name="conteudo">
<title>Home</title>
<h:form id="FormAdicionarProdutos">
<p:messages id="messages"/>
<p:fieldset legend="Adicionar Produto">
<h:panelGrid columns="4">
<p:outputLabel value="Código do Produto: " for="lblCodProduto" />
<p:inputText id="lblCodProduto"
value="#{vendaBean.codBuscaProduto}" />
<p:commandButton value="Adicionar"
actionListener="#{vendaBean.carregaAdiciona}"
update="FormProdutos:tabelaProdutosAdicionados messages"
process="FormAdicionarProdutos"/>
<p:commandLink value="Verificar Estoque" />
</h:panelGrid>
</p:fieldset>
</h:form>
<h:form id="FormProdutos">
<p:fieldset legend="Produtos Adicionados">
<p:dataTable id="tabelaProdutosAdicionados" var="item"
value="#{vendaBean.venda.listaDeProdutos}">
<f:facet name="header">
Produtos Adicionados
</f:facet>
<p:column>
<f:facet name="header">Código</f:facet>
<h:outputLabel value="#{item.produto.id}" />
</p:column>
<p:column>
<f:facet name="header">Itens</f:facet>
<h:outputLabel value="#{item.produto.nome}" />
</p:column>
<p:column>
<f:facet name="header">Em estoque</f:facet>
<h:outputLabel value="#{item.produto.emEstoque}" />
</p:column>
<p:column>
<f:facet name="header">Valor</f:facet>
<h:outputLabel value="#{item.produto.valor}" />
</p:column>
<p:column>
<f:facet name="header">Quantidade</f:facet>
<h:inputText id="quantidade" value="#{vendaBean.item.quantidade}"/>
<p:commandButton value="Calcular" action="#{vendaBean.alteraItem(item)}" update="FormProdutos:tabelaProdutosAdicionados" process="FormProdutos:tabelaProdutosAdicionados"/>
</p:column>
<p:column>
<f:facet name="header">Total</f:facet>
<h:outputText id="totalPorProduto"
value="#{vendaBean.item.valorTotal}" />
</p:column>
<p:column>
<p:commandButton value="Remover"
action="#{vendaBean.removeItem(item)}"
process="FormProdutos:tabelaProdutosAdicionados"
update="FormProdutos:tabelaProdutosAdicionados" />
</p:column>
</p:dataTable>
</p:fieldset>
</h:form>
<h:form>
<p:fieldset legend="Informações da Venda">
<h:panelGrid columns="2">
<p:outputLabel value="Valor Total" />
<p:outputLabel value="#{vendaBean.venda.valor}" />
<p:outputLabel value="Data da Venda: " />
<p:outputLabel value="#{vendaBean.venda.data.time}" id="dataVenda">
<f:convertDateTime pattern="dd/MM/yyyy HH:mm"
timeZone="America/Sao_Paulo" />
</p:outputLabel>
</h:panelGrid>
</p:fieldset>
<p:commandButton value="Finalizar" action="#{vendaBean.gravarVenda}" />
</h:form>
</ui:define>
</ui:composition>
</html>