Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Lógica de programação de compra esta correto?

Queria saber se a lógica de programação de uma venda está correta. Tenho o meu xhtml Venda.

<?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="/template/_template.xhtml">
    <ui:define name="conteudo">
        <h:form>
            <h:panelGrid>
                <f:facet name="header">Cadastro de Venda</f:facet>
                <p:dataTable var="produto" value="#{vendaBean.lstProdutos}"
                    emptyMessage="Nenhum produto encontrado" rows="5" paginator="true">
                    <p:column headerText="Medida">
                        <h:outputText value="#{produto.medida}" />
                    </p:column>

                    <p:column headerText="Preço">
                        <h:outputText value="#{produto.preco}" />
                    </p:column>

                    <p:column headerText="Quantidade">
                        <h:outputText value="#{produto.quantidade}" />
                    </p:column>

                    <p:column headerText="Resolagem">
                        <h:outputText value="#{produto.quantidadeResolagem}" />
                    </p:column>

                    <p:column headerText="Situação">
                        <h:outputText value="#{produto.situacao}" />
                    </p:column>

                    <p:column headerText="Observação">
                        <h:outputText value="#{produto.observacao}" />
                    </p:column>

                    <p:column headerText="Marca">
                        <h:outputText value="#{produto.marca.marca}" />
                    </p:column>

                    <p:column headerText="Opção">
                        <p:commandButton value="Adicionar"
                            actionListener="#{vendaBean.adicionar(produto)}"
                            icon="fa fa-plus" title="Adicionar Produto"
                            update=":formularioItens" />
                    </p:column>

                </p:dataTable>
            </h:panelGrid>
        </h:form>
        <p:toolbar />
        <h:form id="formularioItens">
            <p:dataTable var="item" value="#{vendaBean.itens}"
                emptyMessage="Nenhum item encontrado" rows="3" paginator="true">

                <p:column headerText="Produto">
                    <h:outputText value="#{item.produto.medida}" />
                </p:column>

                <p:column headerText="Marca">
                    <h:outputText value="#{item.produto.marca.marca}" />
                </p:column>

                <p:column headerText="Quantidade">
                    <h:outputText value="#{item.quantidade}" />
                </p:column>

                <p:column headerText="Valor Parcial">
                    <h:outputText value="#{item.valorTotal}" />
                </p:column>

                <p:column headerText="Remover">
                    <p:commandButton value="Remover" title="Remover Produto"
                        icon="fa fa-fw fa-remove" />
                </p:column>

            </p:dataTable>

            <p:outputLabel value="Valor Total: " for="valor" />
            <p:inputText id="valor" readonly="true"
                value="#{vendaBean.venda.valor}" />
        </h:form>
    </ui:define>
</ui:composition>
</html>

Depois tenho a meu bean venda.

@ManagedBean
@ViewScoped
public class VendaBean implements Serializable {

    private static final long serialVersionUID = 1L;

    private Venda venda = new Venda();
    private Cliente cliente = new Cliente();
    private Acessorio acessorio = new Acessorio();
    private List<Item> itens = new ArrayList<Item>();
    private List<Produto> produtos = new ProdutoDao().lista();

    public void adicionar(Produto produto) {
        int numeroEncontrado = -1;
        for(int posicao = 0; posicao < itens.size() && numeroEncontrado < 0; posicao ++) {
            Item temporario = itens.get(posicao);
            if(temporario.getProduto().getCodigo().equals(produto.getCodigo())) {
                numeroEncontrado = posicao;
            }
        }
        Item item = new Item();
        item.setProduto(produto);
        if(numeroEncontrado < 0) {
            item.setQuantidade(1);
            item.setValorTotal(produto.getPreco());
            itens.add(item);
        } else {
            Item temporario = itens.get(numeroEncontrado);
            item.setQuantidade(temporario.getQuantidade() +1);
            item.setValorTotal(produto.getPreco().multiply(new BigDecimal(item.getQuantidade())));
            itens.set(numeroEncontrado, item);
        }
        venda.setValor(venda.getValor().add(produto.getPreco()));
    }
// Restante dos metodos.

Assim esta correto?

4 respostas

Tem muito código aí, Alisson. Você chegou a testar? Funcionou? Coisas que eu vi... Apesar que a lógica é sua, então é complicado opinar.

  • podia ter um break no if, já que vc já achou o produto
  • acho que o valorTotal do item deveria ser sempre calculado... não deveria ter um setter para ele.
  • mesma coisa vale para o setValor da venda.. deveria ser calculado em função dos itens, em vez de ter um setter.

Fala Alberto então eu acho que o break sai um pouco da logica de programação, sim esta funcionando. Bacana Alberto obrigado pelas dicas, Alberto sera que teria uma tela de venda pra mim olhar e seguir? Obrigado desde já

solução!

Oi Alisson, não tenho nenhum exemplo.. Da uma olhada nos sites de ecommerce famosos...

Valeu mano obrigado!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software