diff --git a/src/com/rjconsultores/ventaboletos/dao/hibernate/BusquedaDatosTicketHibernateDAO.java b/src/com/rjconsultores/ventaboletos/dao/hibernate/BusquedaDatosTicketHibernateDAO.java index eadd02e4e..d2faf0d5c 100644 --- a/src/com/rjconsultores/ventaboletos/dao/hibernate/BusquedaDatosTicketHibernateDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/hibernate/BusquedaDatosTicketHibernateDAO.java @@ -1,11 +1,15 @@ 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 java.util.Map; import org.hibernate.SQLQuery; import org.hibernate.SessionFactory; +import org.hibernate.transform.Transformers; import org.hibernate.type.BigDecimalType; import org.hibernate.type.BooleanType; import org.hibernate.type.DateType; @@ -22,10 +26,13 @@ import com.rjconsultores.ventaboletos.dao.BusquedaDatosTicketDAO; import com.rjconsultores.ventaboletos.entidad.Pacote; import com.rjconsultores.ventaboletos.enums.SituacaoVendaPacote; import com.rjconsultores.ventaboletos.enums.TipoFormapago; +import com.rjconsultores.ventaboletos.utilerias.OcdUtil; import com.rjconsultores.ventaboletos.vo.busquedapacotes.ClientePacoteVO; import com.rjconsultores.ventaboletos.vo.busquedapacotes.DadosBancarioVO; import com.rjconsultores.ventaboletos.vo.busquedapacotes.EnderecoApanheVO; import com.rjconsultores.ventaboletos.vo.busquedapacotes.ItemAdicionalVO; +import com.rjconsultores.ventaboletos.vo.busquedapacotes.NotaCreditoVendaPacoteVO; +import com.rjconsultores.ventaboletos.vo.busquedapacotes.OcdPacoteVO; import com.rjconsultores.ventaboletos.vo.busquedapacotes.PacoteVO; import com.rjconsultores.ventaboletos.vo.busquedapacotes.PagamentoVO; import com.rjconsultores.ventaboletos.vo.busquedapacotes.PassageiroVO; @@ -34,10 +41,10 @@ import com.rjconsultores.ventaboletos.vo.busquedapacotes.transformer.DatosClient import com.rjconsultores.ventaboletos.vo.busquedapacotes.transformer.DatosDadosBancarioResultTransformer; import com.rjconsultores.ventaboletos.vo.busquedapacotes.transformer.DatosEnderecoApanheResultTransformer; import com.rjconsultores.ventaboletos.vo.busquedapacotes.transformer.DatosItemAdicionalResultTransformer; -import com.rjconsultores.ventaboletos.vo.busquedapacotes.transformer.DatosPagamentoResultTransformer; import com.rjconsultores.ventaboletos.vo.busquedapacotes.transformer.DatosPassageiroResultTransformer; import com.rjconsultores.ventaboletos.vo.busquedapacotes.transformer.DatosServicoResultTransformer; import com.rjconsultores.ventaboletos.vo.busquedapacotes.transformer.DatosTicketResultTransformer; +import com.rjconsultores.ventaboletos.vo.caja.PagamentoCartaoVO; @Repository("busquedaDatosTicketDAO") public class BusquedaDatosTicketHibernateDAO extends GenericHibernateDAO implements BusquedaDatosTicketDAO { @@ -52,9 +59,9 @@ public class BusquedaDatosTicketHibernateDAO extends GenericHibernateDAO buscaDatosTickets(Date fecInicial, Date fecFinal, Date fecVentaInicial, Date fecVentaFinal, Date fecAlteracaoInicial, Date fecAlteracaoFinal) { List pacotes = new ArrayList(); - try { pacotes = carregarDadosPacotes(fecInicial, fecFinal, fecVentaInicial, fecVentaFinal, fecAlteracaoInicial, fecAlteracaoFinal); + if(!pacotes.isEmpty()) { carregarDadosPagamento(pacotes, fecInicial, fecFinal, fecVentaInicial, fecVentaFinal, fecAlteracaoInicial, fecAlteracaoFinal); carregarDadosServico(pacotes, fecInicial, fecFinal, fecVentaInicial, fecVentaFinal, fecAlteracaoInicial, fecAlteracaoFinal); @@ -68,10 +75,20 @@ public class BusquedaDatosTicketHibernateDAO extends GenericHibernateDAO getPacotesFiltradosReserva(List pacotes){ + List retorno = new ArrayList(); + for(PacoteVO p : pacotes){ + if(p.getFormaspagamento() != null && !p.getFormaspagamento().isEmpty()){ + retorno.add(p); + } + } + return retorno; + } + @SuppressWarnings("unchecked") private List carregarDadosPacotes(Date fecInicial, Date fecFinal, Date fecVentaInicial, Date fecVentaFinal, Date fecAlteracaoInicial, Date fecAlteracaoFinal) { StringBuilder sQuery = new StringBuilder(); @@ -135,47 +152,63 @@ public class BusquedaDatosTicketHibernateDAO extends GenericHibernateDAO pacotes, Date fecInicial, Date fecFinal, Date fecVentaInicial, Date fecVentaFinal, Date fecAlteracaoInicial, Date fecAlteracaoFinal) { StringBuilder sQuery = new StringBuilder(); - sQuery.append("SELECT PFP.PACOTEFORMAPAGO_ID, PFP.VALOR, PFP.VENDAPACOTE_ID, FP.FORMAPAGO_ID, FP.DESCPAGO, CT.TIPOTARJETA, CT.NUMAUTORIZACION, CT.CANTPARCELAS, ") - .append("NC.NOTACREDITOVENDAPACOTE_ID, VPC.NUMOPERACION AS NUMOPERACAOPACOTECANCELAMENTO, CT.NOMBTITULAR, CT.FECOPERACION, CT.NUMTARJETA, CT.DESCOPERADORACARTAO, ") - .append("FP.TIPO_PAGO, CDP.CAJADIVERSOSPAGO_ID, OCD.OCD_ID, OCD.NUMOPERACION AS NUMOPERACION_OCD ") - .append("FROM PACOTE_FORMAPAGO PFP ") - .append("JOIN FORMA_PAGO FP ON FP.FORMAPAGO_ID = PFP.FORMAPAGO_ID ") - .append("LEFT JOIN CAJA_DIVERSOS CD ON CD.VENDAPACOTE_ID = PFP.VENDAPACOTE_ID ") - .append("LEFT JOIN CAJA_DIVERSOS_PAGO CDP ON CDP.CAJADIVERSOS_ID = CD.CAJADIVERSOS_ID ") - .append("LEFT JOIN CAJA_TARJETA CT ON CT.CAJATARJETA_ID = CDP.CAJATARJETA_ID ") - .append("LEFT JOIN NOTA_CREDITO_VENDA_PACOTE NC ON NC.NOTACREDITOVENDAPACOTE_ID = PFP.NOTACREDITOVENDAPACOTE_ID ") - .append("LEFT JOIN OCD OCD ON OCD.OCD_ID = PFP.OCD_ID ") - .append("LEFT JOIN VENDA_PACOTE VPC ON NC.VENDAPACOTECANCELAMENTO_ID = VPC.VENDAPACOTE_ID ") - .append("LEFT JOIN VENDA_PACOTE VP ON VP.VENDAPACOTE_ID = PFP.VENDAPACOTE_ID ") - .append("WHERE 1=1 "); + sQuery.append("SELECT "); + sQuery.append("PFP.PACOTEFORMAPAGO_ID,"); + sQuery.append("PFP.VALOR,"); + sQuery.append("PFP.VENDAPACOTE_ID,"); + sQuery.append("FP.FORMAPAGO_ID,"); + sQuery.append("FP.DESCPAGO,"); + sQuery.append("NC.NOTACREDITOVENDAPACOTE_ID,"); + sQuery.append("VPC.NUMOPERACION AS NUMOPERACAOPACOTECANCELAMENTO,"); + sQuery.append("FP.TIPO_PAGO,"); + sQuery.append("OCD.OCD_ID,"); + sQuery.append("OCD.NUMOPERACION AS NUMOPERACION_OCD,"); + sQuery.append("CD.CAJADIVERSOS_ID "); + + sQuery.append("FROM PACOTE_FORMAPAGO PFP "); + sQuery.append("JOIN FORMA_PAGO FP ON FP.FORMAPAGO_ID = PFP.FORMAPAGO_ID "); + sQuery.append("LEFT JOIN VENDA_PACOTE VP ON VP.VENDAPACOTE_ID = PFP.VENDAPACOTE_ID "); + sQuery.append("LEFT JOIN NOTA_CREDITO_VENDA_PACOTE NC ON NC.NOTACREDITOVENDAPACOTE_ID = PFP.NOTACREDITOVENDAPACOTE_ID "); + sQuery.append("LEFT JOIN VENDA_PACOTE VPC ON NC.VENDAPACOTECANCELAMENTO_ID = VPC.VENDAPACOTE_ID "); + sQuery.append("LEFT JOIN OCD OCD ON OCD.OCD_ID = PFP.OCD_ID "); + sQuery.append("INNER JOIN CAJA_DIVERSOS CD ON CD.VENDAPACOTE_ID = PFP.VENDAPACOTE_ID "); + + sQuery.append("WHERE 1=1"); adicionarFiltros(sQuery, fecInicial, fecFinal, fecVentaInicial, fecVentaFinal, fecAlteracaoInicial, fecAlteracaoFinal); - sQuery.append("ORDER BY VP.VENDAPACOTE_ID"); + sQuery.append("ORDER BY VP.VENDAPACOTE_ID, PFP.PACOTEFORMAPAGO_ID"); SQLQuery query = getSession().createSQLQuery(sQuery.toString()) - .addScalar("CAJADIVERSOSPAGO_ID", LongType.INSTANCE) - .addScalar("VALOR", BigDecimalType.INSTANCE) - .addScalar("VENDAPACOTE_ID", LongType.INSTANCE) - .addScalar("FORMAPAGO_ID", IntegerType.INSTANCE) - .addScalar("DESCPAGO", StringType.INSTANCE) - .addScalar("TIPOTARJETA", StringType.INSTANCE) - .addScalar("NUMAUTORIZACION", StringType.INSTANCE) - .addScalar("CANTPARCELAS", IntegerType.INSTANCE) - .addScalar("NOTACREDITOVENDAPACOTE_ID", LongType.INSTANCE) - .addScalar("NUMOPERACAOPACOTECANCELAMENTO", StringType.INSTANCE) - .addScalar("NOMBTITULAR", StringType.INSTANCE) - .addScalar("FECOPERACION", DateType.INSTANCE) - .addScalar("NUMTARJETA", StringType.INSTANCE) - .addScalar("DESCOPERADORACARTAO", StringType.INSTANCE) - .addScalar("TIPO_PAGO", IntegerType.INSTANCE) - .addScalar("OCD_ID", LongType.INSTANCE) - .addScalar("NUMOPERACION_OCD", StringType.INSTANCE); + .addScalar("VALOR", BigDecimalType.INSTANCE) + .addScalar("VENDAPACOTE_ID", LongType.INSTANCE) + .addScalar("FORMAPAGO_ID", IntegerType.INSTANCE) + .addScalar("DESCPAGO", StringType.INSTANCE) + .addScalar("NOTACREDITOVENDAPACOTE_ID", LongType.INSTANCE) + .addScalar("NUMOPERACAOPACOTECANCELAMENTO", StringType.INSTANCE) + .addScalar("TIPO_PAGO", IntegerType.INSTANCE) + .addScalar("OCD_ID", LongType.INSTANCE) + .addScalar("NUMOPERACION_OCD", StringType.INSTANCE) + .addScalar("CAJADIVERSOS_ID", LongType.INSTANCE); - query.setResultTransformer(new DatosPagamentoResultTransformer()); + query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); adicionarFiltros(query, fecInicial, fecFinal, fecVentaInicial, fecVentaFinal, fecAlteracaoInicial, fecAlteracaoFinal); - List pagamentos = query.list(); + HashMap>> resultGroupedByCajaDiversos = new HashMap>>(); + + for(HashMap h : (List>) query.list()){ + Long cajaDiversosId = (Long)h.get("CAJADIVERSOS_ID"); + if(!resultGroupedByCajaDiversos.containsKey(cajaDiversosId)){ + List> list = new ArrayList>(); + list.add(h); + resultGroupedByCajaDiversos.put(cajaDiversosId, list); + }else{ + resultGroupedByCajaDiversos.get(cajaDiversosId).add(h); + } + } + + List pagamentos = getResult(resultGroupedByCajaDiversos); + for (PacoteVO pacote : pacotes) { int flag = -1; for (PagamentoVO pagamento : pagamentos) { @@ -198,8 +231,126 @@ public class BusquedaDatosTicketHibernateDAO extends GenericHibernateDAO getResult(HashMap>> firstResult) { + + StringBuilder sQuery = new StringBuilder(); + + sQuery.append("SELECT CDP.CAJADIVERSOSPAGO_ID, "); + sQuery.append("CT.TIPOTARJETA, "); + sQuery.append("CT.NUMAUTORIZACION, "); + sQuery.append("CT.CANTPARCELAS, "); + sQuery.append("CT.NOMBTITULAR, "); + sQuery.append("CT.FECOPERACION, "); + sQuery.append("CT.NUMTARJETA, "); + sQuery.append("CT.DESCOPERADORACARTAO, "); + sQuery.append("CDP.CAJADIVERSOS_ID "); + sQuery.append("FROM CAJA_DIVERSOS_PAGO CDP "); + sQuery.append("LEFT JOIN CAJA_TARJETA CT ON CT.CAJATARJETA_ID = CDP.CAJATARJETA_ID "); + sQuery.append("WHERE CDP.CAJADIVERSOS_ID IN (:cajaDiversosId) "); + sQuery.append("ORDER BY CDP.CAJADIVERSOS_ID, CDP.CAJADIVERSOSPAGO_ID "); + + SQLQuery query = getSession().createSQLQuery(sQuery.toString()) + .addScalar("CAJADIVERSOSPAGO_ID", LongType.INSTANCE) + .addScalar("TIPOTARJETA", StringType.INSTANCE) + .addScalar("NUMAUTORIZACION", StringType.INSTANCE) + .addScalar("CANTPARCELAS", IntegerType.INSTANCE) + .addScalar("NOMBTITULAR", StringType.INSTANCE) + .addScalar("FECOPERACION", DateType.INSTANCE) + .addScalar("NUMTARJETA", StringType.INSTANCE) + .addScalar("DESCOPERADORACARTAO", StringType.INSTANCE) + .addScalar("CAJADIVERSOS_ID", LongType.INSTANCE); + + query.setParameterList("cajaDiversosId", firstResult.keySet()); + + query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); + + List> secondResult = query.list(); + int count = 0; + + for (Long cajaDiversosId : firstResult.keySet()) { + count = 0; + for (HashMap s : secondResult) { + if (cajaDiversosId.equals(s.get("CAJADIVERSOS_ID"))) { + firstResult.get(cajaDiversosId).get(count).putAll(s); + count++; + } } } + + List pagamentos = new ArrayList(); + List> dadosExtraidos = new ArrayList>(); + + for (Long cajaDiversosId : firstResult.keySet()) { + dadosExtraidos.addAll(firstResult.get(cajaDiversosId)); + } + + for (HashMap m : dadosExtraidos) { + PagamentoVO pagamento = new PagamentoVO(); + setDatosPacote(pagamento, m); + pagamentos.add(pagamento); + } + + return pagamentos; + } + + private void setDatosPacote(PagamentoVO pagamento, Map tupleMap) { + pagamento.setMoeda("R$"); + pagamento.setVendapacoteId((Long) tupleMap.get("VENDAPACOTE_ID")); + pagamento.setFormapagoId((Integer) tupleMap.get("FORMAPAGO_ID")); + pagamento.setFormapagamento((String) tupleMap.get("DESCPAGO")); + pagamento.setValor((BigDecimal) tupleMap.get("VALOR")); + + Integer tipoPago = (Integer) tupleMap.get("TIPO_PAGO"); + pagamento.setTipoFormapago(TipoFormapago.getTipoFormapagoByValor(tipoPago)); + + if (isVentaCartaoCredito(pagamento.getTipoFormapago()) || isVentaCartaoDebito(pagamento.getTipoFormapago())) { + PagamentoCartaoVO cartao = new PagamentoCartaoVO(); + cartao.setBandeira((String) tupleMap.get("TIPOTARJETA")); + cartao.setNumautorizacao((String) tupleMap.get("NUMAUTORIZACION")); + cartao.setParcelas((Integer) tupleMap.get("CANTPARCELAS")); + cartao.setTitular((String) tupleMap.get("NOMBTITULAR")); + cartao.setDatapagamento((Date) tupleMap.get("FECOPERACION")); + cartao.setNumcartao((String) tupleMap.get("NUMTARJETA")); + cartao.setNumcartao((String) tupleMap.get("NUMTARJETA")); + cartao.setOperadoracartao((String) tupleMap.get("DESCOPERADORACARTAO")); + + pagamento.setCartao(cartao); + } + + if (isVentaNotaCredito(pagamento.getTipoFormapago())) { + if (tupleMap.get("NOTACREDITOVENDAPACOTE_ID") != null) { + NotaCreditoVendaPacoteVO notacredito = new NotaCreditoVendaPacoteVO(); + notacredito.setVouchernotacredito(((Long) tupleMap.get("NOTACREDITOVENDAPACOTE_ID")).toString()); + notacredito.setNumoperacaopacotecancelamento((String) tupleMap.get("NUMOPERACAOPACOTECANCELAMENTO")); + pagamento.setNotacredito(notacredito); + } + + if (tupleMap.get("OCD_ID") != null) { + String voucherocd = OcdUtil.generaLocalizadorOCD((String) tupleMap.get("NUMOPERACION_OCD"), (Long) tupleMap.get("OCD_ID")); + OcdPacoteVO ocdPacote = new OcdPacoteVO(); + ocdPacote.setVoucherocd(voucherocd); + pagamento.setOcd(ocdPacote); + } + } + + } + + private boolean isVentaCartaoCredito(TipoFormapago tipoFormapago) { + return TipoFormapago.CREDITO.equals(tipoFormapago); + } + + private boolean isVentaCartaoDebito(TipoFormapago tipoFormapago) { + return TipoFormapago.DEBITO.equals(tipoFormapago); + } + + private boolean isVentaNotaCredito(TipoFormapago tipoFormapago) { + return TipoFormapago.NOTA_CREDITO.equals(tipoFormapago); } /**