A pagina de cadastro compra :
<?xml version='1.0' encoding='UTF-8' ?>
<p:panel header="Informações sobre a compra">
<p:panelGrid columns="4" styleClass="mrig05" style="align-items: baseline">
<h:outputText value="Codigo da Compra"/>
<h:inputText value="#{compraControlador.selecionado.cod}"/>
<h:outputText value="Data da Compra"/>
<p:calendar value="#{compraControlador.selecionado.data}" pattern="dd-MM-yyyy" mask="true"/>
<h:outputText value="Descrição da compra"/>
<h:inputTextarea value="#{compraControlador.selecionado.descricao}"/>
</p:panelGrid>
</p:panel>
<p:fieldset id="availablProdutoField" legend="Produtos Disponiveis">
<p:dataTable id="availableProdutos" var="prod" value="#{compraControlador.produtos}">
<p:column style="width:40px">
<h:outputText id="dragIcon" styleClass="ui-icon ui-icon-arrow-4"/>
<p:draggable for="dragIcon" revert="true" helper="clone"/>
</p:column>
<p:column headerText="Id">
<h:outputText value="#{prod.produto.id}"/>
</p:column>
<p:column headerText="Produto">
<h:outputText value="#{prod.produto.descricao}"/>
</p:column>
<p:column headerText="Preço">
<h:outputText value="#{prod.produto.preco}"/>
</p:column>
</p:dataTable>
</p:fieldset>
<p:fieldset id="selectedProdutos" legend="Produtos Selecionados" style="margin-top:20px">
<p:outputPanel id="dropArea" >
<h:outputText value="!!!Solte aqui os Produtos!!!"
rendered="#{empty compraControlador.selectedProduto}"
style="font-size:24px;"/>
<p:dataTable id="selectedProdutoTable" var="prod" value="#{compraControlador.selectedProduto}"
rendered="#{not empty compraControlador.selectedProduto}"
styleClass="mrig05" style="margin-bottom: 10px">
<p:column headerText="Id">
<h:outputText value="#{prod.produto.id}"/>
</p:column>
<p:column headerText="Produto">
<h:outputText value="#{prod.produto.descricao}"/>
</p:column>
<p:column headerText="Preço">
<h:outputText value="#{prod.produto.preco}"/>
</p:column>
<p:column style="width:150px" headerText="Qtd.">
<p:inputText value="#{prod.quantidade}">
<p:ajax event="blur" process="@this"/>
</p:inputText>
</p:column>
</p:dataTable>
</p:outputPanel>
</p:fieldset>
<p:commandButton value="salva" actionListener="#{compraControlador.salvar}"
onclick="PF('statusDialog').show();"
oncomplete="PF('statusDialog').hide()"
icon="ui-icon-disk" styleClass="mrig05">
</p:commandButton>
<p:button value="Cancelar"
icon="ui-icon-arrow"
href="/admin/compra/listar/" styleClass="mrig05"/>
</p:panel>
<p:droppable for="selectedProdutos" tolerance="touch" activeStyleClass="ui-state-highlight"
datasource="availableProdutos" onDrop="handleDrop">
<p:ajax listener="#{compraControlador.onProdutoDrop}" update="dropArea availableProdutos"/>
</p:droppable>
</h:form>
</ui:define>
</ui:composition>
FacadeCompra = Servelet
package br.com.romaninisistemas.negocio;
import br.com.romaninisistemas.entidade.Compra;
import br.com.romaninisistemas.entidade.Estoque;
import br.com.romaninisistemas.entidade.ItemCompra;
import br.com.romaninisistemas.supers.AbstractFacade;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.util.Date;
/**
-
Created by fonseca on 12/8/17.
*/
@Repository
@Transactional
public class CompraFacade extends AbstractFacade {
@PersistenceContext
private EntityManager em;
private Compra compra;
@Autowired
private EstoqueFacade estoqueFacade;
public CompraFacade() {
super(Compra.class);
}
@Override
public EntityManager getEntityManager() {
return em;
}
public void salvaNovo(Compra selecionado) {
for (ItemCompra item : selecionado.getItens()) {
Estoque estoque = estoqueFacade.buscarEstoque(item.getProduto());
if (estoque == null) {
estoqueFacade.salvarNovo(estoque);
} else {
estoqueFacade.salvar(estoque);
}
}
em.persist(selecionado);
}
public void setCompra(Compra compra) {
this.compra = compra;
}
public Compra getCompra() {
return compra;
}
public void setEstoqueFacade(EstoqueFacade estoqueFacade) {
this.estoqueFacade = estoqueFacade;
}
}
Controlador Bean compra
package br.com.romaninisistemas.controlador;
/**
- Created by fonseca on 12/8/17.
*/
import br.com.romaninisistemas.entidade.Compra;
import br.com.romaninisistemas.entidade.Estoque;
import br.com.romaninisistemas.entidade.ItemCompra;
import br.com.romaninisistemas.entidade.Produto;
import br.com.romaninisistemas.negocio.CompraFacade;
import br.com.romaninisistemas.negocio.EstoqueFacade;
import br.com.romaninisistemas.negocio.ItemCompraFacade;
import br.com.romaninisistemas.negocio.ProdutoFacade;
import br.com.romaninisistemas.supers.AbstractControlador;
import br.com.romaninisistemas.supers.AbstractFacade;
import br.com.romaninisistemas.util.FacesContextUtil;
import com.google.common.collect.Lists;
import com.ocpsoft.pretty.faces.annotation.URLAction;
import com.ocpsoft.pretty.faces.annotation.URLMapping;
import com.ocpsoft.pretty.faces.annotation.URLMappings;
import org.primefaces.event.DragDropEvent;
import org.springframework.beans.factory.annotation.Autowired;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@ManagedBean
@ViewScoped
@URLMappings(mappings = {
@URLMapping(id = “novo-compras”, pattern = “/admin/compra/novo/”, viewId = “/faces/admin/cadastros/compra/editar.xhtml”)
})
public class CompraControlador extends AbstractControlador {
@Autowired
private CompraFacade compraFacade;
@Autowired
private ProdutoFacade produtoFacade;
@Autowired
private EstoqueFacade estoqueFacade;
private ItemCompra itemCompra;
private Compra compra;
private List<ItemCompra> selectedProduto;
private List<ItemCompra> produtos;
private Estoque estoque;
@Override
public AbstractFacade getFacade() {
return compraFacade;
}
public CompraControlador() {
super(Compra.class);
}
@URLAction(mappingId = "novo-compras", phaseId = URLAction.PhaseId.RENDER_RESPONSE, onPostback = false)
public void novo() {
super.novo();
selectedProduto = new ArrayList<ItemCompra>();
produtos = getTodosProdutos();
}
public void onProdutoDrop(DragDropEvent ddEvent) {
ItemCompra produto = ((ItemCompra) ddEvent.getData());
selectedProduto.add(produto);
produtos.remove(produto);
}
public List<ItemCompra> getTodosProdutos() {
List<Produto> produtos = produtoFacade.listar();
List<ItemCompra> itens = Lists.newArrayList();
for (Produto produto : produtos) {
itens.add(new ItemCompra(selecionado, produto));
}
return itens;
}
public void salvar() {
selecionado.setItens(selectedProduto);
if (selecionado.getId() == null) {
compraFacade.salvaNovo(selecionado);
}
navegarEmbora();
}
public Compra getCompra() {
return compra;
}
public void setCompra(Compra compra) {
this.compra = compra;
}
public List<ItemCompra> getSelectedProduto() {
return selectedProduto;
}
public List<ItemCompra> getProdutos() {
return produtos;
}
public ItemCompra getItemCompra() {
return itemCompra;
}
public void setItemCompra(ItemCompra itemCompra) {
this.itemCompra = itemCompra;
}
public Estoque getEstoque() {
return estoque;
}
public void setEstoque(Estoque estoque) {
this.estoque = estoque;
}
public EstoqueFacade getEstoqueFacade() {
return estoqueFacade;
}
public void setEstoqueFacade(EstoqueFacade estoqueFacade) {
this.estoqueFacade = estoqueFacade;
}
}
FacadeEstoque
package br.com.romaninisistemas.negocio;
import br.com.romaninisistemas.entidade.Estoque;
import br.com.romaninisistemas.entidade.Produto;
import br.com.romaninisistemas.exceptions.ExcecaoNegocioGenerica;
import br.com.romaninisistemas.supers.AbstractFacade;
import com.google.common.collect.Lists;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.util.Date;
import java.util.List;
/**
-
Created by fonseca on 12/4/17.
*/
@Repository
@Transactional
public class EstoqueFacade extends AbstractFacade {
@PersistenceContext
private EntityManager em;
Estoque estoque;
public EstoqueFacade() {
super(Estoque.class);
}
@Override
public EntityManager getEntityManager() {
return em;
}
public List getallEstoque() {
String sql = "Select estoq.* from Estoque estoq order by 1 ";
Query q = em.createNativeQuery(sql, Estoque.class);
try {
return q.getResultList();
} catch (NoResultException nre) {
return Lists.newArrayList();
} catch (Exception ex) {
ex.printStackTrace();
}
return Lists.newArrayList();
}
public void deletar(Estoque selecionado) {
em.remove(em.find(Estoque.class, selecionado.getId()));
}
public void salvarNovo(Estoque estoque) {
estoque = new Estoque();
estoque.setProduto(estoque.getProduto());
estoque.setQuantidade(estoque.getQuantidade());
estoque.setData(estoque.getData());
em.persist(estoque);
}
public void salvar(Estoque estoque) {
estoque.setQuantidade(estoque.getQuantidade() + estoque.getQuantidade());
em.merge(estoque);
}
public Estoque buscarEstoque(final Produto produto) {
String sql = "select t from estoque t where t.produto_id = :produto ";
Query q = em.createNativeQuery(sql, Estoque.class);
q.setParameter("produto", produto.getId());
q.setMaxResults(1);
try {
return (Estoque) q.getSingleResult();
} catch (NoResultException nre) {
return null;
}
}
/**
-
Para pegar o id do estoque
-
-
@Id
*/
public Estoque buscarEstoquePorId(Estoque id) {
String sql = "select t from Estoque t where t.id = :id ";
Query q = em.createNativeQuery(sql, Estoque.class);
q.setParameter(“id”, id);
q.setMaxResults(1);
try {
return (Estoque) q.getSingleResult();
} catch (NoResultException nre) {
return null;
}
}
}