Error while trying to list employees on the project sale screen

Asked

Viewed 31 times

0

I have following error when accessing the sales checkout screen, does not show the registered employees, however customers show.

Screenshot:

inserir a descrição da imagem aqui

View:

<?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">
<ui:composition 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"
    template="/templates/template.xhtml">

    <ui:define name="conteudo">

        <h:form id="formulario">

            <p:panel header="Produtos">

                <p:dataTable id="tabelaProduto"
                    emptyMessage="Nenhum registro encontrado." paginator="true"
                    value="#{vendaController.produtos}" var="produto" rows="5"
                    paginatorPosition="bottom">



                    <p:column headerText="Descrição" filterBy="#{produto.descricao}"
                        sortBy="#{produto.descricao}">

                        <h:outputText value="#{produto.descricao}" />

                    </p:column>



                    <p:column headerText="Quantidade" sortBy="#{produto.quantidade}">

                        <h:outputText value="#{produto.quantidade}" />

                    </p:column>



                    <p:column headerText="Preço" sortBy="#{produto.preco}">

                        <h:outputText value="#{produto.preco}">

                            <f:convertNumber locale="pt_BR" minFractionDigits="2" />

                        </h:outputText>

                    </p:column>



                    <p:column headerText="Fabricante"
                        filterBy="#{produto.fabricante.descricao}"
                        sortBy="#{produto.fabricante.descricao}">

                        <h:outputText value="#{produto.fabricante.descricao}" />

                    </p:column>



                    <p:column headerText="Opções">

                        <p:commandButton icon="ui-icon-plus"
                            actionListener="#{vendaController.adicionar}"
                            update=":formulario:tabelaCesta :formulario:painelFinalizacao">

                            <f:attribute name="produtoSelecionado" value="#{produto}" />

                        </p:commandButton>

                    </p:column>

                </p:dataTable>

            </p:panel>



            <p:panel header="Cesta de Compras">

                <p:dataTable id="tabelaCesta"
                    emptyMessage="Nenhum registro encontrado." paginator="true"
                    value="#{vendaController.itensVenda}" var="itemVenda" rows="5"
                    paginatorPosition="bottom">



                    <p:column headerText="Descrição">

                        <h:outputText value="#{itemVenda.produto.descricao}" />

                    </p:column>



                    <p:column headerText="Preço Un.">

                        <h:outputText value="#{itemVenda.produto.preco}">

                            <f:convertNumber locale="pt_BR" minFractionDigits="2" />

                        </h:outputText>

                    </p:column>



                    <p:column headerText="Qtde.">

                        <h:outputText value="#{itemVenda.quantidade}" />

                    </p:column>



                    <p:column headerText="Preço Parcial">

                        <h:outputText value="#{itemVenda.precoParcial}">

                            <f:convertNumber locale="pt_BR" minFractionDigits="2" />

                        </h:outputText>

                    </p:column>

                    <p:column headerText="Opções">

                        <p:commandButton icon="ui-icon-minus"
                            actionListener="#{vendaController.remover}"
                            update=":formulario:tabelaCesta :formulario:painelFinalizacao">

                            <f:attribute name="itemSelecionado" value="#{itemVenda}" />

                        </p:commandButton>

                    </p:column>

                </p:dataTable>

            </p:panel>

            <p:panel header="Finalização">

                <h:panelGrid id="painelFinalizacao" columns="3">

                    <p:outputLabel value="Total: R$" />

                    <h:outputText value="#{vendaController.venda.precoTotal}">

                        <f:convertNumber locale="pt_BR" minFractionDigits="2" />

                    </h:outputText>

                    <p:commandButton value="Finalizar"
                        actionListener="#{vendaController.finalizar}"
                        update=":mensagem :formularioFinalizar:painelFinalizar"
                        oncomplete="PF('dialogo').show();">

                        <f:actionListener
                            type="org.omnifaces.eventlistener.ResetInputAjaxActionListener" />

                    </p:commandButton>

                </h:panelGrid>

            </p:panel>

        </h:form>

        <p:dialog header="Finalizar Venda" widgetVar="dialogo"
            draggable="false" resizable="false" modal="true" closable="false">

            <h:form id="formularioFinalizar">

                <h:panelGrid id="painelFinalizar" columns="2">
                    <p:outputLabel value="Horário: " />
                    <h:outputText value="#{vendaController.venda.horario}">
                        <f:convertDateTime pattern="dd/MM/yyyy HH:mm" locale="pt_BR"
                            timeZone="America/Sao_Paulo" />
                    </h:outputText>

                    <p:outputLabel value="Total: R$" />
                    <h:outputText value="#{vendaController.venda.precoTotal}">
                        <f:convertNumber locale="pt_BR" minFractionDigits="2" />
                    </h:outputText>

                    <p:outputLabel for="funcionario" value="Funcionário:" />
                    <p:selectOneMenu id="funcionario"
                        value="#{vendaController.venda.funcionario}"
                        converter="omnifaces.SelectItemsConverter" filter="true"
                        filterMatchMode="contains" required="true"
                        requiredMessage="O campo FUNCIONÁRIO é obrigatório">
                        <f:selectItem noSelectionOption="true"
                            itemLabel="Selecione um funcionário" />
                        <f:selectItems value="#{vendaController.funcionarios}"
                            var="funcionario" itemValue="#{funcionario}"
                            itemLabel="#{funcionario.pessoa.nome} - #{funcionario.pessoa.cpf}" />
                    </p:selectOneMenu>

                    <p:outputLabel for="cliente" value="Cliente:" />
                    <p:selectOneMenu id="cliente"
                        value="#{vendaController.venda.cliente}"
                        converter="omnifaces.SelectItemsConverter" filter="true"
                        filterMatchMode="contains" required="true"
                        requiredMessage="O campo CLIENTE é obrigatórios">
                        <f:selectItem noSelectionOption="true"
                            itemLabel="Selecione um cliente" />
                        <f:selectItems value="#{vendaController.clientes}" var="cliente"
                            itemValue="#{cliente}"
                            itemLabel="#{cliente.pessoa.nome} - #{cliente.pessoa.cpf}" />
                    </p:selectOneMenu>

                </h:panelGrid>

                <h:panelGrid columns="2">
                    <p:commandButton value="Salvar"
                        actionListener="#{vendaController.salvar}"
                        update=":mensagem :formulario:tabelaProduto :formulario:tabelaCesta :formulario:painelFinalizacao"
                        oncomplete="PF('dialogo').hide();" />
                    <p:commandButton value="Fechar" oncomplete="PF('dialogo').hide();" />
                </h:panelGrid>

            </h:form>

        </p:dialog>
    </ui:define>
