Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.creativity.repository; import com.creativity.Filter.FinanceiroFilter; import com.creativity.model.Financeiro; import com.creativity.model.StatusFinanceiro; import com.creativity.security.UsuarioSistema; import com.creativity.service.NegocioException; import com.creativity.util.Transactional; import java.io.Serializable; import java.math.BigDecimal; import java.util.List; import javax.faces.context.FacesContext; import javax.inject.Inject; import javax.persistence.EntityManager; import javax.persistence.PersistenceException; import org.apache.commons.lang3.StringUtils; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.criterion.MatchMode; import org.hibernate.criterion.Order; import org.hibernate.criterion.Restrictions; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; /** * * @author rafael.lima */ public class LancamentosFinanceiros implements Serializable { private static final long serialVersionUID = 1L; private EntityManager manager; @Inject public LancamentosFinanceiros(EntityManager manager) { this.manager = manager; } public Financeiro porId(Long id) { return manager.find(Financeiro.class, id); } public Financeiro guardar(Financeiro financeiro) { return this.manager.merge(financeiro); } public List<Financeiro> todosLancamentos(FinanceiroFilter filtro) { return manager.createQuery("from Financeiro", Financeiro.class).getResultList(); } public List<Financeiro> filtradosAguardandoPagamento(FinanceiroFilter filtro) { Session session = this.manager.unwrap(Session.class); Criteria criteria = session.createCriteria(Financeiro.class) // fazemos uma associao (join) com cliente e nomeamos como "c" // fazemos uma associao (join) com vendedor e nomeamos como "v" .createAlias("ficha", "f"); if (filtro.getNumeroDe() != null) { // id deve ser maior ou igual (ge = greater or equals) a filtro.numeroDe criteria.add(Restrictions.ge("id", filtro.getNumeroDe())); } if (filtro.getNumeroAte() != null) { // id deve ser menor ou igual (le = lower or equal) a filtro.numeroDe criteria.add(Restrictions.le("id", filtro.getNumeroAte())); } if (filtro.getDataCriacaoDe() != null) { criteria.add(Restrictions.ge("dataLancamento", filtro.getDataCriacaoDe())); } if (filtro.getDataCriacaoAte() != null) { criteria.add(Restrictions.le("dataLancamento", filtro.getDataCriacaoAte())); } if (StringUtils.isNotBlank(filtro.getNomeCliente())) { // acessamos o nome do vendedor associado ao pedido pelo alias "v", criado anteriormente criteria.add(Restrictions.ilike("f.nomeRazao", filtro.getNomeCliente(), MatchMode.ANYWHERE)); } if (StringUtils.isNotBlank(filtro.getNomeCliente())) { // acessamos o nome do vendedor associado ao pedido pelo alias "v", criado anteriormente criteria.add(Restrictions.ilike("f.nomeRazao", filtro.getNomeCliente(), MatchMode.ANYWHERE)); } if (filtro.getStatusDocFinanceiro() != null && filtro.getStatusDocFinanceiro().length > 0) { // adicionamos uma restrio "in", passando um array de constantes da enum StatusPedido criteria.add(Restrictions.in("statusFinanceiro", filtro.getStatusDocFinanceiro())); } if (filtro.getGestor() != null) { // id deve ser maior ou igual (ge = greater or equals) a filtro.numeroDe criteria.add(Restrictions.eq("f.gestor.id", filtro.getGestor())); } return criteria.addOrder(Order.asc("id")).list(); } public List<Financeiro> filtradosAguardandoPagamentoPorGestor(FinanceiroFilter filtro) { Long usuarioGestorLogado = null; UsuarioSistema usuarioLogado = getUsuarioLogado(); if (usuarioLogado != null) { usuarioGestorLogado = usuarioLogado.getUsuario().getId(); } Session session = this.manager.unwrap(Session.class); Criteria criteria = session.createCriteria(Financeiro.class) // fazemos uma associao (join) com cliente e nomeamos como "c" // fazemos uma associao (join) com vendedor e nomeamos como "v" .createAlias("ficha", "f").add(Restrictions.eq("f.gestor.id", usuarioGestorLogado)); if (filtro.getNumeroDe() != null) { // id deve ser maior ou igual (ge = greater or equals) a filtro.numeroDe criteria.add(Restrictions.ge("id", filtro.getNumeroDe())); } if (filtro.getNumeroAte() != null) { // id deve ser menor ou igual (le = lower or equal) a filtro.numeroDe criteria.add(Restrictions.le("id", filtro.getNumeroAte())); } if (filtro.getDataCriacaoDe() != null) { criteria.add(Restrictions.ge("dataLancamento", filtro.getDataCriacaoDe())); } if (filtro.getDataCriacaoAte() != null) { criteria.add(Restrictions.le("dataLancamento", filtro.getDataCriacaoAte())); } if (filtro.getStatusDocFinanceiro() != null && filtro.getStatusDocFinanceiro().length > 0) { // adicionamos uma restrio "in", passando um array de constantes da enum StatusPedido criteria.add(Restrictions.in("statusFinanceiro", filtro.getStatusDocFinanceiro())); } if (StringUtils.isNotBlank(filtro.getNomeCliente())) { // acessamos o nome do vendedor associado ao pedido pelo alias "v", criado anteriormente criteria.add(Restrictions.ilike("f.nomeRazao", filtro.getNomeCliente(), MatchMode.ANYWHERE)); } return criteria.addOrder(Order.asc("id")).list(); } public List<Financeiro> financeiroAbertoPorGestor() { Long usuarioGestorLogado = null; UsuarioSistema usuarioLogado = getUsuarioLogado(); if (usuarioLogado != null) { usuarioGestorLogado = usuarioLogado.getUsuario().getId(); } Session session = this.manager.unwrap(Session.class); Criteria criteria = session.createCriteria(Financeiro.class) // fazemos uma associao (join) com cliente e nomeamos como "c" // fazemos uma associao (join) com vendedor e nomeamos como "v" .createAlias("ficha", "f").add(Restrictions.eq("f.gestor.id", usuarioGestorLogado)) .add(Restrictions.like("statusFinanceiro", StatusFinanceiro.ABERTO)); return criteria.addOrder(Order.asc("id")).list(); } public BigDecimal valorAbertoTotal() { Session session = this.manager.unwrap(Session.class); org.hibernate.Query q = session .createSQLQuery("select sum(valor) from financeiro where statusFinanceiro = 'ABERTO'"); return (BigDecimal) q.uniqueResult(); } public BigDecimal valorPagoTotal() { Session session = this.manager.unwrap(Session.class); org.hibernate.Query q = session.createSQLQuery("select sum(valorTotalRecebido) from financeiro"); return (BigDecimal) q.uniqueResult(); } public BigDecimal valorPagoDiaTotal() { Session session = this.manager.unwrap(Session.class); org.hibernate.Query q = session.createSQLQuery( "SELECT sum(valorPagamento) from baixafinanceiro where dataPagamento = current_date();"); return (BigDecimal) q.uniqueResult(); } public BigDecimal valorPagoMesTotal() { Session session = this.manager.unwrap(Session.class); org.hibernate.Query q = session.createSQLQuery( "SELECT sum(valorPagamento) from baixafinanceiro where month(dataPagamento) = month( current_date());"); return (BigDecimal) q.uniqueResult(); } public BigDecimal valorPagoAnoTotal() { Session session = this.manager.unwrap(Session.class); org.hibernate.Query q = session.createSQLQuery( "SELECT sum(valorPagamento) from baixafinanceiro where year(dataPagamento) = year( current_date());"); return (BigDecimal) q.uniqueResult(); } public BigDecimal valorSaldoTotal() { Session session = this.manager.unwrap(Session.class); org.hibernate.Query q = session.createSQLQuery("select \n" + "((select sum(valor) from financeiro where statusFinanceiro = 'ABERTO')\n" + "- (select sum(valorTotalRecebido) from financeiro where statusFinanceiro = 'PAGO')) from financeiro\n" + "group by valor"); return (BigDecimal) q.uniqueResult(); } private UsuarioSistema getUsuarioLogado() { UsuarioSistema usuario = null; UsernamePasswordAuthenticationToken auth = (UsernamePasswordAuthenticationToken) FacesContext .getCurrentInstance().getExternalContext().getUserPrincipal(); if (auth != null && auth.getPrincipal() != null) { usuario = (UsuarioSistema) auth.getPrincipal(); } return usuario; } @Transactional public void remover(Financeiro financeiro) { try { financeiro = porId(financeiro.getId()); manager.remove(financeiro); manager.flush(); } catch (PersistenceException e) { throw new NegocioException("Doc Financeiro no pode ser excludo."); } } }