Problem with JSF

Asked

Viewed 94 times

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?

1 answer

1

Add an ajax event, where every time you add a product it calls the method to calculate the sale value.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.