</ui:composition>

Controller:

public class VendaController implements Serializable {
    private Venda venda;

    private List<Produto> produtos;
    private List<ItemVenda> itensVenda;
    private List<Cliente> clientes;
    private List<Funcionario> funcionarios;

    public Venda getVenda() {
        return venda;
    }

    public void setVenda(Venda venda) {
        this.venda = venda;
    }

    public List<Produto> getProdutos() {
        return produtos;
    }

    public void setProdutos(List<Produto> produtos) {
        this.produtos = produtos;
    }

    public List<ItemVenda> getItensVenda() {
        return itensVenda;
    }

    public void setItensVenda(List<ItemVenda> itensVenda) {
        this.itensVenda = itensVenda;
    }

    public List<Cliente> getClientes() {
        return clientes;
    }

    public void setClientes(List<Cliente> clientes) {
        this.clientes = clientes;
    }

    public List<Funcionario> getFuncionarios() {
        return funcionarios;
    }

    public void setFuncionarios(List<Funcionario> funcionarios) {
        this.funcionarios = funcionarios;
    }

    @PostConstruct
    public void novo() {
        try {

            venda = new Venda();

            venda.setPrecoTotal(new BigDecimal("0.00"));

            ProdutoDAO produtoDAO = new ProdutoDAO();

            produtos = produtoDAO.listar("descricao");

            itensVenda = new ArrayList<>();

        } catch (RuntimeException erro) {

            Messages.addGlobalError("Ocorreu um erro ao tentar carregar a tela de vendas");

            erro.printStackTrace();
        }
    }

    public void adicionar(ActionEvent evento) {

        Produto produto = (Produto) evento.getComponent().getAttributes().get("produtoSelecionado");

        int achou = -1;

        for (int posicao = 0; posicao < itensVenda.size(); posicao++) {

            if (itensVenda.get(posicao).getProduto().equals(produto)) {

                achou = posicao;
            }
        }
        if (achou < 0) {

            ItemVenda itemVenda = new ItemVenda();

            itemVenda.setPrecoParcial(produto.getPreco());

            itemVenda.setProduto(produto);

            itemVenda.setQuantidade(new Short("1"));

            itensVenda.add(itemVenda);

        } else {

            ItemVenda itemVenda = itensVenda.get(achou);

            itemVenda.setQuantidade(new Short(itemVenda.getQuantidade() + 1 + ""));

            itemVenda.setPrecoParcial(produto.getPreco().multiply(new BigDecimal(itemVenda.getQuantidade())));
        }

        calcular();

    }

