diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDevolucaoBilhetes.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDevolucaoBilhetes.java index b6574a0e2..116e7a20f 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDevolucaoBilhetes.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDevolucaoBilhetes.java @@ -3,6 +3,7 @@ package com.rjconsultores.ventaboletos.relatorios.impl; import java.math.BigDecimal; import java.sql.Connection; import java.sql.ResultSet; +import java.sql.SQLException; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -19,8 +20,11 @@ import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; import com.rjconsultores.ventaboletos.utilerias.DateUtil; import com.rjconsultores.ventaboletos.utilerias.MoneyHelper; import com.rjconsultores.ventaboletos.utilerias.UtiliteriasFiscal; +import com.rjconsultores.ventaboletos.utilerias.exportacao.bpe.ExportacaoBPEVo.TipoComp; +import com.rjconsultores.ventaboletos.utilerias.exportacao.bpe.xml.BPeUtil; import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement; +import br.inf.portalfiscal.bpe.TBPe; import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; public class RelatorioDevolucaoBilhetes extends Relatorio { @@ -47,6 +51,7 @@ public class RelatorioDevolucaoBilhetes extends Relatorio { Date dataDevolucaoFinal = parametros.get("dataDevolucaoFinal") == null ? null : (Date) parametros.get("dataDevolucaoFinal"); Boolean isApenasBilhetesImpressos = parametros.get("isApenasBilhetesImpressos") == null ? Boolean.FALSE : Boolean.valueOf(parametros.get("isApenasBilhetesImpressos").toString()); Boolean isBpe = (Boolean) parametros.get("isBpe"); + Boolean isNoXML = (Boolean) parametros.get("isConsultaOtimizada"); String puntoVentas = null; for (PuntoVenta pv : lsPuntoVenta) { @@ -67,11 +72,16 @@ public class RelatorioDevolucaoBilhetes extends Relatorio { } String sql = null; - if (isBpe) - sql = getSqlBpe(empresaId, puntoVentas, estados, dataVendaInicial, dataVendaFinal, dataDevolucaoInicial, dataDevolucaoFinal, isApenasBilhetesImpressos); - else - sql = getSql(empresaId, puntoVentas, estados, dataVendaInicial, dataVendaFinal, dataDevolucaoInicial, dataDevolucaoFinal, isApenasBilhetesImpressos); + if (isBpe) { + if (isNoXML) { + sql = getSqlBpeNoXml(empresaId, puntoVentas, estados, dataVendaInicial, dataVendaFinal, dataDevolucaoInicial, dataDevolucaoFinal, isApenasBilhetesImpressos); + } else { + sql = getSqlBpeXml(empresaId, puntoVentas, estados, dataVendaInicial, dataVendaFinal, dataDevolucaoInicial, dataDevolucaoFinal, isApenasBilhetesImpressos); + } + } else { + sql = getSql(empresaId, puntoVentas, estados, dataVendaInicial, dataVendaFinal, dataDevolucaoInicial, dataDevolucaoFinal, isApenasBilhetesImpressos); + } log.info("Devolucao Bilhetes: " + sql); NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql); @@ -138,104 +148,7 @@ public class RelatorioDevolucaoBilhetes extends Relatorio { db.setPorcEstadual(rset.getBigDecimal("PORC_ESTADUAL")); if (isBpe) { - db.setChbpe(rset.getString("CHBPE")); - db.setChbpeSubstituicao(rset.getString("CHBPE_SUBSTITUICAO")); - db.setCmunini(rset.getString("CMUNINI")); - db.setCmunfim(rset.getString("CMUNFIM")); - db.setUfini(rset.getString("UFINI")); - db.setUffim(rset.getString("UFFIM")); - db.setNbp(rset.getString("NBP")); - db.setDhemb(rset.getString("DHEMB")); - db.setCst00(rset.getString("CST00")); - db.setCst20(rset.getString("CST20")); - db.setCst45(rset.getString("CST45")); - db.setCst90(rset.getString("CST90")); - db.setCstoutrauf(rset.getString("CSTOUTRAUF")); - db.setCstsn(rset.getString("CSTSN")); - db.setVbc00(rset.getString("VBC00")); - db.setPicms00(rset.getString("PICMS00")); - db.setVicms00(rset.getString("VICMS00")); - db.setVbc20(rset.getString("VBC20")); - db.setPicms20(rset.getString("PICMS20")); - db.setVicms20(rset.getString("VICMS20")); - db.setVbp(rset.getString("VBP")); - db.setVdesconto(rset.getString("VDESCONTO")); - db.setVpgto(rset.getString("VPGTO")); - db.setTpcomp01(rset.getString("TPCOMP01")); - db.setTpcomp02(rset.getString("TPCOMP02")); - db.setTpcomp03(rset.getString("TPCOMP03")); - db.setTpcomp04(rset.getString("TPCOMP04")); - db.setTpcomp05(rset.getString("TPCOMP05")); - db.setTpcomp06(rset.getString("TPCOMP06")); - db.setTpcomp99(rset.getString("TPCOMP99")); - db.setVcomp01(rset.getString("VCOMP01")); - db.setVcomp02(rset.getString("VCOMP02")); - db.setVcomp03(rset.getString("VCOMP03")); - db.setVcomp04(rset.getString("VCOMP04")); - db.setVcomp05(rset.getString("VCOMP05")); - db.setVcomp06(rset.getString("VCOMP06")); - db.setVcomp99(rset.getString("VCOMP99")); - db.setpRedBC(rset.getString("PREDBC")); - - String estadoOrigem = db.getUfini(); - String estadoDestino = db.getUffim(); - - boolean isInterEstadual = !estadoOrigem.equals(estadoDestino); - - String vBC = null; - String pICMS = null; - String vICMS = null; - String pRedBC = null; - - if (StringUtils.isNotBlank(db.getPicms00())) { - vBC = db.getVbc00(); - pICMS = db.getPicms00(); - vICMS = db.getVicms00(); - } else if (StringUtils.isNotBlank(db.getPicms20())) { - vBC = db.getVbc20(); - pICMS = db.getPicms20(); - vICMS = db.getVicms20(); - pRedBC = db.getpRedBC(); - } - - String vPgto = db.getVpgto(); - BigDecimal valorContabil = new BigDecimal(vPgto == null ? "0.0" : vPgto); - db.setValorContabil(valorContabil); - - BigDecimal valorIsenta = BigDecimal.ZERO; - valorIsenta = valorIsenta.add(isInterEstadual && !db.getIndPedadioEstdual() ? new BigDecimal(db.getVcomp02() == null ? "0.0" : db.getVcomp02()) : BigDecimal.ZERO); - valorIsenta = valorIsenta.add(!isInterEstadual && !db.getIndPedagioMunicipal() ? new BigDecimal(db.getVcomp02() == null ? "0.0" : db.getVcomp02()) : BigDecimal.ZERO); - - valorIsenta = valorIsenta.add(isInterEstadual && !db.getIndTxEmbarqueEstadual() ? new BigDecimal(db.getVcomp03() == null ? "0.0" : db.getVcomp03()) : BigDecimal.ZERO); - valorIsenta = valorIsenta.add(!isInterEstadual && !db.getIndTxEmbarqueMunicipal() ? new BigDecimal(db.getVcomp03() == null ? "0.0" : db.getVcomp03()) : BigDecimal.ZERO); - - valorIsenta = valorIsenta.add(isInterEstadual && !db.getIndSeguroEstadual() ? new BigDecimal(db.getVcomp04() == null ? "0.0" : db.getVcomp04()) : BigDecimal.ZERO); - valorIsenta = valorIsenta.add(!isInterEstadual && !db.getIndSeguroMunicipal() ? new BigDecimal(db.getVcomp04() == null ? "0.0" : db.getVcomp04()) : BigDecimal.ZERO); - - BigDecimal baseCalculoICMS = new BigDecimal(vBC == null ? "0.0" : vBC); - db.setBaseCalculoIcms(baseCalculoICMS); - - BigDecimal icms = new BigDecimal(pICMS == null ? "0.0" : pICMS); - db.setAliquota(icms); - BigDecimal valorIcms = new BigDecimal(vICMS == null ? "0.0" : vICMS); - db.setValorIcms(valorIcms); - - BigDecimal outras = new BigDecimal(pRedBC == null ? "0.0" : pRedBC); - if (pRedBC != null) { - outras = MoneyHelper.subtrair(valorContabil, baseCalculoICMS); - outras = MoneyHelper.subtrair(outras, valorIsenta); - } - - db.setValorOutras(outras); - db.setValorIsenta(valorIsenta); - db.setEstornoEstadual(BigDecimal.ZERO); - db.setEstornoMunicipal(BigDecimal.ZERO); - - if (isInterEstadual) { - db.setEstornoEstadual(valorContabil); - } else { - db.setEstornoMunicipal(valorContabil); - } + bpeResultSet(rset, db, isNoXML); } else { @@ -286,6 +199,201 @@ public class RelatorioDevolucaoBilhetes extends Relatorio { } + private void bpeResultSet(ResultSet rset, DevolucaoBilhetes db, boolean isNoXML) throws SQLException { + + if (isNoXML) { + db.setChbpe(rset.getString("CHBPE")); + db.setChbpeSubstituicao(rset.getString("CHBPE_SUBSTITUICAO")); + db.setCmunini(rset.getString("CMUNINI")); + db.setCmunfim(rset.getString("CMUNFIM")); + db.setUfini(rset.getString("UFINI")); + db.setUffim(rset.getString("UFFIM")); + db.setNbp(rset.getString("NBP")); + db.setDhemb(rset.getString("DHEMB")); + db.setCst00(rset.getString("CST00")); + db.setCst20(rset.getString("CST20")); + db.setCst45(rset.getString("CST45")); + db.setCst90(rset.getString("CST90")); + db.setCstoutrauf(rset.getString("CSTOUTRAUF")); + db.setCstsn(rset.getString("CSTSN")); + db.setVbc00(rset.getString("VBC00")); + db.setPicms00(rset.getString("PICMS00")); + db.setVicms00(rset.getString("VICMS00")); + db.setVbc20(rset.getString("VBC20")); + db.setPicms20(rset.getString("PICMS20")); + db.setVicms20(rset.getString("VICMS20")); + db.setVbp(rset.getString("VBP")); + db.setVdesconto(rset.getString("VDESCONTO")); + db.setVpgto(rset.getString("VPGTO")); + db.setTpcomp01(rset.getString("TPCOMP01")); + db.setTpcomp02(rset.getString("TPCOMP02")); + db.setTpcomp03(rset.getString("TPCOMP03")); + db.setTpcomp04(rset.getString("TPCOMP04")); + db.setTpcomp05(rset.getString("TPCOMP05")); + db.setTpcomp06(rset.getString("TPCOMP06")); + db.setTpcomp99(rset.getString("TPCOMP99")); + db.setVcomp01(rset.getString("VCOMP01")); + db.setVcomp02(rset.getString("VCOMP02")); + db.setVcomp03(rset.getString("VCOMP03")); + db.setVcomp04(rset.getString("VCOMP04")); + db.setVcomp05(rset.getString("VCOMP05")); + db.setVcomp06(rset.getString("VCOMP06")); + db.setVcomp99(rset.getString("VCOMP99")); + db.setpRedBC(rset.getString("PREDBC")); + + String estadoOrigem = db.getUfini(); + String estadoDestino = db.getUffim(); + + boolean isInterEstadual = !estadoOrigem.equals(estadoDestino); + + String vBC = null; + String pICMS = null; + String vICMS = null; + String pRedBC = null; + + if (StringUtils.isNotBlank(db.getPicms00())) { + vBC = db.getVbc00(); + pICMS = db.getPicms00(); + vICMS = db.getVicms00(); + } else if (StringUtils.isNotBlank(db.getPicms20())) { + vBC = db.getVbc20(); + pICMS = db.getPicms20(); + vICMS = db.getVicms20(); + pRedBC = db.getpRedBC(); + } + + String vPgto = db.getVpgto(); + BigDecimal valorContabil = new BigDecimal(vPgto == null ? "0.0" : vPgto); + db.setValorContabil(valorContabil); + + BigDecimal valorIsenta = BigDecimal.ZERO; + valorIsenta = valorIsenta.add(isInterEstadual && !db.getIndPedadioEstdual() ? new BigDecimal(db.getVcomp02() == null ? "0.0" : db.getVcomp02()) : BigDecimal.ZERO); + valorIsenta = valorIsenta.add(!isInterEstadual && !db.getIndPedagioMunicipal() ? new BigDecimal(db.getVcomp02() == null ? "0.0" : db.getVcomp02()) : BigDecimal.ZERO); + + valorIsenta = valorIsenta.add(isInterEstadual && !db.getIndTxEmbarqueEstadual() ? new BigDecimal(db.getVcomp03() == null ? "0.0" : db.getVcomp03()) : BigDecimal.ZERO); + valorIsenta = valorIsenta.add(!isInterEstadual && !db.getIndTxEmbarqueMunicipal() ? new BigDecimal(db.getVcomp03() == null ? "0.0" : db.getVcomp03()) : BigDecimal.ZERO); + + valorIsenta = valorIsenta.add(isInterEstadual && !db.getIndSeguroEstadual() ? new BigDecimal(db.getVcomp04() == null ? "0.0" : db.getVcomp04()) : BigDecimal.ZERO); + valorIsenta = valorIsenta.add(!isInterEstadual && !db.getIndSeguroMunicipal() ? new BigDecimal(db.getVcomp04() == null ? "0.0" : db.getVcomp04()) : BigDecimal.ZERO); + + BigDecimal baseCalculoICMS = new BigDecimal(vBC == null ? "0.0" : vBC); + db.setBaseCalculoIcms(baseCalculoICMS); + + BigDecimal icms = new BigDecimal(pICMS == null ? "0.0" : pICMS); + db.setAliquota(icms); + BigDecimal valorIcms = new BigDecimal(vICMS == null ? "0.0" : vICMS); + db.setValorIcms(valorIcms); + + BigDecimal outras = new BigDecimal(pRedBC == null ? "0.0" : pRedBC); + if (pRedBC != null) { + outras = MoneyHelper.subtrair(valorContabil, baseCalculoICMS); + outras = MoneyHelper.subtrair(outras, valorIsenta); + } + + db.setValorOutras(outras); + db.setValorIsenta(valorIsenta); + db.setEstornoEstadual(BigDecimal.ZERO); + db.setEstornoMunicipal(BigDecimal.ZERO); + + if (isInterEstadual) { + db.setEstornoEstadual(valorContabil); + } else { + db.setEstornoMunicipal(valorContabil); + } + + } else { + + db.setChbpe((String) rset.getObject("CHBPE")); + db.setChbpeSubstituicao((String) rset.getObject("CHBPE_SUBSTITUICAO")); + String xml = null; + + String xml_bpe = rset.getNString("XML_BPE"); + String xml_bpe_2 = rset.getNString("XML_BPE_2"); + String xml_bpe_3 = rset.getNString("XML_BPE_3"); + xml = StringUtils.join(new String[] { xml_bpe, xml_bpe_2, xml_bpe_3 }); + + BigDecimal valorContabil = BigDecimal.ZERO; + BigDecimal baseCalculoICMS = BigDecimal.ZERO; + BigDecimal valorIsenta = BigDecimal.ZERO; + + TBPe tbpe = null; + if (StringUtils.isNotBlank(xml)) + tbpe = BPeUtil.convertXmlToBpe(xml); + + String estadoOrigem = (StringUtils.isNotBlank(xml) ? tbpe.getInfBPe().getIde().getUFIni().value() : db.getUf()); + String estadoDestino = (StringUtils.isNotBlank(xml) ? tbpe.getInfBPe().getIde().getUFFim().value() : db.getUf()); + boolean isEstadual = !estadoOrigem.equals(estadoDestino); + + String vBC = null; + String pICMS = null; + String vICMS = null; + String pRedBC = null; + + if (StringUtils.isNotBlank(xml)) { + if (tbpe.getInfBPe().getImp().getICMS().getICMS00() != null) { + vBC = tbpe.getInfBPe().getImp().getICMS().getICMS00().getVBC(); + pICMS = tbpe.getInfBPe().getImp().getICMS().getICMS00().getPICMS(); + vICMS = tbpe.getInfBPe().getImp().getICMS().getICMS00().getVICMS(); + } else if (tbpe.getInfBPe().getImp().getICMS().getICMS20() != null) { + vBC = tbpe.getInfBPe().getImp().getICMS().getICMS20().getVBC(); + pICMS = tbpe.getInfBPe().getImp().getICMS().getICMS20().getPICMS(); + vICMS = tbpe.getInfBPe().getImp().getICMS().getICMS20().getVICMS(); + pRedBC = tbpe.getInfBPe().getImp().getICMS().getICMS20().getPRedBC(); + } + + if (tbpe.getInfBPe().getInfValorBPe() != null) { + + String vPgto = tbpe.getInfBPe().getInfValorBPe().getVPgto(); + valorContabil = new BigDecimal(vPgto == null ? "0.0" : vPgto); + + for (TBPe.InfBPe.InfValorBPe.Comp comp : tbpe.getInfBPe().getInfValorBPe().getComp()) { + if (comp.getTpComp().equals(TipoComp.PEDAGIO)) { + valorIsenta = valorIsenta.add(isEstadual && !db.getIndPedadioEstdual() ? new BigDecimal(comp.getVComp() == null ? "0.0" : comp.getVComp()) : BigDecimal.ZERO); + valorIsenta = valorIsenta.add(!isEstadual && !db.getIndPedagioMunicipal() ? new BigDecimal(comp.getVComp() == null ? "0.0" : comp.getVComp()) : BigDecimal.ZERO); + } + + if (comp.getTpComp().equals(TipoComp.TAXA_EMBARQUE)) { + valorIsenta = valorIsenta.add(isEstadual && !db.getIndTxEmbarqueEstadual() ? new BigDecimal(comp.getVComp() == null ? "0.0" : comp.getVComp()) : BigDecimal.ZERO); + valorIsenta = valorIsenta.add(!isEstadual && !db.getIndTxEmbarqueMunicipal() ? new BigDecimal(comp.getVComp() == null ? "0.0" : comp.getVComp()) : BigDecimal.ZERO); + } + + if (comp.getTpComp().equals(TipoComp.SEGURO)) { + valorIsenta = valorIsenta.add(isEstadual && !db.getIndSeguroEstadual() ? new BigDecimal(comp.getVComp() == null ? "0.0" : comp.getVComp()) : BigDecimal.ZERO); + valorIsenta = valorIsenta.add(!isEstadual && !db.getIndSeguroMunicipal() ? new BigDecimal(comp.getVComp() == null ? "0.0" : comp.getVComp()) : BigDecimal.ZERO); + } + } + } + } + + db.setValorContabil(valorContabil); + + baseCalculoICMS = new BigDecimal(vBC == null ? "0.0" : vBC); + db.setBaseCalculoIcms(baseCalculoICMS); + + BigDecimal icms = new BigDecimal(pICMS == null ? "0.0" : pICMS); + db.setAliquota(icms); + BigDecimal valorIcms = new BigDecimal(vICMS == null ? "0.0" : vICMS); + db.setValorIcms(valorIcms); + + BigDecimal outras = new BigDecimal(pRedBC == null ? "0.0" : pRedBC); + if (pRedBC != null) { + outras = valorContabil.subtract(baseCalculoICMS); + outras = outras.subtract(valorIsenta); + } + + db.setValorOutras(outras); + db.setValorIsenta(valorIsenta); + db.setEstornoEstadual(BigDecimal.ZERO); + db.setEstornoMunicipal(BigDecimal.ZERO); + + if (isEstadual) { + db.setEstornoEstadual(valorContabil); + } else { + db.setEstornoMunicipal(valorContabil); + } + } + } + private BigDecimal valorBaseCalculo(DevolucaoBilhetes det) { BigDecimal total = BigDecimal.ZERO; total = total.add(det.getPrecioPagado() == null ? BigDecimal.ZERO : det.getPrecioPagado()); @@ -330,7 +438,7 @@ public class RelatorioDevolucaoBilhetes extends Relatorio { this.setCollectionDataSource(new JRBeanCollectionDataSource(lsDev)); } - private String getSqlBpe(Integer empresaId, String puntoVentas, String estados, Date dataVendaInicial, Date dataVendaFinal, Date dataDevolucaoInicial, Date dataDevolucaoFinal, Boolean isApenasBilhetesImpressos) { + private String getSqlBpeNoXml(Integer empresaId, String puntoVentas, String estados, Date dataVendaInicial, Date dataVendaFinal, Date dataDevolucaoInicial, Date dataDevolucaoFinal, Boolean isApenasBilhetesImpressos) { StringBuilder sql = new StringBuilder(); sql.append("SELECT DISTINCT "); @@ -338,7 +446,7 @@ public class RelatorioDevolucaoBilhetes extends Relatorio { sql.append(" TO_CHAR(B.FECCREACION, 'DD/MM/YYYY') AS FECHOR_VENTA, "); sql.append(" TO_CHAR(BORI.FECCREACION, 'DD/MM/YYYY') AS FECHOR_DEVOLUCAO, "); sql.append(" COALESCE(AIDF.DOCFISCAL, COALESCE(BORI.SERIEIMPFISCALORIGINAL, B.SERIEIMPFISCALORIGINAL), "); - sql.append(" COALESCE(BORI.SERIEIMPFISCAL, B.SERIEIMPFISCAL)) AS AIDF, "); + sql.append(" COALESCE(BORI.SERIEIMPFISCAL, B.SERIEIMPFISCAL)) AS AIDF, "); sql.append(" COALESCE(B.NUM_BPE, B.NUMFOLIOSISTEMA, B.NUMOPERACION) AS NUMFOLIOSISTEMA, "); sql.append(" CASE WHEN COALESCE(BORI.SERIEIMPFISCALORIGINAL,BORI.SERIEIMPFISCAL) IS NOT NULL THEN NULL "); sql.append(" ELSE AIDF.SERIE || COALESCE(AIDF.SUBSERIE, '') END AS SERIE_SUBSERIE, "); @@ -450,10 +558,10 @@ public class RelatorioDevolucaoBilhetes extends Relatorio { sql.append(" TO_CHAR(B.FECCREACION, 'DD/MM/YYYY') AS FECHOR_VENTA, "); sql.append(" TO_CHAR(BORI.FECCREACION, 'DD/MM/YYYY') AS FECHOR_DEVOLUCAO, "); sql.append(" COALESCE(AIDF.DOCFISCAL, COALESCE(BORI.SERIEIMPFISCALORIGINAL, B.SERIEIMPFISCALORIGINAL), "); - sql.append(" COALESCE(BORI.SERIEIMPFISCAL, B.SERIEIMPFISCAL)) AS AIDF, "); + sql.append(" COALESCE(BORI.SERIEIMPFISCAL, B.SERIEIMPFISCAL)) AS AIDF, "); sql.append(" COALESCE(B.NUM_BPE, B.NUMFOLIOSISTEMA, B.NUMOPERACION) AS NUMFOLIOSISTEMA, "); sql.append(" CASE WHEN COALESCE(BORI.SERIEIMPFISCALORIGINAL,BORI.SERIEIMPFISCAL) IS NOT NULL THEN NULL "); - sql.append(" ELSE AIDF.SERIE || COALESCE(AIDF.SUBSERIE, '') END AS SERIE_SUBSERIE, "); + sql.append(" ELSE AIDF.SERIE || COALESCE(AIDF.SUBSERIE, '') END AS SERIE_SUBSERIE, "); sql.append(" B.NUMFOLIOPREIMPRESO AS FOLIO, "); sql.append(" B.PRECIOBASE AS PRECIOBASE, "); sql.append(" E.NOMBEMPRESA AS NOMB_EMPRESA, "); @@ -560,15 +668,208 @@ public class RelatorioDevolucaoBilhetes extends Relatorio { return sql.toString(); } + @Deprecated + private String getSqlBpeXml(Integer empresaId, String puntoVentas, String estados, Date dataVendaInicial, Date dataVendaFinal, Date dataDevolucaoInicial, Date dataDevolucaoFinal, Boolean isApenasBilhetesImpressos) { + + StringBuilder sql = new StringBuilder(); + sql.append("SELECT DISTINCT "); + sql.append(" BORI.BOLETO_ID, "); + sql.append(" TO_CHAR(B.FECCREACION, 'DD/MM/YYYY') AS FECHOR_VENTA, "); + sql.append(" TO_CHAR(BORI.FECCREACION, 'DD/MM/YYYY') AS FECHOR_DEVOLUCAO, "); + sql.append(" COALESCE(AIDF.DOCFISCAL, COALESCE(BORI.SERIEIMPFISCALORIGINAL, B.SERIEIMPFISCALORIGINAL), "); + sql.append(" COALESCE(BORI.SERIEIMPFISCAL, B.SERIEIMPFISCAL)) AS AIDF, "); + sql.append(" COALESCE(B.NUM_BPE, B.NUMFOLIOSISTEMA, B.NUMOPERACION) AS NUMFOLIOSISTEMA, "); + sql.append(" CASE WHEN COALESCE(BORI.SERIEIMPFISCALORIGINAL,BORI.SERIEIMPFISCAL) IS NOT NULL THEN NULL "); + sql.append(" ELSE AIDF.SERIE || COALESCE(AIDF.SUBSERIE, '') END AS SERIE_SUBSERIE, "); + sql.append(" B.NUMFOLIOPREIMPRESO AS FOLIO, "); + sql.append(" B.PRECIOBASE AS PRECIOBASE, "); + sql.append(" E.NOMBEMPRESA AS NOMB_EMPRESA, "); + sql.append(" E.EMPRESA_ID AS EMPRESA_ID, "); + sql.append(" PTV.NUMPUNTOVENTA AS NUMPUNTOVENTA, "); + sql.append(" PTVO.NUMPUNTOVENTA AS NUMPUNTOVENTAORIGEM, "); + sql.append(" EST_BPE.NOMBESTADO AS ESTADO, "); + sql.append(" EST_BPE.CVEESTADO AS UF, "); + sql.append(" EST_BPE.ESTADO_ID AS ESTADO_ID, "); + sql.append(" COALESCE(EOS.CVEESTADO, EST.CVEESTADO) AS UF_CORRIDA, "); + sql.append(" COALESCE(EI.ICMS, EST.ICMS) AS ICMSINTERESTADUAL, "); + sql.append(" NVL(EI.ICMSIM,0) AS ICMSINTERMUNICIPAL, "); + sql.append(" EI.TRIBUTACAOIMPORTACAO AS TRIBUTACAOIMPORTACAO, "); + sql.append(" NVL(EI.PORCREDBASEICMS,0) AS PORCREDBASEICMS, "); + sql.append(" (CASE WHEN COALESCE(COS.ESTADO_ID,CO.ESTADO_ID) <> COALESCE(CDS.ESTADO_ID,CD.ESTADO_ID) THEN 1 ELSE 0 END) IS_ESTADUAL, "); + sql.append(" NVL(EI.PORCREDMUNICIPAL,0) AS PORC_MUNICIPAL, "); + sql.append(" NVL(EI.PORCREDESTADUAL,0) AS PORC_ESTADUAL, "); + sql.append(" (CASE WHEN NVL(COALESCE(POS.REGIONMETROPOLITANA_ID,ORI.REGIONMETROPOLITANA_ID) ,-1) = NVL(COALESCE(PDS.REGIONMETROPOLITANA_ID,DES.REGIONMETROPOLITANA_ID),-2) THEN 1 ELSE 0 END) AS ISENTA, "); + sql.append(" NVL(B.PRECIOPAGADO,0) AS PRECIOPAGADO, NVL(B.IMPORTEOUTROS,0) AS IMPORTEOUTROS, NVL(B.IMPORTEPEDAGIO,0) AS IMPORTEPEDAGIO, NVL(B.IMPORTESEGURO,0) AS IMPORTESEGURO, NVL(B.IMPORTETAXAEMBARQUE,0) AS IMPORTETAXAEMBARQUE, "); + sql.append(" NVL(EI.INDTARIFAMUNICIPAL,0) AS INDTARIFAMUNICIPAL, NVL(EI.INDSEGUROMUNICIPAL,0) AS INDSEGUROMUNICIPAL, NVL(EI.INDTXEMBARQUEMUNICIPAL,0) AS INDTXEMBARQUEMUNICIPAL, NVL(EI.INDPEDAGIOMUNICIPAL,0) AS INDPEDAGIOMUNICIPAL, "); + sql.append(" NVL(EI.INDTARIFAESTADUAL,0) AS INDTARIFAESTADUAL, NVL(EI.INDSEGUROESTADUAL,0) AS INDSEGUROESTADUAL, NVL(EI.INDTXEMBARQUEESTADUAL,0) AS INDTXEMBARQUEESTADUAL, NVL(EI.INDPEDAGIOESTDUAL,0) AS INDPEDAGIOESTDUAL, "); + sql.append(" NVL(B.PRECIOPAGADO,0) + NVL(B.IMPORTEOUTROS,0) + NVL(B.IMPORTEPEDAGIO,0) + NVL(B.IMPORTESEGURO,0) + NVL(B.IMPORTETAXAEMBARQUE,0) AS TOTAL, "); + sql.append(" BPE.TIPOSUBSTITUICAO, "); + sql.append(" CASE WHEN BPE.TIPOEVENTO = 110111 THEN 'CANCELAMENTO' "); + sql.append(" WHEN BPE.TIPOEVENTO IS NULL AND BPE.CHBPE_SUBSTITUICAO IS NOT NULL AND BPE.TIPOSUBSTITUICAO = '1' THEN 'REMARCACAO' "); + sql.append(" WHEN BPE.TIPOEVENTO IS NULL AND BPE.CHBPE_SUBSTITUICAO IS NOT NULL AND BPE.TIPOSUBSTITUICAO = '2' THEN 'TRANSFERENCIA' "); + sql.append(" WHEN BPE.TIPOEVENTO IS NULL AND BPE.CHBPE_SUBSTITUICAO IS NOT NULL AND BPE.TIPOSUBSTITUICAO = '3' THEN 'TRANSFERENCIA/REMARCACAO' ELSE '' END AS TIPO_SIT, "); + sql.append(" BPEORI.CHBPE AS CHBPE, "); + sql.append(" BPE.CHBPE AS CHBPE_SUBSTITUICAO, "); + sql.append(" DBMS_LOB.SUBSTR((CASE WHEN BPEORI.TIPOEVENTO IS NOT NULL THEN BPEANT.XMLREGULAR ELSE BPEORI.XMLREGULAR END), 3000) AS XML_BPE, "); + sql.append(" DBMS_LOB.SUBSTR((CASE WHEN BPEORI.TIPOEVENTO IS NOT NULL THEN BPEANT.XMLREGULAR ELSE BPEORI.XMLREGULAR END), 3000, 3001) AS XML_BPE_2, "); + sql.append(" DBMS_LOB.SUBSTR((CASE WHEN BPEORI.TIPOEVENTO IS NOT NULL THEN BPEANT.XMLREGULAR ELSE BPEORI.XMLREGULAR END), 3000, 6001) AS XML_BPE_3 "); + sql.append("FROM BOLETO BORI "); + sql.append(" INNER JOIN MARCA M ON M.MARCA_ID = BORI.MARCA_ID AND M.ACTIVO = 1 "); + sql.append(" INNER JOIN EMPRESA E ON E.EMPRESA_ID = M.EMPRESA_ID "); + sql.append(" INNER JOIN BPE BPE ON BPE.BOLETO_ID = BORI.BOLETO_ID "); + sql.append(" AND BPE.ACTIVO = (CASE WHEN BORI.MOTIVOCANCELACION_ID = 17 AND BORI.BOLETOORIGINAL_ID IS NULL THEN 0 ELSE 1 END) "); + sql.append(" INNER JOIN ESTADO EST_BPE ON BPE.UF = EST_BPE.CODIBGE "); + sql.append(" LEFT JOIN BPE BPEORI ON BPEORI.CHBPE = BPE.CHBPE_SUBSTITUICAO "); + sql.append(" AND BPEORI.ACTIVO = (CASE WHEN BORI.MOTIVOCANCELACION_ID = 17 AND BORI.BOLETOORIGINAL_ID IS NULL THEN 0 ELSE 1 END) "); + sql.append(" LEFT JOIN BOLETO B ON B.BOLETO_ID = BPEORI.BOLETO_ID "); + sql.append(" INNER JOIN PUNTO_VENTA PTV ON PTV.PUNTOVENTA_ID = B.PUNTOVENTA_ID "); + sql.append(" INNER JOIN PARADA ORI ON (B.ORIGEN_ID = ORI.PARADA_ID ) "); + sql.append(" INNER JOIN PARADA DES ON (B.DESTINO_ID = DES.PARADA_ID ) "); + sql.append(" INNER JOIN CIUDAD CO ON (CO.CIUDAD_ID = ORI.CIUDAD_ID ) "); + sql.append(" INNER JOIN CIUDAD CD ON (CD.CIUDAD_ID = DES.CIUDAD_ID ) "); + sql.append(" INNER JOIN ESTADO EST ON EST.ESTADO_ID = CO.ESTADO_ID "); + sql.append(" LEFT JOIN ALIAS_SERVICO S ON S.ORIGEN_ID = B.ORIGEN_ID "); + sql.append(" AND S.DESTINO_ID = B.DESTINO_ID AND (S.CORRIDA_ID = B.CORRIDA_ID OR S.CORRIDA_ID IS NULL) "); + sql.append(" AND S.RUTA_ID = B.RUTA_ID "); + sql.append(" LEFT JOIN PARADA POS ON POS.PARADA_ID = S.ALIASORIGEN_ID "); + sql.append(" LEFT JOIN CIUDAD COS ON COS.CIUDAD_ID = POS.CIUDAD_ID "); + sql.append(" LEFT JOIN ESTADO EOS ON EOS.ESTADO_ID = COS.ESTADO_ID "); + sql.append(" LEFT JOIN PARADA PDS ON PDS.PARADA_ID = S.ALIASDESTINO_ID "); + sql.append(" LEFT JOIN CIUDAD CDS ON CDS.CIUDAD_ID = PDS.CIUDAD_ID "); + sql.append(" LEFT JOIN ESTADO EDS ON EDS.ESTADO_ID = CDS.ESTADO_ID "); + sql.append(" JOIN INSCRICAO_ESTADUAL IE ON E.EMPRESA_ID = IE.EMPRESA_ID "); + sql.append(" AND IE.ESTADO_ID = COALESCE(EOS.ESTADO_ID, EST.ESTADO_ID) AND IE.ACTIVO = 1 "); + sql.append(" JOIN EMPRESA_IMPOSTO EI ON EI.EMPRESA_ID = E.EMPRESA_ID "); + sql.append(" AND EI.ESTADO_ID = COALESCE(EOS.ESTADO_ID, EST.ESTADO_ID) AND EI.ACTIVO = 1 "); + sql.append(" LEFT JOIN AIDF AIDF ON AIDF.AIDF_ID = B.AIDF_ID AND B.TIPOVENTA_ID = 3 "); + sql.append(" LEFT JOIN ESTADO ESAIDF ON ESAIDF.ESTADO_ID = AIDF.ESTADO_ID "); + sql.append(" LEFT JOIN BOLETO BANT ON BANT.BOLETO_ID = (CASE WHEN BPEORI.TIPOEVENTO IS NOT NULL THEN COALESCE(B.BOLETOANTERIOR_ID, B.BOLETOORIGINAL_ID) ELSE NULL END) "); + sql.append(" LEFT JOIN BPE BPEANT ON BPEANT.BOLETO_ID = BANT.BOLETO_ID "); + sql.append(" AND BPEANT.ACTIVO = (CASE WHEN BORI.MOTIVOCANCELACION_ID = 17 AND BORI.BOLETOORIGINAL_ID IS NULL THEN 0 ELSE 1 END) "); + sql.append(" LEFT JOIN PUNTO_VENTA PTVO ON PTVO.PUNTOVENTA_ID = COALESCE(BANT.PUNTOVENTA_ID, BORI.PUNTOVENTA_ID,B.PTOVTAVENTA_ID) "); + sql.append("WHERE (BPE.CODSTAT IN ('-1','100','101','102','135','150') AND BPE.CHBPE_SUBSTITUICAO IS NOT NULL "); + sql.append(" OR (BPE.CODSTAT IN ('101','135') AND TO_CHAR(B.FECCREACION, 'MM/YYYY') < TO_CHAR(BORI.FECCREACION, 'MM/YYYY')) ) "); + sql.append(" AND (BPE.CODSTAT IN ('-1','100','101','102','135','150') AND BPE.TIPOEVENTO <> '110115' OR BPE.TIPOEVENTO IS NULL) "); + sql.append(" AND (BPEORI.CODSTAT IN ('-1','100','101','102','135','150') AND BPEORI.TIPOEVENTO <> '110115' OR BPEORI.TIPOEVENTO IS NULL) "); + if (dataDevolucaoInicial != null) { + sql.append("AND BORI.FECCREACION >= TO_DATE(:dataDevolucaoInicial,'DD/MM/YYYY HH24:MI') "); + } + + if (dataDevolucaoFinal != null) { + sql.append("AND BORI.FECCREACION <= TO_DATE(:dataDevolucaoFinal,'DD/MM/YYYY HH24:MI') "); + } + + sql.append(estados == null ? "" : "AND EST_BPE.ESTADO_ID IN (" + estados + ") "); + sql.append(puntoVentas == null ? "" : "AND PTV.PUNTOVENTA_ID IN (" + puntoVentas + ") "); + sql.append(empresaId == null ? "" : "AND E.EMPRESA_ID IN (" + empresaId + ") "); + + sql.append(" UNION ALL "); + + sql.append("SELECT DISTINCT "); + sql.append(" BORI.BOLETO_ID, "); + sql.append(" TO_CHAR(B.FECCREACION, 'DD/MM/YYYY') AS FECHOR_VENTA, "); + sql.append(" TO_CHAR(BORI.FECCREACION, 'DD/MM/YYYY') AS FECHOR_DEVOLUCAO, "); + sql.append(" COALESCE(AIDF.DOCFISCAL, COALESCE(BORI.SERIEIMPFISCALORIGINAL, B.SERIEIMPFISCALORIGINAL), "); + sql.append(" COALESCE(BORI.SERIEIMPFISCAL, B.SERIEIMPFISCAL)) AS AIDF, "); + sql.append(" COALESCE(B.NUM_BPE, B.NUMFOLIOSISTEMA, B.NUMOPERACION) AS NUMFOLIOSISTEMA, "); + sql.append(" CASE WHEN COALESCE(BORI.SERIEIMPFISCALORIGINAL,BORI.SERIEIMPFISCAL) IS NOT NULL THEN NULL "); + sql.append(" ELSE AIDF.SERIE || COALESCE(AIDF.SUBSERIE, '') END AS SERIE_SUBSERIE, "); + sql.append(" B.NUMFOLIOPREIMPRESO AS FOLIO, "); + sql.append(" B.PRECIOBASE AS PRECIOBASE, "); + sql.append(" E.NOMBEMPRESA AS NOMB_EMPRESA, "); + sql.append(" E.EMPRESA_ID AS EMPRESA_ID, "); + sql.append(" PTV.NUMPUNTOVENTA AS NUMPUNTOVENTA, "); + sql.append(" PTVO.NUMPUNTOVENTA AS NUMPUNTOVENTAORIGEM, "); + sql.append(" EST_BPE.NOMBESTADO AS ESTADO, "); + sql.append(" EST_BPE.CVEESTADO AS UF, "); + sql.append(" EST_BPE.ESTADO_ID AS ESTADO_ID, "); + sql.append(" COALESCE(EOS.CVEESTADO, EST.CVEESTADO) AS UF_CORRIDA, "); + sql.append(" COALESCE(EI.ICMS, EST.ICMS) AS ICMSINTERESTADUAL, "); + sql.append(" NVL(EI.ICMSIM,0) AS ICMSINTERMUNICIPAL, "); + sql.append(" EI.TRIBUTACAOIMPORTACAO AS TRIBUTACAOIMPORTACAO, "); + sql.append(" NVL(EI.PORCREDBASEICMS,0) AS PORCREDBASEICMS, "); + sql.append(" (CASE WHEN COALESCE(COS.ESTADO_ID,CO.ESTADO_ID) <> COALESCE(CDS.ESTADO_ID,CD.ESTADO_ID) THEN 1 ELSE 0 END) IS_ESTADUAL, "); + sql.append(" NVL(EI.PORCREDMUNICIPAL,0) AS PORC_MUNICIPAL, "); + sql.append(" NVL(EI.PORCREDESTADUAL,0) AS PORC_ESTADUAL, "); + sql.append(" (CASE WHEN NVL(COALESCE(POS.REGIONMETROPOLITANA_ID,ORI.REGIONMETROPOLITANA_ID) ,-1) = NVL(COALESCE(PDS.REGIONMETROPOLITANA_ID,DES.REGIONMETROPOLITANA_ID),-2) THEN 1 ELSE 0 END) AS ISENTA, "); + sql.append(" NVL(B.PRECIOPAGADO,0) AS PRECIOPAGADO, NVL(B.IMPORTEOUTROS,0) AS IMPORTEOUTROS, NVL(B.IMPORTEPEDAGIO,0) AS IMPORTEPEDAGIO, NVL(B.IMPORTESEGURO,0) AS IMPORTESEGURO, NVL(B.IMPORTETAXAEMBARQUE,0) AS IMPORTETAXAEMBARQUE, "); + sql.append(" NVL(EI.INDTARIFAMUNICIPAL,0) AS INDTARIFAMUNICIPAL, NVL(EI.INDSEGUROMUNICIPAL,0) AS INDSEGUROMUNICIPAL, NVL(EI.INDTXEMBARQUEMUNICIPAL,0) AS INDTXEMBARQUEMUNICIPAL, NVL(EI.INDPEDAGIOMUNICIPAL,0) AS INDPEDAGIOMUNICIPAL, "); + sql.append(" NVL(EI.INDTARIFAESTADUAL,0) AS INDTARIFAESTADUAL, NVL(EI.INDSEGUROESTADUAL,0) AS INDSEGUROESTADUAL, NVL(EI.INDTXEMBARQUEESTADUAL,0) AS INDTXEMBARQUEESTADUAL, NVL(EI.INDPEDAGIOESTDUAL,0) AS INDPEDAGIOESTDUAL, "); + sql.append(" NVL(B.PRECIOPAGADO,0) + NVL(B.IMPORTEOUTROS,0) + NVL(B.IMPORTEPEDAGIO,0) + NVL(B.IMPORTESEGURO,0) + NVL(B.IMPORTETAXAEMBARQUE,0) AS TOTAL, "); + sql.append(" BPE.TIPOSUBSTITUICAO, "); + sql.append(" CASE WHEN BPE.TIPOEVENTO = 110111 THEN 'CANCELAMENTO' "); + sql.append(" WHEN BPE.TIPOEVENTO IS NULL AND BPE.CHBPE_SUBSTITUICAO IS NOT NULL AND BPE.TIPOSUBSTITUICAO = '1' THEN 'REMARCACAO' "); + sql.append(" WHEN BPE.TIPOEVENTO IS NULL AND BPE.CHBPE_SUBSTITUICAO IS NOT NULL AND BPE.TIPOSUBSTITUICAO = '2' THEN 'TRANSFERENCIA' "); + sql.append(" WHEN BPE.TIPOEVENTO IS NULL AND BPE.CHBPE_SUBSTITUICAO IS NOT NULL AND BPE.TIPOSUBSTITUICAO = '3' THEN 'TRANSFERENCIA/REMARCACAO' ELSE '' END AS TIPO_SIT, "); + sql.append(" BPEORI.CHBPE AS CHBPE, "); + sql.append(" '' AS CHBPE_SUBSTITUICAO, "); + sql.append(" DBMS_LOB.SUBSTR((CASE WHEN BPEORI.TIPOEVENTO IS NOT NULL THEN BPEANT.XMLREGULAR ELSE BPEORI.XMLREGULAR END), 3000) AS XML_BPE, "); + sql.append(" DBMS_LOB.SUBSTR((CASE WHEN BPEORI.TIPOEVENTO IS NOT NULL THEN BPEANT.XMLREGULAR ELSE BPEORI.XMLREGULAR END), 3000, 3001) AS XML_BPE_2, "); + sql.append(" DBMS_LOB.SUBSTR((CASE WHEN BPEORI.TIPOEVENTO IS NOT NULL THEN BPEANT.XMLREGULAR ELSE BPEORI.XMLREGULAR END), 3000, 6001) AS XML_BPE_3 "); + sql.append("FROM BOLETO BORI "); + sql.append(" INNER JOIN MARCA M ON M.MARCA_ID = BORI.MARCA_ID AND M.ACTIVO = 1 "); + sql.append(" INNER JOIN EMPRESA E ON E.EMPRESA_ID = M.EMPRESA_ID "); + sql.append(" INNER JOIN BPE BPE ON BPE.BOLETO_ID = BORI.BOLETO_ID "); + sql.append(" AND BPE.ACTIVO = (CASE WHEN BORI.MOTIVOCANCELACION_ID = 17 AND BORI.BOLETOORIGINAL_ID IS NULL THEN 0 ELSE 1 END) "); + sql.append(" INNER JOIN ESTADO EST_BPE ON BPE.UF = EST_BPE.CODIBGE "); + sql.append(" LEFT JOIN BOLETO B ON B.BOLETO_ID = (CASE WHEN BORI.MOTIVOCANCELACION_ID = 99 THEN BORI.BOLETOANTERIOR_ID ELSE BORI.BOLETOORIGINAL_ID END) "); + sql.append(" LEFT JOIN BPE BPEORI ON B.BOLETO_ID = BPEORI.BOLETO_ID "); + sql.append(" AND BPEORI.ACTIVO = (CASE WHEN BORI.MOTIVOCANCELACION_ID = 17 AND BORI.BOLETOORIGINAL_ID IS NULL THEN 0 ELSE 1 END) "); + sql.append(" INNER JOIN PUNTO_VENTA PTV ON PTV.PUNTOVENTA_ID = BORI.PUNTOVENTA_ID "); + sql.append(" INNER JOIN PARADA ORI ON (B.ORIGEN_ID = ORI.PARADA_ID ) "); + sql.append(" INNER JOIN PARADA DES ON (B.DESTINO_ID = DES.PARADA_ID ) "); + sql.append(" INNER JOIN CIUDAD CO ON (CO.CIUDAD_ID = ORI.CIUDAD_ID ) "); + sql.append(" INNER JOIN CIUDAD CD ON (CD.CIUDAD_ID = DES.CIUDAD_ID ) "); + sql.append(" INNER JOIN ESTADO EST ON EST.ESTADO_ID = CO.ESTADO_ID "); + sql.append("LEFT JOIN ALIAS_SERVICO S ON S.ORIGEN_ID = B.ORIGEN_ID "); + sql.append(" AND S.DESTINO_ID = B.DESTINO_ID AND (S.CORRIDA_ID = B.CORRIDA_ID OR S.CORRIDA_ID IS NULL) "); + sql.append(" AND S.RUTA_ID = B.RUTA_ID AND S.ACTIVO = 1 "); + sql.append("LEFT JOIN PARADA POS ON POS.PARADA_ID = S.ALIASORIGEN_ID "); + sql.append("LEFT JOIN CIUDAD COS ON COS.CIUDAD_ID = POS.CIUDAD_ID "); + sql.append("LEFT JOIN ESTADO EOS ON EOS.ESTADO_ID = COS.ESTADO_ID "); + sql.append("LEFT JOIN PARADA PDS ON PDS.PARADA_ID = S.ALIASDESTINO_ID "); + sql.append("LEFT JOIN CIUDAD CDS ON CDS.CIUDAD_ID = PDS.CIUDAD_ID "); + sql.append("LEFT JOIN ESTADO EDS ON EDS.ESTADO_ID = CDS.ESTADO_ID "); + sql.append("JOIN INSCRICAO_ESTADUAL IE ON E.EMPRESA_ID = IE.EMPRESA_ID "); + sql.append(" AND IE.ESTADO_ID = COALESCE(EOS.ESTADO_ID, EST.ESTADO_ID) AND IE.ACTIVO = 1 "); + sql.append("JOIN EMPRESA_IMPOSTO EI ON EI.EMPRESA_ID = E.EMPRESA_ID "); + sql.append(" AND EI.ESTADO_ID = COALESCE(EOS.ESTADO_ID, EST.ESTADO_ID) AND EI.ACTIVO = 1 "); + sql.append("LEFT JOIN AIDF AIDF ON AIDF.AIDF_ID = B.AIDF_ID AND B.TIPOVENTA_ID = 3 "); + sql.append("LEFT JOIN ESTADO ESAIDF ON ESAIDF.ESTADO_ID = AIDF.ESTADO_ID "); + sql.append("LEFT JOIN BOLETO BANT ON BANT.BOLETO_ID = (CASE WHEN BPEORI.TIPOEVENTO IS NOT NULL THEN COALESCE(B.BOLETOANTERIOR_ID, B.BOLETOORIGINAL_ID) ELSE NULL END) "); + sql.append("LEFT JOIN BPE BPEANT ON BPEANT.BOLETO_ID = BANT.BOLETO_ID "); + sql.append(" AND BPEANT.ACTIVO = (CASE WHEN BORI.MOTIVOCANCELACION_ID = 17 AND BORI.BOLETOORIGINAL_ID IS NULL THEN 0 ELSE 1 END) "); + sql.append("LEFT JOIN PUNTO_VENTA PTVO ON PTVO.PUNTOVENTA_ID = COALESCE(BANT.PUNTOVENTA_ID, BORI.PUNTOVENTA_ID,B.PTOVTAVENTA_ID) "); + sql.append("WHERE "); + sql.append(" (BPE.CODSTAT IN ('101','135') AND TO_CHAR(B.FECCREACION, 'MM/YYYY') < TO_CHAR(BORI.FECCREACION, 'MM/YYYY')) "); + sql.append(" AND (BPE.CODSTAT IN ('-1','100','101','102','135','150') AND BPE.TIPOEVENTO <> '110115' OR BPE.TIPOEVENTO IS NULL) "); + sql.append(" AND (BPEORI.CODSTAT IN ('-1','100','101','102','135','150') AND BPEORI.TIPOEVENTO <> '110115' OR BPEORI.TIPOEVENTO IS NULL) "); + if (dataDevolucaoInicial != null) { + sql.append("AND BORI.FECCREACION >= TO_DATE(:dataDevolucaoInicial,'DD/MM/YYYY HH24:MI') "); + } + + if (dataDevolucaoFinal != null) { + sql.append("AND BORI.FECCREACION <= TO_DATE(:dataDevolucaoFinal,'DD/MM/YYYY HH24:MI') "); + } + + sql.append(estados == null ? "" : "AND EST_BPE.ESTADO_ID IN (" + estados + ") "); + sql.append(puntoVentas == null ? "" : "AND PTV.PUNTOVENTA_ID IN (" + puntoVentas + ") "); + sql.append(empresaId == null ? "" : "AND E.EMPRESA_ID IN (" + empresaId + ") "); + + sql.append("ORDER BY NOMB_EMPRESA, ESTADO, UF, FECHOR_DEVOLUCAO, NUMFOLIOSISTEMA"); + + return sql.toString(); + } + private String getSql(Integer empresaId, String puntoVentas, String estados, Date dataVendaInicial, Date dataVendaFinal, Date dataDevolucaoInicial, Date dataDevolucaoFinal, Boolean isApenasBilhetesImpressos) { StringBuilder sql = new StringBuilder(); sql.append("SELECT DISTINCT "); sql.append(" COALESCE(AIDF.DOCFISCAL, COALESCE(BORI.SERIEIMPFISCALORIGINAL, B.SERIEIMPFISCALORIGINAL), "); - sql.append(" COALESCE(BORI.SERIEIMPFISCAL, B.SERIEIMPFISCAL)) AS AIDF, "); + sql.append(" COALESCE(BORI.SERIEIMPFISCAL, B.SERIEIMPFISCAL)) AS AIDF, "); sql.append(" COALESCE(B.NUMFOLIOSISTEMA, B.NUMOPERACION) AS NUMFOLIOSISTEMA, "); sql.append(" CASE WHEN COALESCE(BORI.SERIEIMPFISCALORIGINAL,BORI.SERIEIMPFISCAL) IS NOT NULL THEN NULL "); - sql.append(" ELSE AIDF.SERIE || COALESCE(AIDF.SUBSERIE, '') END AS SERIE_SUBSERIE, "); + sql.append(" ELSE AIDF.SERIE || COALESCE(AIDF.SUBSERIE, '') END AS SERIE_SUBSERIE, "); sql.append(" B.NUMFOLIOPREIMPRESO AS FOLIO, "); sql.append(" B.PRECIOBASE AS PRECIOBASE, "); sql.append(" E.NOMBEMPRESA AS NOMB_EMPRESA, "); diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioDevolucaoBilhetesController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioDevolucaoBilhetesController.java index 3bfb12e0b..e7d549843 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioDevolucaoBilhetesController.java +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioDevolucaoBilhetesController.java @@ -88,6 +88,7 @@ public class RelatorioDevolucaoBilhetesController extends MyGenericForwardCompos private Checkbox chkApenasBilhetesImpressos; private boolean bpe; private boolean viewFiltros; + private Checkbox consultaOtimizada; public boolean isViewFiltros() { return viewFiltros; @@ -144,6 +145,7 @@ public class RelatorioDevolucaoBilhetesController extends MyGenericForwardCompos parametros.put("USUARIO", UsuarioLogado.getUsuarioLogado().getClaveUsuario()); parametros.put("isBpe", bpe); + parametros.put("isConsultaOtimizada", consultaOtimizada.isChecked()); filtro.append("Agência(s): "); if (puntoVentaSelList.getListData().size() > 0) { diff --git a/web/gui/relatorios/filtroRelatorioDevolucaoBilhetes.zul b/web/gui/relatorios/filtroRelatorioDevolucaoBilhetes.zul index be67e2be6..44180018c 100644 --- a/web/gui/relatorios/filtroRelatorioDevolucaoBilhetes.zul +++ b/web/gui/relatorios/filtroRelatorioDevolucaoBilhetes.zul @@ -137,6 +137,10 @@ value="${c:l('relatorioDevolucaoBilhetesAgenciaController.lbApenasBilhetesImpressos')}" /> + + + +