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

232 lines
12 KiB
Java

package com.rjconsultores.ventaboletos.dao.hibernate;
import java.util.ArrayList;
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.DateType;
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.constantes.TipoEventoExtra;
import com.rjconsultores.ventaboletos.dao.ComissaoDAO;
import com.rjconsultores.ventaboletos.entidad.Comissao;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
import com.rjconsultores.ventaboletos.vo.comissao.BoletoComissao;
import com.rjconsultores.ventaboletos.vo.comissao.HistoricoComissao;
@Repository("comissaoHibernateDAO")
public class ComissaoHibernateDAO extends GenericHibernateDAO<Comissao, Integer> implements ComissaoDAO {
@Autowired
public ComissaoHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) {
setSessionFactory(factory);
}
@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 tee.cvetipoevento = :teeexcbag then ee.impingreso else 0 end), 0) as excessoBagagem, ");
sql.append("coalesce(sum(case when tee.cvetipoevento = :teesegop then ee.impingreso else 0 end), 0) as seguroOpcional, ");
sql.append("coalesce(sum(case when tee.cvetipoevento not in (:teesegop,:teeexcbag) then ee.impingreso else 0 end), 0) as seguroOutros, ");
sql.append("case when b.ptovtaventa_id = b.puntoventa_id then 1 else 0 end as ptoVtaOrigem, ");
sql.append("ei.icms as icmsBase, e.estado_id as estadoId ");
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 punto_venta p on b.puntoventa_id = p.puntoventa_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("left join tipo_evento_extra tee on tee.tipoeventoextra_id = ee.tipoeventoextra_id ");
sql.append("where b.fechorventa between TO_DATE(:dataInicial,'DD/MM/YYYY HH24:MI') and TO_DATE(:dataFinal,'DD/MM/YYYY HH24:MI') ");
sql.append("and b.marca_id = :empresaId ");
sql.append("and (p.puntoventa_id = :puntoventaId or p.puntoventapadre_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, b.ptovtaventa_id, ei.icms, e.estado_id ");
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)
.addScalar("estadoId", IntegerType.INSTANCE)
.setResultTransformer(new AliasToBeanResultTransformer(BoletoComissao.class));
Date inicioPeriodo = DateUtil.inicioFechaPeriodoMeses(periodo);
Date fimPeriodo = DateUtil.fimFechaPeriodoMeses(periodo);
query.setString("dataInicial", DateUtil.getStringDate(inicioPeriodo, "dd/MM/yyyy HH:mm"));
query.setString("dataFinal", DateUtil.getStringDate(fimPeriodo, "dd/MM/yyyy HH:mm"));
query.setInteger("puntoventaId", puntoVentaId);
query.setInteger("empresaId", empresaId);
query.setString("teeexcbag", TipoEventoExtra.EXCESSO_BAGAGEM.toString());
query.setString("teesegop", TipoEventoExtra.SEGURO_OPCIONAL.toString());
return query.list();
}
@Override
public 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.puntoVenta.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 (Comissao) query.uniqueResult();
}
@Override
public List<HistoricoComissao> buscaHistoricoComissao(Integer puntoVentaId, Integer empresaId, Date periodoInicio, Date periodoFim) {
String competenciaInicio = DateUtil.getStringDate(periodoInicio, "MM/yyyy");
String competenciaFim = DateUtil.getStringDate(periodoFim, "MM/yyyy");
StringBuilder sql = new StringBuilder();
sql.append("SELECT c.competencia AS competencia, pv.nombpuntoventa, pv.numpuntoventa, ");
sql.append(" c.datapagamento AS dataPagamento, ");
sql.append(" c.comissao_bpr AS comissaoBpr, ");
sql.append(" c.receita_excessobagagem AS receitaExcessobagagem, ");
sql.append(" c.receita_seguroopcional AS receitaSeguroopcional, ");
sql.append(" c.descontos_fixos AS descontosFixos, ");
sql.append(" c.descontos_eventuais AS descontosEventuais, ");
sql.append(" c.royaties AS royaties, ");
sql.append(" c.iss_retido AS issRetido, ");
sql.append(" c.bonificacao_metas AS bonificacaoMetas, ");
sql.append(" c.entregas_passagem AS entregasPassagem, ");
sql.append(" c.receita_outros AS receitaOutros, ");
sql.append(" c.receita_bpr AS receitaBPR, ");
sql.append(" c.devolvidos AS devolvidos, ");
sql.append(" c.receita_bruta_excessobagagem AS receitaBrutaExcessoBagagem, ");
sql.append(" c.receita_bruta_seguroopcional AS receitaBrutaSeguroopcional, ");
sql.append(" c.indpago AS indPago, ");
sql.append(" CASE WHEN c.indpago = 1 THEN 'PAGO' ELSE 'PENDENTE' END AS pagamento, ");
sql.append(" up.nombusuario AS usuarioPagamento, ");
sql.append(" ul.nombusuario AS usuarioLancamento, ");
sql.append(" e.nombempresa, e.cnpj, ");
sql.append(" pa.numagencia as agencia, pa.numconta || '-' || pa.digito as conta, if.nome as banco, ");
sql.append(" ci.nombciudad as cidade, pv.descCorreo, pv.razonsocial, pv.numdocpuntoventa as cnpjPuntoventa ");
/*
private String sigla;
private String nome;
*/
sql.append("FROM comissao c ");
sql.append("JOIN punto_venta pv on pv.puntoventa_id = c.puntoventa_id ");
sql.append("JOIN empresa e on e.empresa_id = c.empresa_id ");
sql.append("LEFT JOIN ptovta_agencia pa on pa.ptovtaagencia_id = pv.ptovtaagencia_id ");
sql.append("LEFT JOIN insti_financeira if on if.instifinanceira_id = pa.instifinanceira_id ");
sql.append("LEFT JOIN colonia co on co.colonia_id = pv.colonia_id ");
sql.append("LEFT JOIN ciudad ci on ci.ciudad_id = co.ciudad_id ");
sql.append("LEFT JOIN usuario up ON up.usuario_id = c.usuariopagamento_id ");
sql.append("LEFT JOIN usuario ul ON ul.usuario_id = c.usuario_id ");
sql.append("WHERE c.activo = 1 ");
sql.append(" AND c.empresa_id = :empresaId ");
sql.append(" AND TO_DATE(c.competencia,'MM/YYYY') BETWEEN TO_DATE(:periodoInicio,'MM/YYYY') and TO_DATE(:periodoFim,'MM/YYYY') ");
if(puntoVentaId != null) {
sql.append(" AND c.puntoventa_id = :puntoventaId ");
}
sql.append("ORDER BY pv.nombpuntoventa, TO_DATE(c.competencia,'MM/YYYY') ");
Query query = getSession().createSQLQuery(sql.toString())
.addScalar("competencia", StringType.INSTANCE)
.addScalar("nombpuntoventa", StringType.INSTANCE)
.addScalar("numpuntoventa", StringType.INSTANCE)
.addScalar("dataPagamento", DateType.INSTANCE)
.addScalar("comissaoBpr", BigDecimalType.INSTANCE)
.addScalar("receitaExcessobagagem", BigDecimalType.INSTANCE)
.addScalar("receitaSeguroopcional", BigDecimalType.INSTANCE)
.addScalar("descontosFixos", BigDecimalType.INSTANCE)
.addScalar("descontosEventuais", BigDecimalType.INSTANCE)
.addScalar("royaties", BigDecimalType.INSTANCE)
.addScalar("issRetido", BigDecimalType.INSTANCE)
.addScalar("bonificacaoMetas", BigDecimalType.INSTANCE)
.addScalar("entregasPassagem", BigDecimalType.INSTANCE)
.addScalar("receitaOutros", BigDecimalType.INSTANCE)
.addScalar("indPago", BooleanType.INSTANCE)
.addScalar("pagamento", StringType.INSTANCE)
.addScalar("usuarioPagamento", StringType.INSTANCE)
.addScalar("usuarioLancamento", StringType.INSTANCE)
.addScalar("nombempresa", StringType.INSTANCE)
.addScalar("cnpj", StringType.INSTANCE)
.addScalar("conta", StringType.INSTANCE)
.addScalar("banco", StringType.INSTANCE)
.addScalar("cidade", StringType.INSTANCE)
.addScalar("agencia", StringType.INSTANCE)
.addScalar("descCorreo", StringType.INSTANCE)
.addScalar("razonsocial", StringType.INSTANCE)
.addScalar("cnpjPuntoventa", StringType.INSTANCE)
.addScalar("receitaBPR", BigDecimalType.INSTANCE)
.addScalar("devolvidos", BigDecimalType.INSTANCE)
.addScalar("receitaBrutaExcessoBagagem", BigDecimalType.INSTANCE)
.addScalar("receitaBrutaSeguroopcional", BigDecimalType.INSTANCE)
.setResultTransformer(new AliasToBeanResultTransformer(HistoricoComissao.class));
query.setString("periodoInicio", competenciaInicio);
query.setString("periodoFim", competenciaFim);
query.setInteger("empresaId", empresaId);
if(puntoVentaId != null) {
query.setInteger("puntoventaId", puntoVentaId);
}
return query.list();
}
@Override
@SuppressWarnings("unchecked")
public List<PuntoVenta> buscaPuntoVentasEmpresaComComissaoParametrizada(Integer empresaId) {
StringBuilder sQuery = new StringBuilder("SELECT NEW com.rjconsultores.ventaboletos.entidad.PuntoVenta(pv.puntoventaId, pv.nombpuntoventa) FROM PtovtaComissao c ");
sQuery.append("JOIN c.puntoventaId pv ")
.append("JOIN c.empresaId e ")
.append("WHERE pv.activo = 1 ")
.append("AND e.empresaId = :empresaId ")
.append("AND c.activo = 1")
.append("AND pv.statusaprobacion = 'A'");
Query qr = getSession().createQuery(sQuery.toString());
qr.setParameter("empresaId", empresaId);
return qr.list();
}
}