1
I have a screen and I would like to each product added, I could choose a quantity and then calculate that quantity multiplying by the value of the product. However, I have no idea how to do this, because whenever I add a new product the quantity is modified. Below is the code:
The bean:
@ManagedBean
@ViewScoped
public class VendaBean {
private Venda venda = new Venda();
private Produto produto = new Produto();
private Integer codBuscaProduto;
private Integer quantidade = 0;
private BigDecimal valorTotalProduto = new BigDecimal(0);
public void gravarVenda() {
VendaDAO vDAO = new VendaDAO();
vDAO.gravarVenda(this.venda);
this.venda = new Venda();
}
public void carregaAdiciona() {
ProdutoDAO pDAO = new ProdutoDAO();
this.produto = pDAO.buscarPodutoPorCodigo(codBuscaProduto);
if (produto == null) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Produto não encontrado"));
} else {
if (this.venda.getListaDeProdutos().contains(this.produto)) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Este item já está na lista"));
} else {
if (this.produto.getEmEstoque() == 0) {
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage("Não há quantia suficiente de produtos em estoque"));
} else {
this.venda.adicionaProduto(produto);
}
}
}
this.produto = new Produto();
this.valorTotalProduto = new BigDecimal(0);
}
public void removeProduto(Produto item) {
this.venda.removeProduto(item);
}
public void calculaTotalProduto(Produto produto) {
this.valorTotalProduto = produto.getValor();
this.valorTotalProduto = produto.getValor().multiply(BigDecimal.valueOf(quantidade.longValue()));
this.venda.setValor(this.venda.getValor().add(valorTotalProduto));
System.out.println(" Valor total: " + valorTotalProduto + " Quantidade " + this.quantidade
+ " Valor do Produto " + this.produto.getValor() + "Valor total da venda: " + this.venda.getValor());
}
THE 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 />
<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="@all"
process="@all" />
<p:commandLink value="Verificar Estoque" />
</h:panelGrid>
<h:panelGrid columns="4">
</h:panelGrid>
<h:panelGrid columns="2">
<p:commandButton value="Adicionar"
action="#{vendaBean.adicionaProduto}" update="@all" process="@all" />
</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.id}" />
</p:column>
<p:column>
<f:facet name="header">Itens</f:facet>
<h:outputLabel value="#{item.nome}" />
</p:column>
<p:column>
<f:facet name="header">Em estoque</f:facet>
<h:outputLabel value="#{item.emEstoque}" />
</p:column>
<p:column>
<f:facet name="header">Valor</f:facet>
<h:outputLabel value="#{item.valor}" />
</p:column>
<p:column>
<f:facet name="header">Quantidade</f:facet>
<p:spinner id="quantidade" value="#{vendaBean.quantidade}" min="0"
max="100" />
<p:commandButton value="Calcular"
process="@all"
update="@all"
actionListener="#{vendaBean.calculaTotalProduto(item)}" />
</p:column>
<p:column>
<f:facet name="header">Total</f:facet>
<h:outputText value="#{vendaBean.valorTotalProduto}" />
</p:column>
<p:column>
<p:commandButton value="Remover"
action="#{vendaBean.removeProduto(item)}"
process="tabelaProdutosAdicionados"
update="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>
And the mapping:
@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<Produto> listaDeProdutos = new ArrayList<Produto>();
Vc adds by saleBean.loadAdd or saleBean.addressProduct?
– Marcus Martins