financeiro.dao.hibernate.LancamentoDAOHibernate.java Source code

Java tutorial

Introduction

Here is the source code for financeiro.dao.hibernate.LancamentoDAOHibernate.java

Source

/*
 * Cdigo-fonte do livro "Programao Java para a Web"
 * Autores: Dcio Heinzelmann Luckow <decioluckow@gmail.com>
 *          Alexandre Altair de Melo <alexandremelo.br@gmail.com>
 *
 * ISBN: 978-85-7522-238-6
 * http://www.javaparaweb.com.br
 * http://www.novatec.com.br/livros/javaparaweb
 * Editora Novatec, 2010 - todos os direitos reservados
 *
 * LICENA: Este arquivo-fonte est sujeito a Atribuio 2.5 Brasil, da licena Creative Commons,
 * que encontra-se disponvel no seguinte endereo URI: http://creativecommons.org/licenses/by/2.5/br/
 * Se voc no recebeu uma cpia desta licena, e no conseguiu obt-la pela internet, por favor,
 * envie uma notificao aos seus autores para que eles possam envi-la para voc imediatamente.
 *
 *
 * Source-code of "Programao Java para a Web" book
 * Authors: Dcio Heinzelmann Luckow <decioluckow@gmail.com>
 *          Alexandre Altair de Melo <alexandremelo.br@gmail.com>
 *
 * ISBN: 978-85-7522-238-6
 * http://www.javaparaweb.com.br
 * http://www.novatec.com.br/livros/javaparaweb
 * Editora Novatec, 2010 - all rights reserved
 *
 * LICENSE: This source file is subject to Attribution version 2.5 Brazil of the Creative Commons
 * license that is available through the following URI:  http://creativecommons.org/licenses/by/2.5/br/
 * If you did not receive a copy of this license and are unable to obtain it through the web, please
 * send a note to the authors so they can mail you a copy immediately.
 *
 */
package financeiro.dao.hibernate;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import financeiro.dao.LancamentoDAO;
import financeiro.model.Conta;
import financeiro.model.Lancamento;

public class LancamentoDAOHibernate implements LancamentoDAO {

    private Session session;

    public void setSession(Session session) {
        this.session = session;
    }

    public void salvar(Lancamento lancamento) {
        this.session.saveOrUpdate(lancamento);
    }

    public void excluir(Lancamento lancamento) {
        this.session.delete(lancamento);
    }

    public Lancamento carregar(Integer lancamento) {
        return (Lancamento) this.session.get(Lancamento.class, lancamento);
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<Lancamento> listar(Conta conta, Date dataInicio, Date dataFim) {
        Criteria criteria = this.session.createCriteria(Lancamento.class);

        if (dataInicio != null && dataFim != null) {
            criteria.add(Restrictions.between("data", dataInicio, dataFim));
        } else if (dataInicio != null) {
            criteria.add(Restrictions.ge("data", dataInicio));
        } else if (dataFim != null) {
            criteria.add(Restrictions.le("data", dataFim));
        }

        criteria.add(Restrictions.eq("conta", conta));
        criteria.addOrder(Order.asc("data"));
        return criteria.list();
    }

    public float saldo(Conta conta, Date data) {

        if (data == null) {
            throw new IllegalArgumentException("[Financeiro] data cannot be null");
        }

        StringBuffer sql = new StringBuffer();
        sql.append("select sum(l.valor * c.fator)");
        sql.append("  from LANCAMENTO l,");
        sql.append("        CATEGORIA c");
        sql.append(" where l.categoria = c.codigo");
        sql.append("   and l.conta = :conta");
        sql.append("   and l.data <= :data");

        SQLQuery query = this.session.createSQLQuery(sql.toString());

        query.setParameter("conta", conta.getConta());
        query.setParameter("data", data);

        BigDecimal saldo = (BigDecimal) query.uniqueResult();

        if (saldo != null) {
            return saldo.floatValue();
        }
        return 0f;
    }
}