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 implements ComissaoDAO { @Autowired public ComissaoHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) { setSessionFactory(factory); } @SuppressWarnings("unchecked") @Override public List 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 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(); } }