br.com.hslife.orcamento.repository.ContaRepository.java Source code

Java tutorial

Introduction

Here is the source code for br.com.hslife.orcamento.repository.ContaRepository.java

Source

/***
      
 Copyright (c) 2012 - 2020 Hrcules S. S. Jos
    
Este arquivo  parte do programa Oramento Domstico.
    
    
Oramento Domstico  um software livre; voc pode redistribui-lo e/ou 
    
modific-lo dentro dos termos da Licena Pblica Geral Menor GNU como 
    
publicada pela Fundao do Software Livre (FSF); na verso 2.1 da 
    
Licena.
    
    
Este programa  distribudo na esperana que possa ser til, 
    
mas SEM NENHUMA GARANTIA; sem uma garantia implcita de ADEQUAO a 
    
qualquer MERCADO ou APLICAO EM PARTICULAR. Veja a Licena Pblica 
    
Geral Menor GNU em portugus para maiores detalhes.
    
    
Voc deve ter recebido uma cpia da Licena Pblica Geral Menor GNU sob o 
    
nome de "LICENSE.TXT" junto com este programa, se no, acesse o site do
    
projeto no endereco https://github.com/herculeshssj/orcamento ou escreva 
    
para a Fundao do Software Livre(FSF) Inc., 51 Franklin St, Fifth Floor, 
    
Boston, MA  02110-1301, USA.
    
    
Para mais informaes sobre o programa Oramento Domstico e seu autor entre  
    
em contato pelo e-mail herculeshssj@outlook.com, ou ainda escreva para 
    
Hrcules S. S. Jos, Av. Ministro Lafaeyte de Andrade, 1683 - Bl. 3 Apt 404, 
    
Marco II - Nova Iguau, RJ, Brasil.
      
***/

package br.com.hslife.orcamento.repository;

import java.math.BigInteger;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;

import br.com.hslife.orcamento.entity.Banco;
import br.com.hslife.orcamento.entity.CartaoCredito;
import br.com.hslife.orcamento.entity.Conta;
import br.com.hslife.orcamento.entity.Usuario;
import br.com.hslife.orcamento.enumeration.TipoConta;

@Repository
public class ContaRepository extends AbstractCRUDRepository<Conta> {

    public ContaRepository() {
        super(new Conta());
    }

    @SuppressWarnings("unchecked")
    public List<Conta> findAll() {
        Criteria criteria = getSession().createCriteria(Conta.class);
        criteria.add(Restrictions.ne("tipoConta", TipoConta.CARTAO));
        return criteria.addOrder(Order.asc("descricao")).list();
    }

    @SuppressWarnings("unchecked")
    public List<Conta> findByBanco(Long idBanco) {
        Criteria criteria = getSession().createCriteria(Conta.class);
        criteria.add(Restrictions.eq("banco.id", idBanco));
        criteria.add(Restrictions.ne("tipoConta", TipoConta.CARTAO));
        return criteria.addOrder(Order.asc("descricao")).list();
    }

    @SuppressWarnings("unchecked")
    public List<Conta> findByDescricao(String descricao) {
        Criteria criteria = getSession().createCriteria(Conta.class);
        criteria.add(Restrictions.ilike("descricao", descricao, MatchMode.ANYWHERE));
        criteria.add(Restrictions.ne("tipoConta", TipoConta.CARTAO));
        return criteria.addOrder(Order.asc("descricao")).list();
    }

    @SuppressWarnings("unchecked")
    public List<Conta> findByUsuario(Usuario usuario) {
        Criteria criteria = getSession().createCriteria(Conta.class);
        criteria.add(Restrictions.eq("usuario.id", usuario.getId()));
        return criteria.addOrder(Order.asc("descricao")).list();
    }

    @SuppressWarnings("unchecked")
    public List<Conta> findAllAtivos() {
        Criteria criteria = getSession().createCriteria(Conta.class);
        criteria.add(Restrictions.eq("ativo", true));
        criteria.add(Restrictions.ne("tipoConta", TipoConta.CARTAO));
        return criteria.addOrder(Order.asc("descricao")).list();
    }

    @SuppressWarnings("unchecked")
    public List<Conta> findAllAtivosByUsuario(Usuario usuario) {
        return getQuery(
                "FROM Conta conta WHERE conta.ativo = :ativo AND conta.usuario.id = :idUsuario ORDER BY conta.descricao ASC")
                        .setBoolean("ativo", true).setLong("idUsuario", usuario.getId()).list();
    }

    @SuppressWarnings("unchecked")
    public List<Conta> findByDescricaoAndUsuario(String descricao, Usuario usuario) {
        Criteria criteria = getSession().createCriteria(Conta.class);
        criteria.add(Restrictions.ilike("descricao", descricao, MatchMode.ANYWHERE));
        if (!usuario.getLogin().equals("admin")) {
            criteria.add(Restrictions.eq("usuario.id", usuario.getId()));
        }
        criteria.add(Restrictions.ne("tipoConta", TipoConta.CARTAO));
        return criteria.addOrder(Order.asc("descricao")).list();
    }

