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

Java tutorial

Introduction

Here is the source code for br.com.hslife.orcamento.repository.FechamentoPeriodoRepository.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.util.Date;
import java.util.List;

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

import br.com.hslife.orcamento.entity.Conta;
import br.com.hslife.orcamento.entity.FechamentoPeriodo;
import br.com.hslife.orcamento.enumeration.OperacaoConta;

@Repository
public class FechamentoPeriodoRepository extends AbstractCRUDRepository<FechamentoPeriodo> {

    public FechamentoPeriodoRepository() {
        super(new FechamentoPeriodo());
    }

    @Override
    public FechamentoPeriodo findById(Long id) {
        return (FechamentoPeriodo) getQuery(
                "FROM FechamentoPeriodo as entity LEFT JOIN FETCH entity.lancamentos WHERE entity.id = :idEntity")
                        .setLong("idEntity", id).uniqueResult();
    }

    @SuppressWarnings("unchecked")
    public List<FechamentoPeriodo> findAllByConta(Conta conta) {
        Criteria criteria = getSession().createCriteria(FechamentoPeriodo.class);
        criteria.add(Restrictions.eq("conta.id", conta.getId()));
        criteria.addOrder(Order.desc("data"));
        return criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list();
    }

    @SuppressWarnings("unchecked")
    public List<FechamentoPeriodo> findByContaAndOperacaoConta(Conta conta, OperacaoConta operacaoConta) {
        Criteria criteria = getSession().createCriteria(FechamentoPeriodo.class);
        criteria.add(Restrictions.eq("conta.id", conta.getId()));
        criteria.add(Restrictions.eq("operacao", operacaoConta));
        if (operacaoConta.equals(OperacaoConta.FECHAMENTO)) {
            criteria.addOrder(Order.desc("data"));
        } else if (operacaoConta.equals(OperacaoConta.REABERTURA)) {
            criteria.addOrder(Order.asc("dataAlteracao"));
        } else {
            criteria.addOrder(Order.asc("data"));
        }
        return criteria.list();
    }

    @SuppressWarnings("unchecked")
    public FechamentoPeriodo findUltimoFechamentoByConta(Conta conta) {
        Criteria criteria = getSession().createCriteria(FechamentoPeriodo.class);
        criteria.add(Restrictions.eq("conta.id", conta.getId()));
        criteria.add(Restrictions.eq("operacao", OperacaoConta.FECHAMENTO));
        List<FechamentoPeriodo> resultado = criteria.addOrder(Order.desc("data")).setMaxResults(1).list();
        if (resultado == null || resultado.size() != 1) {
            return null;
        } else {
            return resultado.get(0);
        }
    }

    @SuppressWarnings("unchecked")
    public List<FechamentoPeriodo> findFechamentosPosteriores(FechamentoPeriodo fechamento) {
        Criteria criteria = getSession().createCriteria(FechamentoPeriodo.class);
        criteria.add(Restrictions.eq("conta.id", fechamento.getConta().getId()));
        criteria.add(Restrictions.eq("operacao", OperacaoConta.FECHAMENTO));
        criteria.add(Restrictions.ge("data", fechamento.getData()));
        return criteria.list();
    }

    @SuppressWarnings("unchecked")
    public List<FechamentoPeriodo> findFechamentosAnterioresReabertos(FechamentoPeriodo fechamento) {
        Criteria criteria = getSession().createCriteria(FechamentoPeriodo.class);
        criteria.add(Restrictions.eq("conta.id", fechamento.getConta().getId()));
        criteria.add(Restrictions.eq("operacao", OperacaoConta.REABERTURA));
        criteria.add(Restrictions.lt("data", fechamento.getData()));
        return criteria.list();
    }

    @SuppressWarnings("unchecked")
    public FechamentoPeriodo findFechamentoPeriodoAnterior(FechamentoPeriodo fechamentoPeriodo) {
        Criteria criteria = getSession().createCriteria(FechamentoPeriodo.class);
        criteria.add(Restrictions.lt("id", fechamentoPeriodo.getId()));
        //criteria.add(Restrictions.eq("operacao", fechamentoPeriodo.getOperacao()));
        criteria.add(Restrictions.eq("conta.id", fechamentoPeriodo.getConta().getId()));
        List<FechamentoPeriodo> resultado = criteria.addOrder(Order.desc("id")).setMaxResults(1).list();
        if (resultado == null || resultado.size() != 1) {
            return null;
        } else {
            return resultado.get(0);
        }
    }

    @SuppressWarnings("unchecked")
    public FechamentoPeriodo findLastFechamentoPeriodoBeforeDateByContaAndOperacao(Conta conta, Date data,
            OperacaoConta operacao) {
        Criteria criteria = getSession().createCriteria(FechamentoPeriodo.class);
        criteria.add(Restrictions.le("data", data));
        criteria.add(Restrictions.eq("operacao", operacao));
        criteria.add(Restrictions.eq("conta.id", conta.getId()));
        List<FechamentoPeriodo> resultado = criteria.addOrder(Order.desc("id")).setMaxResults(1).list();
        if (resultado == null || resultado.size() != 1) {
            return null;
        } else {
            return resultado.get(0);
        }
    }
}