    public void remover(ActionEvent evento) {

        ItemVenda itemVenda = (ItemVenda) evento.getComponent().getAttributes().get("itemSelecionado");

        int achou = -1;

        for (int posicao = 0; posicao < itensVenda.size(); posicao++) {

            if (itensVenda.get(posicao).getProduto().equals(itemVenda.getProduto())) {

                achou = posicao;
            }
        }
        if (achou > -1) {

            itensVenda.remove(achou);
        }

        calcular();
    }

    public void calcular() {

        venda.setPrecoTotal(new BigDecimal("0.00"));

        for (int posicao = 0; posicao < itensVenda.size(); posicao++) {

            ItemVenda itemVenda = itensVenda.get(posicao);

            venda.setPrecoTotal(venda.getPrecoTotal().add(itemVenda.getPrecoParcial()));
        }
    }

    public void finalizar() {
        try {

            venda.setHorario(new Date());

            venda.setCliente(null);

            venda.setFuncionario(null);

            FuncionarioDAO funcionarioDAO = new FuncionarioDAO();

            funcionarios = funcionarioDAO.listarOrdenado();

            ClienteDAO clienteDAO = new ClienteDAO();

            clientes = clienteDAO.listarOrdenado();

        } catch (RuntimeException erro) {

            Messages.addGlobalError("Ocorreu um erro ao tentar finalizar a venda");

            erro.printStackTrace();
        }
    }

    public void salvar() {
        try {

            if (venda.getPrecoTotal().signum() == 0) {

                Messages.addGlobalError("Informe pelo menos um item para a venda");

                return;
            }
            VendaDAO vendaDAO = new VendaDAO();

            vendaDAO.salvar(venda, itensVenda);

            venda = new Venda();

            venda.setPrecoTotal(new BigDecimal("0.00"));

            ProdutoDAO produtoDAO = new ProdutoDAO();

            produtos = produtoDAO.listar("descricao");

            itensVenda = new ArrayList<>();

            Messages.addGlobalInfo("Venda realizada com sucesso");

        } catch (RuntimeException erro) {

            Messages.addGlobalError("Ocorreu um erro ao tentar salvar a venda");

            erro.printStackTrace();
        }
    }
}

Model:

public class Venda extends Codigo {

    @Column(nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
    private Date horario;

    @Column(nullable = false, precision = 7, scale = 2)
    private BigDecimal precoTotal;

    @ManyToOne
    private Cliente cliente;

    @ManyToOne
    @JoinColumn(nullable = false)
    private Funcionario funcionario;

    public Date getHorario() {
        return horario;
    }

    public void setHorario(Date horario) {
        this.horario = horario;
    }

    public BigDecimal getPrecoTotal() {
        return precoTotal;
    }

    public void setPrecoTotal(BigDecimal precoTotal) {
        this.precoTotal = precoTotal;
    }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public Funcionario getFuncionario() {
        return funcionario;
    }

    public void setFuncionario(Funcionario funcionario) {
        this.funcionario = funcionario;
    }
}

1 answer

0

What’s going on is that you didn’t list employees. Look at your products are being listed, right? Because you listed them in your method new()

produtos = produtoDAO.listar("descricao");

When you call employees in your page selectItems

 <f:selectItems value="#{vendaController.funcionarios}"
     var="funcionario" itemValue="#{funcionario}"
     itemLabel="#{funcionario.pessoa.nome} - #{funcionario.pessoa.cpf}" />

It’s coming empty because it hasn’t been declared what employees would have to show, I don’t know how this your repository, but I believe you want to show all employees, so you would have to do something like this:

funcionarios = funcionarioDAO.listar();
  • no controller has no public void finalize, is everything, is when finalizes the purchase that only appears the customer and the list of registered employees are not, and at the end, is the employees = functionDAO.listOrdered(); same as the customer, and when I finalize purchase, the employee is the only one who does not show the customer shows, even if I look at the database and making a query shows that the registered employee.

Browser other questions tagged

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