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?