Ola pessoal.
Estou com uma dificuldade em inserir itens na venda. Estou usando hibernate + jpa + jsf + primefaces + postgres. Eu não sei o motivo de não estar conseguindo preencher as colunas da tabela ItemVendaRapida. Abaixo está a classe controller ItemVendaRapida:
@ManagedBean
@SessionScoped
public class ItemVendaRapidaBean implements Serializable{
private ItemVendaRapida itemvenda = new ItemVendaRapida();
private List itemvendas = new ArrayList<ItemVendaRapida>();
private VendaRapida venda = new VendaRapida();
private List vendas = new ArrayList();
public ItemVendaRapidaBean(){
itemvendas = new ItemVendaRapidaDao().listar();
itemvenda = new ItemVendaRapida();
}
public void salvar(ActionEvent event) {
//recuperarVenda();
atualizarQuantidade(itemvenda.getProduto().getId(), itemvenda.getQuantidade());
itemvenda.setVenda(venda);
new ItemVendaRapidaDao().inserir(itemvenda);
itemvendas = new ItemVendaRapidaDao().listar();
itemvenda = new ItemVendaRapida();
}
public void excluir() {
new VendaRapidaBean().atualizarPrecoVenda("decrementar", itemvenda.getProduto().getPrecovenda(), itemvenda.getQuantidade());
reporQuantidade(itemvenda.getProduto().getId(), itemvenda.getQuantidade());
new ItemVendaRapidaDao().delete(itemvenda);
itemvendas = new ItemVendaRapidaDao().listar();
itemvenda = new ItemVendaRapida();
}
public ItemVendaRapida getItemVenda() {
return itemvenda;
}
public void setItemVenda(ItemVendaRapida itemvenda) {
this.itemvenda = itemvenda;
}
public List getItemVendas() {
return itemvendas;
}
public void setItemVendas(List itemvendas) {
this.itemvendas = itemvendas;
}
public VendaRapida getVenda() {
return venda;
}
public void setVenda(VendaRapida venda) {
this.venda = venda;
}
public List getVendas() {
return vendas;
}
public void setVendas(List vendas) {
this.vendas = vendas;
}
public void atualizarQuantidade(Integer id, Integer quantidade){
Session session = HibernateUtil.session.openSession();
Transaction tx = session.beginTransaction();
String sql = "update Produto p set p.quantidade = p.quantidade - :novaQuantidade where id =:codigo";
session.createQuery(sql).setInteger("novaQuantidade", quantidade).setInteger("codigo", id).executeUpdate();
tx.commit();
session.close();
}
public void recuperarVenda(){
Session session = HibernateUtil.session.openSession();
Transaction tx = session.beginTransaction();
venda = (VendaRapida) session.createCriteria(VendaRapida.class,"select MAX(id) from VendaRapida").uniqueResult();
tx.commit();
session.close();
}
public void reporQuantidade(Integer id, Integer quantidade){
Session session = HibernateUtil.session.openSession();
Transaction tx = session.beginTransaction();
String sql = "update Produto p set p.quantidade = p.quantidade + :novaQuantidade where id =:codigo";
session.createQuery(sql).setInteger("novaQuantidade", quantidade).setInteger("codigo", id).executeUpdate();
tx.commit();
session.close();
}
}
Abaixo está o dialog que preencho as informações necessária no item da venda.
<p:dialog id="adicionarItem" width="500" resizable="no" widgetVar="adicionarItemVenda" header="ADICIONAR ITEM À VENDA RÁPIDA" modal="true" height="600">
<h:form id="formAdicionarItemVenda">
<p:messages id="msgs" autoUpdate="true"/>
<h:panelGrid columns="2" cellpadding="4">
<h:outputLabel value="Produto:" for="produto"/>
<p:selectOneMenu value="#{itemVendaRapidaBean.itemVenda.produto}" converter="bancoConverter" panelStyle="width:150px"
effect="fade" var="p" style="width:160px" filter="true" filterMatchMode="startsWith">
<f:selectItem itemLabel="Selecione" itemValue=""/>
<f:selectItems value="#{produtoBean.produtos}" var="itens" itemValue="#{itens}" itemLabel="#{itens.nome}"/>
<p:column>
#{p.nome}
</p:column>
<p:column>
#{p.precovenda}
</p:column>
<p:column>
#{p.quantidade}
</p:column>
</p:selectOneMenu>
<h:outputLabel value="Quantidade:" for="quantidade"></h:outputLabel>
<h:inputText id="quantidade" value="#{itemVendaRapidaBean.itemVenda.quantidade}"/>
<h:outputLabel value="Itens da venda:" for="itens"></h:outputLabel>
<p:dataTable id="itemvenda" value="#{itemVendaRapidaBean.itemVendas}" selectionMode="single" rowKey="#{item.id}" var="item" emptyMessage="Nenhum registro incluido." paginator="true" rows="10">
<f:facet name="header">
LISTA DE ITEM DE VENDAS RÁPIDAS
</f:facet>
<p:column headerText="NOME" style="text-align: center">
<h:outputText value="#{item.produto.nome}" />
</p:column>
<p:column headerText="QUANTIDADE" style="text-align: center">
<h:outputText value="#{item.quantidade}" />
</p:column>
<p:column headerText="EXCLUIR" style="text-align: center">
<p:commandButton value="EXCLUIR" title="Excluir" onclick="confirmationItem.show()" ajax="true" style="margin-left: 5px"/>
</p:column>
</p:dataTable>
</h:panelGrid>
<p:commandButton id="btnAdicionar" value="ADICIONAR" actionListener="#{itemVendaRapidaBean.salvar}" process="@this" update="formAdicionarItemVenda"/>
<p:commandButton id="btnCancelar" value="FECHAR" oncomplete="adicionarItemVenda.hide()" process="@all" update=":formCadastroVenda"/>
</h:form>
</p:dialog>
Esse problema está duro de corrigir. Alguma sugestão?