    @SuppressWarnings("unchecked")
    public List<Conta> findByBancoAndUsuario(Banco banco, Usuario usuario) {
        Criteria criteria = getSession().createCriteria(Conta.class);
        criteria.add(Restrictions.eq("banco.id", banco.getId()));
        criteria.add(Restrictions.eq("usuario.id", usuario.getId()));
        criteria.add(Restrictions.ne("tipoConta", TipoConta.CARTAO));
        return criteria.addOrder(Order.asc("descricao")).list();
    }

    @SuppressWarnings("unchecked")
    public List<Conta> findByTipoContaAndUsuario(TipoConta tipoConta, Usuario usuario) {
        Criteria criteria = getSession().createCriteria(Conta.class);
        criteria.add(Restrictions.eq("tipoConta", tipoConta));
        criteria.add(Restrictions.eq("usuario.id", usuario.getId()));
        criteria.add(Restrictions.ne("tipoConta", TipoConta.CARTAO));
        return criteria.addOrder(Order.asc("descricao")).list();
    }

    @SuppressWarnings("unchecked")
    public List<Conta> findEnabledByUsuario(Usuario usuario) {
        Criteria criteria = getSession().createCriteria(Conta.class);
        criteria.add(Restrictions.eq("ativo", true));
        criteria.add(Restrictions.eq("usuario.id", usuario.getId()));
        criteria.add(Restrictions.ne("tipoConta", TipoConta.CARTAO));
        return criteria.addOrder(Order.asc("descricao")).list();
    }

    @SuppressWarnings("unchecked")
    public List<Conta> findOnlyTipoCartaoEnabledByUsuario(Usuario usuario) {
        Criteria criteria = getSession().createCriteria(Conta.class);
        criteria.add(Restrictions.eq("ativo", true));
        criteria.add(Restrictions.eq("usuario.id", usuario.getId()));
        criteria.add(Restrictions.eq("tipoConta", TipoConta.CARTAO));
        return criteria.addOrder(Order.asc("descricao")).list();
    }

    @SuppressWarnings("unchecked")
    public List<Conta> findOnlyTipoCartaoByUsuario(Usuario usuario) {
        Criteria criteria = getSession().createCriteria(Conta.class);
        criteria.add(Restrictions.eq("usuario.id", usuario.getId()));
        criteria.add(Restrictions.eq("tipoConta", TipoConta.CARTAO));
        return criteria.addOrder(Order.asc("descricao")).list();
    }

    public Conta findByCartaoCredito(CartaoCredito cartaoCredito) {
        Criteria criteria = getSession().createCriteria(Conta.class);
        criteria.add(Restrictions.eq("cartaoCredito.id", cartaoCredito.getId()));
        return (Conta) criteria.uniqueResult();
    }

    public boolean existsLinkages(Conta conta) {
        boolean result = false;

        BigInteger resultFechamentoPeriodo = (BigInteger) getSession().createSQLQuery(
                "select count(id) from fechamentoperiodo where operacao = 'FECHAMENTO' and idContaBancaria = "
                        + conta.getId())
                .uniqueResult();
        BigInteger resultLancamento = (BigInteger) getSession()
                .createSQLQuery("select count(id) from lancamentoconta where idConta = " + conta.getId())
                .uniqueResult();

        if (resultFechamentoPeriodo.longValue() != 0) {
            return true;
        }

        if (resultLancamento.longValue() != 0) {
            return true;
        }

        return result;

    }

    public boolean existsLinkagesCartao(Conta conta) {
        // FIXME implementar!!!!!!
        boolean result = false;
        /*
        BigInteger resultFechamentoPeriodo = (BigInteger)getSession().createSQLQuery("select count(id) from fechamentoperiodo where operacao = 'FECHAMENTO' and idContaBancaria = " + conta.getId()).uniqueResult();
        BigInteger resultLancamento = (BigInteger)getSession().createSQLQuery("select count(id) from lancamentoconta where idConta = " + conta.getId()).uniqueResult();
            
        if (resultFechamentoPeriodo.longValue() != 0) {
           return true;
        }
            
        if (resultLancamento.longValue() != 0) {
           return true;
        }
        */
        return result;
    }

    @SuppressWarnings("unchecked")
    public List<Conta> findDescricaoOrTipoContaOrAtivoByUsuario(String descricao, TipoConta[] tipoConta,
            Usuario usuario, Boolean ativo) {
        StringBuilder hql = new StringBuilder();
        hql.append("FROM Conta conta WHERE ");
        if (descricao != null) {
            hql.append("conta.descricao LIKE '%");
            hql.append(descricao);
            hql.append("%' AND ");
        }
        if (tipoConta != null && tipoConta.length != 0) {
            hql.append("conta.tipoConta IN (:tipo) AND ");
        }
        if (ativo != null) {
            hql.append("conta.ativo = :ativo AND ");
        }

        hql.append("conta.usuario.id = :idUsuario ORDER BY conta.descricao ASC");

        Query hqlQuery = getQuery(hql.toString());

        if (tipoConta != null && tipoConta.length != 0) {
            hqlQuery.setParameterList("tipo", tipoConta);
        }
        if (ativo != null) {
            hqlQuery.setBoolean("ativo", ativo);
        }

        hqlQuery.setLong("idUsuario", usuario.getId());

        return hqlQuery.list();
    }
}