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

386 lines
17 KiB
Java

package com.rjconsultores.ventaboletos.dao.hibernate;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import org.hibernate.SQLQuery;
import org.hibernate.SessionFactory;
import org.hibernate.transform.AliasToBeanResultTransformer;
import org.hibernate.type.BigDecimalType;
import org.hibernate.type.DateType;
import org.hibernate.type.IntegerType;
import org.hibernate.type.LongType;
import org.hibernate.type.StringType;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import com.rjconsultores.ventaboletos.dao.CajaDAO;
import com.rjconsultores.ventaboletos.dao.sqlbuilder.SQLBuilder;
import com.rjconsultores.ventaboletos.exception.BusinessException;
import com.rjconsultores.ventaboletos.exception.VendaEmbarcadaBoletoException;
import com.rjconsultores.ventaboletos.exception.VendaEmbarcadaBoletoFormapagoException;
import com.rjconsultores.ventaboletos.exception.VendaEmbarcadaCajaException;
import com.rjconsultores.ventaboletos.exception.VendaEmbarcadaCajaFormapagoException;
import com.rjconsultores.ventaboletos.vo.caja.CajaCerradoVO;
import com.rjconsultores.ventaboletos.vo.caja.CajaVO;
import com.rjconsultores.ventaboletos.vo.caja.ReceitaDespesaVO;
import com.rjconsultores.ventaboletos.vo.caja.UsuarioVO;
import com.rjconsultores.ventaboletos.vo.caja.VendaEmbarcadaVO;
@Repository("cajaDAO")
public class CajaHibernateDAO extends GenericHibernateDAO<Object, Long> implements CajaDAO {
private static Logger log = org.slf4j.LoggerFactory.getLogger(CajaHibernateDAO.class);
@Autowired
private SQLBuilder sqlBuilder;
@Autowired
public CajaHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) {
setSessionFactory(factory);
}
@Override
public List<CajaVO> buscarCajaFecha(boolean yaCerrado, Date fechaDesde, Date fechaHasta) {
List<CajaVO> list = new ArrayList<CajaVO>();
HashMap<Long, CajaVO> map = new HashMap<Long, CajaVO>();
String sqlBuscarCajaFecha = sqlBuilder.getSQLBuscarCajaFecha(yaCerrado, fechaDesde, fechaHasta);
SQLQuery sql = getSession().createSQLQuery(sqlBuscarCajaFecha)
.addScalar("cajaId", LongType.INSTANCE)
.addScalar("numAsiento", StringType.INSTANCE)
.addScalar("categoriaId", IntegerType.INSTANCE)
.addScalar("numFolioSistema", StringType.INSTANCE)
.addScalar("claseServicioId", IntegerType.INSTANCE)
.addScalar("marcaId", IntegerType.INSTANCE)
.addScalar("origenId", IntegerType.INSTANCE)
.addScalar("destinoId", IntegerType.INSTANCE)
.addScalar("corridaId", IntegerType.INSTANCE)
.addScalar("fecCorrida", DateType.INSTANCE)
.addScalar("nombPasajero", StringType.INSTANCE)
.addScalar("precioBase", BigDecimalType.INSTANCE)
.addScalar("precioPagado", BigDecimalType.INSTANCE)
.addScalar("tipoVentaId", IntegerType.INSTANCE)
.addScalar("numSeriePreimpresa", StringType.INSTANCE)
.addScalar("numFolioPreImpreso", StringType.INSTANCE)
.addScalar("fecHorViaje", DateType.INSTANCE)
.addScalar("fecHorVenta", DateType.INSTANCE)
.addScalar("puntoVentaId", IntegerType.INSTANCE)
.addScalar("numPuntoVenta", StringType.INSTANCE)
.addScalar("numKmViaje", BigDecimalType.INSTANCE)
.addScalar("numOperacion", StringType.INSTANCE)
.addScalar("motivoCancelacionId", IntegerType.INSTANCE)
.addScalar("empresaPuntoVentaId", IntegerType.INSTANCE)
.addScalar("empresaCorridaId", IntegerType.INSTANCE)
.addScalar("turnoId", IntegerType.INSTANCE)
.addScalar("importeTaxaEmbarque", BigDecimalType.INSTANCE)
.addScalar("importePedagio", BigDecimalType.INSTANCE)
.addScalar("importeOutros", BigDecimalType.INSTANCE)
.addScalar("importeSeguro", BigDecimalType.INSTANCE)
.addScalar("rutaId", IntegerType.INSTANCE)
.addScalar("usuarioId", IntegerType.INSTANCE)
.addScalar("numAutorizacion", StringType.INSTANCE)
.addScalar("ordenSevicio", StringType.INSTANCE);
sql.setResultTransformer(new AliasToBeanResultTransformer(CajaVO.class));
for (CajaVO cv : (List<CajaVO>) sql.list()) {
if (map.containsKey(cv.getCajaId()) && map.get(cv.getCajaId()).getImporteTaxaEmbarque() != null &&
!map.get(cv.getCajaId()).getImporteTaxaEmbarque().equals(0)) {
cv.setImporteTaxaEmbarque(new BigDecimal(0));
} else {
map.put(cv.getCajaId(), cv);
}
list.add(cv);
}
return list;
}
public List<UsuarioVO> buscarCajaCerrado(Date fecha, String cveusuario, String turnoid) {
return buscarCajaCerrado(fecha, cveusuario, turnoid, false);
}
@Override
public List<UsuarioVO> buscarUsuarioCerrado(Date fecha) {
return buscarCajaCerrado(fecha, "*", "*", true);
}
private List<UsuarioVO> buscarCajaCerrado(Date fecha, String cveusuario, String turnoid, boolean sinDatosCaja) {
List<CajaCerradoVO> list = new ArrayList<CajaCerradoVO>();
HashMap<Long, CajaCerradoVO> map = new HashMap<Long, CajaCerradoVO>();
try {
String sqlBuscarUsuariosCajaCerrado = sqlBuilder.getSQLBuscarUsuariosCajaCerrado(fecha, cveusuario, turnoid);
SQLQuery sql = getSession().createSQLQuery(sqlBuscarUsuariosCajaCerrado)
.addScalar("usuarioId", IntegerType.INSTANCE)
.addScalar("cveusuario", StringType.INSTANCE)
.addScalar("puntoVentaId", IntegerType.INSTANCE)
.addScalar("numPuntoVenta", StringType.INSTANCE)
.addScalar("fecCorte", DateType.INSTANCE)
.addScalar("turnoId", IntegerType.INSTANCE)
.addScalar("importeTotal", BigDecimalType.INSTANCE);
sql.setResultTransformer(new AliasToBeanResultTransformer(UsuarioVO.class));
List<UsuarioVO> usuarios = sql.list();
if (sinDatosCaja) {
return usuarios;
}
for (UsuarioVO u : usuarios) {
String sqlBuscarCajaFecha = sqlBuilder.getSQLBuscarCajaCerrado(u.getUsuarioId(), fecha, turnoid);
sql = getSession().createSQLQuery(sqlBuscarCajaFecha)
.addScalar("cajaId", LongType.INSTANCE)
.addScalar("numFolioSistema", StringType.INSTANCE)
.addScalar("origen", StringType.INSTANCE)
.addScalar("destino", StringType.INSTANCE)
.addScalar("corridaId", IntegerType.INSTANCE)
.addScalar("precioPagado", BigDecimalType.INSTANCE)
.addScalar("fecHorVenta", DateType.INSTANCE)
.addScalar("importeTaxaEmbarque", BigDecimalType.INSTANCE)
.addScalar("ruta", StringType.INSTANCE)
.addScalar("numAutorizacion", StringType.INSTANCE)
.addScalar("ordenSevicio", StringType.INSTANCE)
.addScalar("secretaria", StringType.INSTANCE)
.addScalar("cvesecretaria", StringType.INSTANCE)
.addScalar("emissorTarjeta", StringType.INSTANCE)
.addScalar("tipoPasaje", StringType.INSTANCE)
.addScalar("formaPago", StringType.INSTANCE);
sql.setResultTransformer(new AliasToBeanResultTransformer(CajaCerradoVO.class));
for (CajaCerradoVO cv : (List<CajaCerradoVO>) sql.list()) {
if (map.containsKey(cv.getCajaId()) && map.get(cv.getCajaId()).getImporteTaxaEmbarque() != null &&
!map.get(cv.getCajaId()).getImporteTaxaEmbarque().equals(0)) {
cv.setImporteTaxaEmbarque(new BigDecimal(0));
} else {
map.put(cv.getCajaId(), cv);
}
list.add(cv);
}
u.setPasajes(list);
String sqlBuscarReceitaDespesa = sqlBuilder.getSQLBuscarReceitasDespesasCaja(u.getUsuarioId(), fecha);
sql = getSession().createSQLQuery(sqlBuscarReceitaDespesa)
.addScalar("precio", BigDecimalType.INSTANCE)
.addScalar("tipoEvento", StringType.INSTANCE);
sql.setResultTransformer(new AliasToBeanResultTransformer(ReceitaDespesaVO.class));
u.setDiversos((List<ReceitaDespesaVO>) sql.list());
}
return usuarios;
} catch (Exception e) {
log.error("", e);
return null;
}
}
@Override
@Transactional(rollbackFor={BusinessException.class,VendaEmbarcadaBoletoException.class,VendaEmbarcadaBoletoFormapagoException.class,VendaEmbarcadaCajaException.class,VendaEmbarcadaCajaFormapagoException.class})
public void gerarVendaEmbarcada(VendaEmbarcadaVO vendaEmbarcada) throws VendaEmbarcadaBoletoException, VendaEmbarcadaBoletoFormapagoException, VendaEmbarcadaCajaException, VendaEmbarcadaCajaFormapagoException {
inserirBoletoVendaEmbarcada(vendaEmbarcada);
inserirBoletoFormaPagoVendaEmbarcada(vendaEmbarcada);
inserirCajaVendaEmbarcada(vendaEmbarcada);
inserirCajaFormaPagoVendaEmbarcada(vendaEmbarcada);
}
private void inserirCajaVendaEmbarcada(VendaEmbarcadaVO vendaEmbarcada) throws VendaEmbarcadaCajaException{
try {
SQLQuery query = getSession().createSQLQuery(sqlBuilder.getSQLInserirCajaVendaEmbarcada());
vendaEmbarcada.setCajaId(obterIdCaja().longValue());
query.setLong("cajaId", vendaEmbarcada.getCajaId());
query.setString("numAsiento", vendaEmbarcada.getNumAsiento());
query.setInteger("categoriaId", vendaEmbarcada.getCategoriaId());
query.setInteger("claseServicioId", vendaEmbarcada.getClaseServicioId());
query.setInteger("marcaId",vendaEmbarcada.getMarcaId());
query.setInteger("origemId",vendaEmbarcada.getOrigemId());
query.setInteger("destinoId",vendaEmbarcada.getDestinoId());
query.setInteger("corridaId",vendaEmbarcada.getCorridaId());
query.setDate("fecCorrida",vendaEmbarcada.getFecCorrida());
query.setBigDecimal("precioBase",vendaEmbarcada.getPrecio());
query.setBigDecimal("precioPagado",vendaEmbarcada.getPrecio());
query.setInteger("tipoVentaId",vendaEmbarcada.getTipoVentaId());
query.setDate("fechorViaje",vendaEmbarcada.getFechorViaje());
query.setDate("fechorVenta",vendaEmbarcada.getFechorVenta());
query.setInteger("puntoVentaId",vendaEmbarcada.getPuntoVentaId());
query.setString("numOperacion",vendaEmbarcada.getNumOperacion());
query.setBigInteger("empresaPuntoVentaId",vendaEmbarcada.getEmpresaId());
query.setBigInteger("empresaCorridaId",vendaEmbarcada.getEmpresaId());
query.setInteger("estacionId",vendaEmbarcada.getEstacionId());
query.setInteger("usuarioId",vendaEmbarcada.getUsuarioId());
query.setBigDecimal("importeTaxaEmbarque",vendaEmbarcada.getImporteTaxaEmbarque());
query.setBigDecimal("importePedagio",vendaEmbarcada.getImportePedagio());
query.setBigDecimal("importeOutros",vendaEmbarcada.getImporteOutros());
query.setBigDecimal("importeSeguro",vendaEmbarcada.getImporteSeguro());
query.setDate("fecCreacion", vendaEmbarcada.getFechorVenta());
query.setInteger("rutaId", vendaEmbarcada.getRutaId());
query.setTimestamp("fecModIf", vendaEmbarcada.getFecModIf());
if (query.executeUpdate() != 1) {
throw new VendaEmbarcadaCajaException("Erro ao gerar caixa venda embarcada");
}
} catch (VendaEmbarcadaCajaException e) {
throw e;
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new VendaEmbarcadaCajaException(e.getMessage(), e);
}
}
private void inserirCajaFormaPagoVendaEmbarcada(VendaEmbarcadaVO vendaEmbarcada) throws VendaEmbarcadaCajaFormapagoException {
try {
SQLQuery query = getSession().createSQLQuery(sqlBuilder.getSQLInserirCajaFormaPagoVendaEmbarcada());
query.setInteger("formaPagoId", vendaEmbarcada.getFormaPagoId());
query.setLong("cajaId", vendaEmbarcada.getCajaId());
query.setBigDecimal("importe", vendaEmbarcada.getPrecio());
query.setInteger("usuarioId", vendaEmbarcada.getUsuarioId());
query.setLong("cajaFormaPagoId", obterIdCajaFormaPago().longValue());
query.setTimestamp("fecModIf", vendaEmbarcada.getFecModIf());
if (query.executeUpdate() != 1) {
throw new VendaEmbarcadaCajaFormapagoException("Erro ao gerar forma de pagamento do caixa venda embarcada");
}
} catch (VendaEmbarcadaCajaFormapagoException e) {
throw e;
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new VendaEmbarcadaCajaFormapagoException(e.getMessage(), e);
}
}
private void inserirBoletoVendaEmbarcada(VendaEmbarcadaVO vendaEmbarcada) throws VendaEmbarcadaBoletoException {
try {
SQLQuery query = getSession().createSQLQuery(sqlBuilder.getSQLInserirBoletoVendaEmbarcada());
vendaEmbarcada.setBoletoId(obterIdBoleto().longValue());
vendaEmbarcada.setNumOperacion(obterNumOperacion().toString());
query.setBigInteger("empresaCorridaId", vendaEmbarcada.getEmpresaId());
query.setInteger("destinoId", vendaEmbarcada.getDestinoId());
query.setInteger("tipoVentaId",vendaEmbarcada.getTipoVentaId());
query.setInteger("categoriaId",vendaEmbarcada.getCategoriaId());
query.setInteger("corridaId", vendaEmbarcada.getCorridaId());
query.setInteger("claseServicioId", vendaEmbarcada.getClaseServicioId());
query.setDate("fecCorrida", vendaEmbarcada.getFecCorrida());
query.setInteger("puntoVentaId", vendaEmbarcada.getPuntoVentaId());
query.setBigInteger("empresaPuntoVentaId", vendaEmbarcada.getEmpresaId());
query.setInteger("origemId", vendaEmbarcada.getOrigemId());
query.setInteger("marcaId", vendaEmbarcada.getMarcaId());
query.setString("numAsiento", vendaEmbarcada.getNumAsiento());
query.setBigDecimal("precioPagado", vendaEmbarcada.getPrecio());
query.setDate("fechorViaje", vendaEmbarcada.getFechorViaje());
query.setDate("fechorVenta", vendaEmbarcada.getFechorVenta());
query.setString("numOperacion", vendaEmbarcada.getNumOperacion());
query.setInteger("usuarioId",vendaEmbarcada.getUsuarioId());
query.setBigDecimal("precioBase", vendaEmbarcada.getPrecio());
query.setInteger("estacionId", vendaEmbarcada.getEstacionId());
query.setBigDecimal("importeTaxaEmbarque", vendaEmbarcada.getImporteTaxaEmbarque());
query.setBigDecimal("importePedagio", vendaEmbarcada.getImportePedagio());
query.setBigDecimal("importeOutros", vendaEmbarcada.getImporteOutros());
query.setBigDecimal("importeSeguro", vendaEmbarcada.getImporteSeguro());
query.setInteger("rutaId", vendaEmbarcada.getRutaId());
query.setLong("boletoId", vendaEmbarcada.getBoletoId());
query.setTimestamp("fecModIf", vendaEmbarcada.getFecModIf());
query.setBigDecimal("precioPricing", vendaEmbarcada.getPrecio());
query.setString("numFolioPreimpresso", vendaEmbarcada.getNumFolioPreimpresso());
query.setString("serieImpFiscal", vendaEmbarcada.getSerieImpFiscal());
if (query.executeUpdate() != 1) {
throw new VendaEmbarcadaBoletoException("Erro ao gerar boleto venda embarcada");
}
} catch (VendaEmbarcadaBoletoException e) {
throw e;
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new VendaEmbarcadaBoletoException(e.getMessage(), e);
}
}
private void inserirBoletoFormaPagoVendaEmbarcada(VendaEmbarcadaVO vendaEmbarcada) throws VendaEmbarcadaBoletoFormapagoException{
try {
SQLQuery query = getSession().createSQLQuery(sqlBuilder.getSQLInserirBoletoFormaPagoVendaEmbarcada());
query.setInteger("formaPagoId", vendaEmbarcada.getFormaPagoId());
query.setLong("boletoId", vendaEmbarcada.getBoletoId());
query.setBigDecimal("importe", vendaEmbarcada.getPrecio());
query.setTimestamp("fecModIf", vendaEmbarcada.getFecModIf());
query.setInteger("usuarioId", vendaEmbarcada.getUsuarioId());
query.setBigDecimal("boletoFormaPagoId", obterIdBoletoFormaPago());
if (query.executeUpdate() != 1) {
throw new VendaEmbarcadaBoletoFormapagoException("Erro ao gerar forma de pagamento do boleto venda embarcada");
}
} catch (VendaEmbarcadaBoletoFormapagoException e) {
throw e;
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new VendaEmbarcadaBoletoFormapagoException(e.getMessage(), e);
}
}
private BigDecimal obterIdBoletoFormaPago(){
SQLQuery sql = getSession().createSQLQuery(sqlBuilder.getSQLObterSequenceBoletoFormaPago());
return gerarChave((BigDecimal)sql.uniqueResult());
}
private BigDecimal obterIdCajaFormaPago(){
SQLQuery sql = getSession().createSQLQuery(sqlBuilder.getSQLObterSequenceCajaFormaPago());
return gerarChave((BigDecimal)sql.uniqueResult());
}
private BigDecimal obterIdBoleto(){
SQLQuery sql = getSession().createSQLQuery(sqlBuilder.getSQLObterSequenceCajaFormaPago());
return gerarChave((BigDecimal)sql.uniqueResult());
}
private BigDecimal obterIdCaja(){
SQLQuery sql = getSession().createSQLQuery(sqlBuilder.getSQLObterSequenceCaja());
return gerarChave((BigDecimal)sql.uniqueResult());
}
private BigDecimal obterNumOperacion(){
SQLQuery sql = getSession().createSQLQuery(sqlBuilder.getSQLObterSequenciaNumOperacion());
return gerarChave((BigDecimal)sql.uniqueResult());
}
private BigDecimal gerarChave(BigDecimal seq){
Integer tamChave = 13;
String chave = "1";
--tamChave;
while ((seq.toString().length() + chave.length()) <= (tamChave)){
chave += "0";
}
return new BigDecimal(chave += seq);
}
}