AdmMono/src/com/rjconsultores/ventaboletos/dao/hibernate/ComissaoHibernateDAO.java

107 lines
5.2 KiB
Java

package com.rjconsultores.ventaboletos.dao.hibernate;
import java.util.Date;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.transform.AliasToBeanResultTransformer;
import org.hibernate.type.BigDecimalType;
import org.hibernate.type.BooleanType;
import org.hibernate.type.IntegerType;
import org.hibernate.type.StringType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;
import com.rjconsultores.ventaboletos.dao.ComissaoDAO;
import com.rjconsultores.ventaboletos.entidad.Comissao;
import com.rjconsultores.ventaboletos.vo.comissao.BoletoComissao;
@Repository("comissaoHibernateDAO")
public class ComissaoHibernateDAO extends GenericHibernateDAO<Comissao, Integer> implements ComissaoDAO {
@Autowired
public ComissaoHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) {
setSessionFactory(factory);
}
@SuppressWarnings("unchecked")
@Override
public List<BoletoComissao> buscarReceitasComissoes(Integer puntoVentaId, Integer empresaId, Date periodo) {
StringBuffer sql = new StringBuffer();
sql.append("select ");
sql.append("b.marca_id as empresaId, b.puntoventa_id as puntoVentaId, ");
sql.append("to_char(b.fechorventa, 'dd-mm-yyyy') as datavenda, b.indstatusboleto as indstatusboleto, ");
sql.append("b.tipoventa_id as tipoVenta, b.motivocancelacion_id as motivoCancelacionId, ");
sql.append("coalesce(sum(b.preciopagado), 0) as valorpagado, coalesce(sum(b.importeseguro), 0) as seguro, ");
sql.append("coalesce(sum(b.importepedagio), 0) as pedagio, coalesce(sum(b.importetaxaembarque), 0) as embarque, ");
sql.append("coalesce(sum(case when ee.tipoeventoextra_id = 1 then ee.impingreso else 0 end), 0) as excessoBagagem, ");
sql.append("coalesce(sum(case when ee.tipoeventoextra_id = 21 then ee.impingreso else 0 end), 0) as seguroOpcional, ");
sql.append("coalesce(sum(case when ee.tipoeventoextra_id <> 21 ");
sql.append(" or ee.tipoeventoextra_id <> 1 then ee.impingreso else 0 end), 0) as seguroOutros, ");
sql.append("case when c.ptovtaventa_id = b.puntoventa_id then 1 else 0 end as ptoVtaOrigem, ");
sql.append("ei.icms as icmsBase ");
sql.append("from boleto b ");
sql.append("inner join parada origen on origen.parada_id = b.origen_id ");
sql.append("inner join ciudad ci on origen.ciudad_id = ci.ciudad_id ");
sql.append("inner join estado e on ci.estado_id = e.estado_id ");
sql.append("inner join empresa_imposto ei on (ei.estado_id = e.estado_id ");
sql.append(" and ei.empresa_id = b.marca_id and ei.activo = 1) ");
sql.append("left join caja c on c.numoperacion = b.numoperacion and c.numfoliosistema = b.numfoliosistema ");
sql.append(" and c.numfoliopreimpreso = b.numfoliopreimpreso and c.numseriepreimpresa = b.numseriepreimpresa ");
sql.append("left join evento_extra ee on ee.boleto_id = b.boleto_id ");
sql.append("where ");
sql.append("to_char(b.fechorventa, 'mmyyyy') = to_char(:periodo, 'mmyyyy') ");
sql.append("and b.marca_id = :empresaId and b.puntoventa_id = :puntoventaId ");
sql.append("group by b.marca_id, b.puntoventa_id, to_char(b.fechorventa, 'dd-mm-yyyy'), ");
sql.append("b.indstatusboleto, b.tipoventa_id, b.motivocancelacion_id, c.ptovtaventa_id, ei.icms ");
sql.append("order by datavenda ");
Query query = getSession().createSQLQuery(sql.toString())
.addScalar("empresaId", IntegerType.INSTANCE)
.addScalar("puntoVentaId", IntegerType.INSTANCE)
.addScalar("datavenda", StringType.INSTANCE)
.addScalar("tipoVenta", IntegerType.INSTANCE)
.addScalar("indstatusboleto", StringType.INSTANCE)
.addScalar("motivoCancelacionId", IntegerType.INSTANCE)
.addScalar("valorpagado", BigDecimalType.INSTANCE)
.addScalar("seguro", BigDecimalType.INSTANCE)
.addScalar("pedagio", BigDecimalType.INSTANCE)
.addScalar("embarque", BigDecimalType.INSTANCE)
.addScalar("excessoBagagem", BigDecimalType.INSTANCE)
.addScalar("seguroOpcional", BigDecimalType.INSTANCE)
.addScalar("seguroOutros", BigDecimalType.INSTANCE)
.addScalar("ptoVtaOrigem", BooleanType.INSTANCE)
.addScalar("icmsBase", BigDecimalType.INSTANCE)
.setResultTransformer(new AliasToBeanResultTransformer(BoletoComissao.class));
query.setTimestamp("periodo", periodo);
query.setInteger("puntoventaId", puntoVentaId);
query.setInteger("empresaId", empresaId);
return query.list();
}
@SuppressWarnings("unchecked")
@Override
public List<Comissao> buscaComissaoVigencia(Integer puntoVentaId, Integer empresaId, String competencia) {
StringBuilder hql = new StringBuilder();
hql.append(" from Comissao c ");
hql.append(" where c.activo = 1 ");
hql.append(" AND c.puntoVentaId = :puntoventaId ");
hql.append(" AND c.empresaId = :empresaId ");
hql.append(" AND c.competencia = :periodo ");
Query query = getSession().createQuery(hql.toString());
query.setString("periodo", competencia);
query.setInteger("puntoventaId", puntoVentaId);
query.setInteger("empresaId", empresaId);
return query.list();
}
}