jluizmg
#1
Bom dia a todos! Estou desenvolvendo um sistema de controle de estoque em java web
usando primefaces, jsf hibernate e banco de dados postgreSQL.
Tenho uma datable e que mostra todos os produtos do estoque e gostaria de fazer uma determinada linha ficar vermelha se caso a quantidade do produto fique a baixo de 10.
xhtml
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<ui:composition template="/_template.xhtml">
<ui:define name="corpo">
<h:form id="cadastro">
<p:messages />
<p:tabView value="Editar produto"
rendered="#{not empty
produtoBean.produto.id}">
<p:tab title="Editar produto">
<p:fieldset legend="Dados do produto">
<h:outputLabel value="Nome/Descrição:" for="nome" />
<p:inputMask value="#{produtoBean.produto.nome}" style="width:20%"
placeholder="EX: Nome / Tipo / Cor / Marca">
<f:validator validatorId="comecaComMaiuscula" />
</p:inputMask>
<h:outputLabel value="Custo/Unid:" for="custo" />
<p:inputText id="custo" value="#{produtoBean.produto.custo}"
placeholder="EX: 11.15" required="true"
requiredMessage="Preço de custo é obrigatório EX: 0.05."
validatorMessage="0 valor mínimo do preço de custo é 0.">
<f:validateDoubleRange minimum="0" />
</p:inputText>
<h:outputLabel value="ICMS:" for="icms" />
<p:inputText id="icms" value="#{produtoBean.produto.icms}"
placeholder="EX: 11.15" required="true"
requiredMessage="ICMS é obrigatório EX: 0.05."
validatorMessage="0 valor mínimo do ICMS de custo é 0.">
<f:validateDoubleRange minimum="0" />
</p:inputText>
<h:outputLabel value="Perc.de Aumento:" for="percentualAumento" />
<p:inputText id="percentualAumento"
value="#{produtoBean.produto.percentualAumento}"
placeholder="EX: 0" required="true"
requiredMessage="Percentual de aumento é obrigatório EX: 0."
validatorMessage="0 valor mínimo do Percentual de aumento é 0.">
<f:validateDoubleRange minimum="0" />
</p:inputText>
<h:outputLabel value="Frete:" for="frete" />
<p:inputText id="frete" value="#{produtoBean.produto.frete}"
placeholder="EX: 0" required="true"
requiredMessage="Frete é obrigatório EX: 0"
validatorMessage="0 valor mínimo do frete é 0.">
<f:validateDoubleRange minimum="0" />
</p:inputText>
<h:outputLabel value="Lote:" for="lote" />
<p:inputMask value="#{produtoBean.produto.lote}"
placeholder="EX: VL12J" />
<h:outputLabel value="Quantidade:" for="quantidade" />
<p:inputText value="#{produtoBean.produto.quantidade}"
placeholder="EX: 12" required="true"
requiredMessage="Quantidade obrigatória."
validatorMessage="A quantidade deve ser maior que 0.">
<f:validateDoubleRange minimum="1" />
</p:inputText>
<h:outputLabel value="Unid.Medida" for="selecaoUbidadeMedida" />
<p:selectOneMenu id="selecaoUbidadeMedida"
value="#{produtoBean.produto.selecaoUbidadeMedida}">
<f:selectItem itemLabel="Unidade(s)" itemValue="unidade(s)">
</f:selectItem>
<f:selectItem itemLabel="Kg(s)" itemValue="kg(s)">
</f:selectItem>
<f:selectItem itemLabel="Metro(s)" itemValue="metro(s)">
</f:selectItem>
<f:selectItem itemLabel="Caixa(s)" itemValue="caixa(s)">
</f:selectItem>
<f:selectItem itemLabel="Par(es)" itemValue="par(es)">
</f:selectItem>
</p:selectOneMenu>
<br></br>
<h:outputLabel value="Data da compra:" for="dataCompra" />
<p:calendar value="#{produtoBean.produto.dataCompra.time}"
pattern="dd/MM/yyyy" />
<h:outputLabel value="Localizaçao:" for="localizacao" />
<p:inputMask value="#{produtoBean.produto.localizacao}"
placeholder="EX: R1P2A3AP2" />
<table border="0">
<tr>
<td><h:commandButton value="Gravar"
rendered="#{not empty produtoBean.produto.id}"
action="#{produtoBean.grava}">
<f:ajax execute="@form" render=":lista :cadastro" />
</h:commandButton></td>
<td><h:commandButton value="Cancelar"
rendered="#{not empty produtoBean.produto.id}"
action="#{produtoBean.cancela}"></h:commandButton></td>
</tr>
</table>
</p:fieldset>
</p:tab>
</p:tabView>
</h:form>
<table border="0">
<tr>
<td><p:commandButton value="Imprimir" type="button"
style="display:block:margin-bottom: 20px ">
<p:printer target="lista" />
</p:commandButton></td>
</tr>
</table>
<h:form id="lista">
<p:dataTable
value="#{listaItemProdutoFornecedorBean.itemProdutoFornecedores}"
var="itemProdutoFornecedores" paginator="true" rows="30"
sortBy="#{itemProdutoFornecedores.produto.nome}"
emptyMessage="Não foi encontrado os dados do produto."
style="width:100%">
<f:facet name="header">Lista de produtos</f:facet>
<p:column>
<f:facet name="header">Data da compra</f:facet>
<h:outputText
value="#{itemProdutoFornecedores.produto.dataCompra.time}">
<f:convertDateTime type="date" dateStyle="short"
pattern="dd/MM/yyyy"></f:convertDateTime>
</h:outputText>
</p:column>
<p:column headerText="Produto"
filterBy="#{itemProdutoFornecedores.produto.nome}">
<f:facet name="header">Produto</f:facet>
#{itemProdutoFornecedores.produto.nome}
</p:column>
<p:column headerText="Fornecedor">
<f:facet name="header">Fornecedor</f:facet>
#{itemProdutoFornecedores.fornecedor.nome}
</p:column>
<p:column headerText="Lote">
<f:facet name="header">Lote</f:facet>
#{itemProdutoFornecedores.produto.lote}
</p:column>
<p:column>
<f:facet name="header">ICMS</f:facet>
<h:outputText value="#{itemProdutoFornecedores.produto.icms}">
<f:convertNumber pattern="R$ #0.00"></f:convertNumber>
</h:outputText>
</p:column>
<p:column>
<f:facet name="header">Frete</f:facet>
<h:outputText value="#{itemProdutoFornecedores.produto.frete}">
<f:convertNumber pattern="R$ #0.00"></f:convertNumber>
</h:outputText>
</p:column>
<p:column>
<f:facet name="header">Quantid.</f:facet>
#{itemProdutoFornecedores.produto.quantidade} #{itemProdutoFornecedores.produto.selecaoUbidadeMedida}
</p:column>
<p:column>
<f:facet name="header">Custo Unid.</f:facet>
<h:outputText value="#{itemProdutoFornecedores.produto.custo}">
<f:convertNumber pattern="R$ #0.00"></f:convertNumber>
</h:outputText>
</p:column>
<p:column>
<f:facet name="header">Venda Unid.</f:facet>
<h:outputText
value="#{itemProdutoFornecedores.produto.precoAtualizado}">
<f:convertNumber pattern="R$ #0.00"></f:convertNumber>
</h:outputText>
</p:column>
<p:column>
<f:facet name="header">Custo estoque</f:facet>
<h:outputText
value="#{itemProdutoFornecedores.produto.custoTotal}">
<f:convertNumber pattern="R$ #0.00"></f:convertNumber>
</h:outputText>
</p:column>
<p:column>
<f:facet name="header">Venda estoque</f:facet>
<h:outputText
value="#{itemProdutoFornecedores.produto.precoAtualizadoProdutosTotalEstoque}">
<f:convertNumber pattern="R$ #0.00"></f:convertNumber>
</h:outputText>
</p:column>
<p:column>
<f:facet name="header">Lucro Unid.</f:facet>
<h:outputText
value="#{itemProdutoFornecedores.produto.lucroUnidade}">
<f:convertNumber pattern="R$ #0.00"></f:convertNumber>
</h:outputText>
</p:column>
<p:column>
<f:facet name="header">Lucro estoque</f:facet>
<h:outputText
value="#{itemProdutoFornecedores.produto.lucroRotativo}">
<f:convertNumber pattern="R$ #0.00"></f:convertNumber>
</h:outputText>
</p:column>
<p:column>
<f:facet name="header">Lucro total</f:facet>
<h:outputText
value="#{itemProdutoFornecedores.produto.lucroTotal}">
<f:convertNumber pattern="R$ #0.00"></f:convertNumber>
</h:outputText>
</p:column>
<p:column>
<f:facet name="header">Local</f:facet>
#{itemProdutoFornecedores.produto.localizacao}
</p:column>
<p:column style="width:16%" visible="false">
<f:facet name="header">Ações</f:facet>
<h:commandLink value="Alterar" styleClass="btn">
<f:setPropertyActionListener
value="#{itemProdutoFornecedores.produto}"
target="#{produtoBean.produto}" />
</h:commandLink>
<h:commandLink
action="#{listaItemProdutoFornecedorBean.remove(itemProdutoFornecedores.produto)}"
value="Remover" styleClass="btn btn-danger">
<f:ajax render="@form"></f:ajax>
</h:commandLink>
</p:column>
<p:column style="width:20%">
<f:facet name="header">Ações</f:facet>
<h:commandLink value="Alterar" styleClass="btn">
<f:setPropertyActionListener
value="#{itemProdutoFornecedores.produto}"
target="#{produtoBean.produto}" />
</h:commandLink>
<p:commandLink value="Remover"
action="#{listaItemProdutoFornecedorBean.remove(itemProdutoFornecedores.produto)}"
update=":lista" styleClass="btn btn-danger">
<p:confirm header="Alerta"
message="A exclusão somente ocorrerá, se não tiver uma baixa associada ao produto." />
</p:commandLink>
<p:confirmDialog global="true" showEffect="fade" hideEffect="fade">
<p:commandButton value="Confirmar exclusão" type="button"
action="#{listaItemProdutoFornecedorBean.remove(itemProdutoFornecedores.produto)}"
styleClass="ui-confirmdialog-yes" />
<p:commandButton value="Cancelar" type="button"
styleClass="ui-confirmdialog-no" />
</p:confirmDialog>
</p:column>
</p:dataTable>
</h:form>
<br></br>
</ui:define>
</ui:composition>
</html>
java modelo
package com.controleestoque.modelo;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.hibernate.annotations.Cascade;
import org.hibernate.validator.constraints.NotEmpty;
@Entity
public class Produto implements Serializable {
@Id
@SequenceGenerator(name = "produto_id", sequenceName = "produto_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "produto_id")
private Long id;
@NotEmpty(message = "Produto deve ter um nome válido.")
private String nome;
private Double custo;
private Double custoTotal;
private Double frete;
private Double percentualAumento;
@NotEmpty(message = "Produto deve ter um lote válido.")
private String lote;
private Double quantidade;
private String selecaoUbidadeMedida;
@NotEmpty(message = "Produto deve ter uma localização válida.")
private String localizacao;
@Temporal(TemporalType.DATE)
private Calendar dataCompra = Calendar.getInstance();
private Double precoAtualizado;
private Double precoAtualizadoProdutosTotalEstoque;
private Double icms;
private Double quantidadeMomentoCadastro;
private Double custoMomentoCadastro;
private Double lucroUnidade;
private Double lucroRotativo;
private Double lucroTotal;
@OneToMany(cascade = CascadeType.PERSIST, mappedBy = "produto")
// @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
private List<Item> itens = new ArrayList<>();
@OneToMany(cascade = CascadeType.PERSIST, mappedBy = "produto")
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
private List<ItemProdutoFornecedor> itemProdutoFornecedores = new ArrayList<>();
public Double getQuantidade() {
if (quantidadeMomentoCadastro == null) {
quantidadeMomentoCadastro = quantidade;
return quantidadeMomentoCadastro;
}
return quantidade;
}
public void setQuantidade(Double quantidade) {
this.quantidade = quantidade;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getLocalizacao() {
return localizacao;
}
public void setLocalizacao(String localizacao) {
this.localizacao = localizacao;
}
public String getLote() {
return lote;
}
public void setLote(String lote) {
this.lote = lote;
}
public List<Item> getItens() {
return itens;
}
public void setItens(List<Item> itens) {
this.itens = itens;
}
public Calendar getDataCompra() {
return dataCompra;
}
public void setDataCompra(Calendar dataCompra) {
this.dataCompra = dataCompra;
}
public List<ItemProdutoFornecedor> getItemProdutoFornecedores() {
return itemProdutoFornecedores;
}
public void setItemProdutoFornecedores(List<ItemProdutoFornecedor> itemProdutoFornecedores) {
this.itemProdutoFornecedores = itemProdutoFornecedores;
}
public Double getCusto() {
if (custoMomentoCadastro == null) {
custoMomentoCadastro = custo;
return custoMomentoCadastro;
}
return custo;
}
public void setCusto(Double custo) {
this.custo = custo;
}
public Double getCustoTotal() {
Double produtoQuantidade = (double) quantidade;
custoTotal = custo * produtoQuantidade;
return custoTotal;
}
public void setCustoTotal(Double custoTotal) {
this.custoTotal = custoTotal;
}
public Double getFrete() {
return frete;
}
public void setFrete(Double frete) {
this.frete = frete;
}
public Double getPercentualAumento() {
return percentualAumento;
}
public void setPercentualAumento(Double percentualAumento) {
this.percentualAumento = percentualAumento;
}
public Double getPrecoAtualizado() {
Double produtoQuantidade = (double) quantidadeMomentoCadastro;
Double calculoIcmsFrete = (icms + frete) / produtoQuantidade;
Double rp = percentualAumento / 100;
Double rcp = custo * rp;
Double resultado = custo + rcp;
if (produtoQuantidade > 0) {
precoAtualizado = resultado + calculoIcmsFrete;
} else {
precoAtualizado = resultado;
}
return precoAtualizado;
}
public void setPrecoAtualizado(Double precoAtualizado) {
this.precoAtualizado = precoAtualizado;
}
public String getSelecaoUbidadeMedida() {
return selecaoUbidadeMedida;
}
public void setSelecaoUbidadeMedida(String selecaoUbidadeMedida) {
this.selecaoUbidadeMedida = selecaoUbidadeMedida;
}
public Double getPrecoAtualizadoProdutosTotalEstoque() {
// logica para calcular produtos no estoque
Double produtoQuantidade = (double) quantidade;
precoAtualizadoProdutosTotalEstoque = precoAtualizado * produtoQuantidade;
return precoAtualizadoProdutosTotalEstoque;
}
public void setPrecoAtualizadoProdutosTotalEstoque(Double precoAtualizadoProdutosTotalEstoque) {
this.precoAtualizadoProdutosTotalEstoque = precoAtualizadoProdutosTotalEstoque;
}
public Double getIcms() {
return icms;
}
public void setIcms(Double icms) {
this.icms = icms;
}
public Double getQuantidadeMomentoCadastro() {
return quantidadeMomentoCadastro;
}
public void setQuantidadeMomentoCadastro(Double quantidadeMomentoCadastro) {
this.quantidadeMomentoCadastro = quantidadeMomentoCadastro;
}
public Double getCustoMomentoCadastro() {
return custoMomentoCadastro;
}
public void setCustoMomentoCadastro(Double custoMomentoCadastro) {
this.custoMomentoCadastro = custoMomentoCadastro;
}
public Double getLucroUnidade() {
lucroUnidade = (precoAtualizado - custo) - ((icms + frete) / quantidadeMomentoCadastro);
return lucroUnidade;
}
public void setLucroUnidade(Double lucroUnidade) {
this.lucroUnidade = lucroUnidade;
}
public Double getLucroRotativo() {
lucroRotativo = lucroUnidade * quantidade;
return lucroRotativo;
}
public void setLucroRotativo(Double lucroRotativo) {
this.lucroRotativo = lucroRotativo;
}
public Double getLucroTotal() {
lucroTotal = lucroUnidade * quantidadeMomentoCadastro;
return lucroTotal;
}
public void setLucroTotal(Double lucroTotal) {
this.lucroTotal = lucroTotal;
}
}
java bean
package com.controleestoque.mb;
import java.io.Serializable;
import java.util.List;
import javax.faces.application.Application;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
import com.controleestoque.dao.DAO;
import com.controleestoque.modelo.Fornecedor;
import com.controleestoque.modelo.Funcionario;
import com.controleestoque.modelo.Item;
import com.controleestoque.modelo.ItemProdutoFornecedor;
import com.controleestoque.modelo.Produto;
@ViewScoped
@ManagedBean
public class ProdutoBean implements Serializable {
private Produto produto = new Produto();
private List<Produto> produtos;
private Item item = new Item();
private Long idFuncionario;
private ItemProdutoFornecedor itemProdutoFornecedor = new ItemProdutoFornecedor();
private Long idFornecedor;
public Produto getProduto() {
return this.produto;
}
public void setProduto(Produto produto) {
this.produto = produto;
}
// metodo para atualizar toda pagina
public void refresh() {
FacesContext context = FacesContext.getCurrentInstance();
Application application = context.getApplication();
javax.faces.application.ViewHandler viewHandler = application.getViewHandler();
UIViewRoot viewRoot = viewHandler.createView(context, context.getViewRoot().getViewId());
context.setViewRoot(viewRoot);
context.renderResponse();
}
public void grava() {
DAO<Produto> dao = new DAO<Produto>(Produto.class);
if (produto.getId() == null) {
dao.adiciona(produto);
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Produto foi cadastrado com sucesso!"));
} else {
dao.atualiza(produto);
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Produto foi atualizado com sucesso!"));
}
this.produto = new Produto();
this.produtos = dao.listaTodos();
}
public List<Produto> getProdutos() {
if (produtos == null) {
System.out.println("Carregando produtos...");
produtos = new DAO<Produto>(Produto.class).listaTodos();
}
return produtos;
}
public void remove(Produto produto) {
DAO<Produto> dao = new DAO<Produto>(Produto.class);
dao.remove(produto);
this.produtos = dao.listaTodos();
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Produto foi removido com sucesso!"));
refresh();
}
public void cancela() {
this.produto = new Produto();
}
public Double getTotal() {
Double soma = produto.getQuantidade();
if (produtos != null) {
for (Produto produto : produtos) {
soma += produto.getQuantidade();
}
}
return soma;
}
//guardar funcionario
public void guardaItem() {
DAO<Funcionario> dao = new DAO<Funcionario>(Funcionario.class);
Funcionario funcionario = dao.buscaPorld(idFuncionario);
item.setFuncionario(funcionario);
produto.getItens().add(item);
item.setProduto(produto);
item = new Item();
}
public void guardaItemFornecedor() {
DAO<Fornecedor> dao = new DAO<Fornecedor>(Fornecedor.class);
Fornecedor fornecedor = dao.buscaPorld(idFornecedor);
itemProdutoFornecedor.setFornecedor(fornecedor);
produto.getItemProdutoFornecedores().add(itemProdutoFornecedor);
itemProdutoFornecedor.setProduto(produto);
itemProdutoFornecedor = new ItemProdutoFornecedor();
grava();
}
public Long getIdFuncionario() {
return idFuncionario;
}
public void setIdFuncionario(Long idFuncionario) {
this.idFuncionario = idFuncionario;
}
public Item getItem() {
return item;
}
public void setItem(Item item) {
this.item = item;
}
public ItemProdutoFornecedor getItemProdutoFornecedor() {
return itemProdutoFornecedor;
}
public void setItemProdutoFornecedor(ItemProdutoFornecedor itemProdutoFornecedor) {
this.itemProdutoFornecedor = itemProdutoFornecedor;
}
public Long getIdFornecedor() {
return idFornecedor;
}
public void setIdFornecedor(Long idFornecedor) {
this.idFornecedor = idFornecedor;
}
public void setProdutos(List<Produto> produtos) {
this.produtos = produtos;
}
}
DAO
package com.controleestoque.dao;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaQuery;
public class DAO<T> {
private final Class<T> classe;
public DAO(Class<T> classe) {
this.classe = classe;
}
public void adiciona(T t) {
// consegue a entity manager
EntityManager em = new JPAUtil().getEntityManager();
// abre transacao
em.getTransaction().begin();
// persiste o objeto
em.persist(t);
// commita a transacao
em.getTransaction().commit();
// fecha a entity manager
em.close();
}
public void remove(T t) {
EntityManager em = new JPAUtil().getEntityManager();
em.getTransaction().begin();
em.remove(em.merge(t));
em.getTransaction().commit();
em.close();
}
public void atualiza(T t) {
EntityManager em = new JPAUtil().getEntityManager();
em.getTransaction().begin();
em.merge(t);
em.getTransaction().commit();
em.close();
}
public List<T> listaTodos() {
EntityManager em = new JPAUtil().getEntityManager();
CriteriaQuery<T> query = em.getCriteriaBuilder().createQuery(classe);
query.select(query.from(classe));
List<T> lista = em.createQuery(query).getResultList();
em.close();
return lista;
}
public T buscaPorld(Long id) {
EntityManager em = new JPAUtil().getEntityManager();
return (T) em.find(classe, id);
}
}
desde ja agradeço o retorno.
JPUTIL
package com.controleestoque.dao;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class JPAUtil {
private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("controleestoque");
public EntityManager getEntityManager() {
return emf.createEntityManager();
}
}