Error while trying to list employees on the project sale screen

0

I have the following error accessing the sales completion screen, it does not show the registered employees, but the clients show.

Screenshot:

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;
    }
}
    
asked by anonymous 02.09.2018 / 07:14

1 answer

0

What is happening is that you did not list employees. Look at your products being listed, right? Why did you list them in your new method

produtos = produtoDAO.listar("descricao");

When you call functionaries in your page's selectItems

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

It's coming empty because it was not declared what employees would have to show, I do not know how this repository is, but I believe you want to show all employees, so you'd have to do something like this:

funcionarios = funcionarioDAO.listar();
    
05.09.2018 / 00:23