From 945bf825efd67a55b0bfa990942304a8573eafe8 Mon Sep 17 00:00:00 2001 From: Fabio Faria Date: Tue, 17 May 2022 18:09:08 -0300 Subject: [PATCH] sincronizacao com main --- .../RelatorioAcompanhamentoEquivalentes.java | 3 +- .../impl/RelatorioAgenciaFechamento.java | 27 +- .../RelatorioAproveitamentoFinanceiro.java | 35 +- .../relatorios/impl/RelatorioBPe.java | 37 +- .../RelatorioCadastroClientesDetalhado.java | 19 +- .../relatorios/impl/RelatorioCheckin.java | 4 + .../relatorios/impl/RelatorioDepositos.java | 13 +- .../relatorios/impl/RelatorioEstoque.java | 34 +- .../impl/RelatorioGratuidadeAGR.java | 8 +- .../impl/RelatorioGratuidadeARTESP.java | 111 ++--- .../relatorios/impl/RelatorioIndiceIRK.java | 2 +- .../impl/RelatorioLinhasHorario.java | 4 +- .../RelatorioLinhasHorarioSimplificado.java | 4 +- .../impl/RelatorioMovimentacaoBilhete.java | 8 +- .../impl/RelatorioOrigemDestino.java | 18 +- ...trativoMovimentoPassageirosNovoLayout.java | 133 +++--- .../impl/RelatorioReceitaServico.java | 7 +- ...LinhasAnaliticoSimplificadoSumarizado.java | 2 +- ...atorioResumoLinhasAnaliticoSumarizado.java | 2 +- .../relatorios/impl/RelatorioTaxasLinha.java | 22 +- .../impl/RelatorioVendasBilheteiro.java | 2 + .../impl/RelatorioVendasCartoes.java | 115 +++-- .../impl/RelatorioVendasConexaoRuta.java | 14 +- .../impl/RelatorioVendasRequisicao.java | 2 +- .../impl/RelatorioW2IAnalitico.java | 9 +- .../impl/RelatorioW2ISintetico.java | 5 +- .../RelatorioBPe_es.properties | 1 + .../RelatorioBPe_pt_BR.properties | 3 +- .../RelatorioCheckin_es.properties | 2 +- .../RelatorioCheckin_pt_BR.properties | 8 +- .../RelatorioDepositos_pt_BR.properties | 4 +- .../RelatorioAproveitamentoFinanceiro.jasper | Bin 122902 -> 124764 bytes .../RelatorioAproveitamentoFinanceiro.jrxml | 141 +++--- .../relatorios/templates/RelatorioBPe.jasper | Bin 51221 -> 51948 bytes .../relatorios/templates/RelatorioBPe.jrxml | 9 +- .../RelatorioCadastroClientesDetalhado.jasper | Bin 40673 -> 41566 bytes .../RelatorioCadastroClientesDetalhado.jrxml | 253 ++++++----- .../templates/RelatorioCheckin.jasper | Bin 28818 -> 35002 bytes .../templates/RelatorioCheckin.jrxml | 149 ++++-- .../templates/RelatorioDepositos.jasper | Bin 44248 -> 44365 bytes .../templates/RelatorioDepositos.jrxml | 21 +- .../RelatorioDepositosDetalhado.jasper | Bin 37916 -> 37917 bytes .../RelatorioDepositosDetalhado.jrxml | 14 +- .../RelatorioFormaPagamentoAgencia.jasper | Bin 39073 -> 39080 bytes .../RelatorioFormaPagamentoAgencia.jrxml | 52 +-- .../templates/RelatorioGratuidadeAGR.jasper | Bin 42079 -> 42445 bytes .../templates/RelatorioGratuidadeAGR.jrxml | 10 +- .../templates/RelatorioLinhasHorario.jasper | Bin 114482 -> 114692 bytes .../templates/RelatorioLinhasHorario.jrxml | 4 +- .../RelatorioPassageirosViajar.jasper | Bin 36258 -> 36288 bytes .../RelatorioPassageirosViajar.jrxml | 6 +- ...ativoMovimentoPassageirosNovoLayout.jasper | Bin 36011 -> 36009 bytes ...rativoMovimentoPassageirosNovoLayout.jrxml | 217 +++++---- .../RelatorioReceitaEmbarcadaServico.jasper | Bin 56464 -> 56538 bytes .../RelatorioReceitaEmbarcadaServico.jrxml | 8 +- .../templates/RelatorioReceitaServico.jasper | Bin 46143 -> 46835 bytes .../templates/RelatorioReceitaServico.jrxml | 263 +++++++---- .../RelatorioResumoLinhasAnalitico.jasper | Bin 119438 -> 120295 bytes .../RelatorioResumoLinhasAnalitico.jrxml | 44 +- .../RelatorioVendasConexaoRuta.jasper | Bin 53113 -> 53112 bytes .../RelatorioVendasConexaoRuta.jrxml | 425 ++++++++++-------- .../RelatorioVendasConexaoRutaBean.java | 18 +- .../ventaboletos/rest/SincronizarTramos.java | 6 + .../GridCombinacionTramoRutaCoeficiente.java | 4 +- .../EditarClaseServicioController.java | 98 ++-- .../EditarCoeficienteTarifaController.java | 1 + .../catalogos/EditarEmpresaController.java | 19 +- .../catalogos/EditarFormaPagoController.java | 5 + .../catalogos/EditarOCDParamController.java | 20 + .../catalogos/EditarPuntoVentaController.java | 7 +- .../comissao/ConferenciaController.java | 2 +- ...ditarConfiguracionCategoriaController.java | 3 +- .../EditarConfiguracionGeneralController.java | 9 +- ...tarConfiguracionReservacionController.java | 18 + .../BusquedaConexionController.java | 25 +- ...itarCatalogoDeAgruparParadaController.java | 76 ++++ .../EditarCatalogoDeParadaController.java | 5 + .../EditarCatalogoDeRutaController.java | 137 +++++- .../EditarConexionConfController.java | 18 +- .../EditarConexionController.java | 2 +- .../EditarConexionRutaController.java | 2 +- ...itarConfRestricaoCanalVentaController.java | 18 + .../EditarCorridaController.java | 33 +- .../GerarConexionPorRutaController.java | 414 +++++++++++++---- .../GerarCombinacionTramoRutaController.java | 4 +- .../RelatorioArquivoBGMController.java | 7 +- .../relatorios/RelatorioBPeController.java | 57 ++- ...latorioBaixasVendasInternetController.java | 38 +- .../RelatorioCheckinController.java | 11 +- .../RelatorioGratuidadeAGEPANController.java | 28 +- .../RelatorioGratuidadeAGRController.java | 39 +- .../RelatorioPassageirosViajarController.java | 4 +- .../RelatorioReceitaServicoController.java | 30 +- .../RelatorioVendasCartoesController.java | 88 ++-- .../relatorios/RelatorioW2IController.java | 2 +- .../BusquedaLogAuditoriaController.java | 104 ++++- .../ventaboletos/web/utilerias/MyAppInit.java | 12 +- .../ItemMenuLimparCacheLocalidadesAPI.java | 129 +----- .../utilerias/menu/menu_original.properties | 10 +- .../web/utilerias/render/RenderConexion.java | 2 +- .../utilerias/render/RenderConexionRuta.java | 2 +- .../render/RenderEventosFinanceiros.java | 2 +- .../render/RenderRutaIcmsExcepcion.java | 3 + src/java/spring-config.xml | 1 + 104 files changed, 2378 insertions(+), 1409 deletions(-) diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAcompanhamentoEquivalentes.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAcompanhamentoEquivalentes.java index 3772e133e..893a27d90 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAcompanhamentoEquivalentes.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAcompanhamentoEquivalentes.java @@ -635,7 +635,8 @@ public class RelatorioAcompanhamentoEquivalentes extends Relatorio { sql.append("AND CR.ROLOPERATIVO_ID = :ROLOPERATIVO_ID "); sql.append("AND BO.ACTIVO = 1 "); sql.append("AND BO.INDSTATUSOPERACION = 'F' "); - sql.append("AND BO.MOTIVOCANCELACION_ID IS NULL OR BO.MOTIVOCANCELACION_ID = 0 "); + sql.append("AND ( BO.MOTIVOCANCELACION_ID IS NULL OR BO.MOTIVOCANCELACION_ID = 0 ) "); + sql.append(" AND BO.CATEGORIA_ID <> ").append(CONSTANTE_GRATUIDADE_CRIANCA) ; sql.append("GROUP BY CR.CORRIDA_ID, CR.FECCORRIDA "); sql.append("ORDER BY CR.FECCORRIDA"); diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAgenciaFechamento.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAgenciaFechamento.java index 279912094..3c9021965 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAgenciaFechamento.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAgenciaFechamento.java @@ -98,13 +98,14 @@ public abstract class RelatorioAgenciaFechamento extends Relatorio { * @throws ParseException */ protected void carregarDadosTotaisVenda(String fecInicio, String fecFinal, String empresa, String empresaNome, String puntoVenta) throws SQLException, ParseException { - + boolean isDiario = TipoRelatorioFechamentoEnum.DIARIO.equals(tipoRelatorio); NamedParameterStatement stmt = new NamedParameterStatement(getConexao(), criarQueryBilhetesVenda(puntoVenta, empresa)); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss"); - ResultSet rset1 = criaResultSet(fecInicio, fecFinal, sdf, stmt); - + String dataInicial = fecInicio; + String dataFinal = fecFinal; + sdf = (isDiario ? new SimpleDateFormat("yyyy-MM-dd hh:mm:ss") : new SimpleDateFormat("dd/MM/yyyy hh:mm:ss")); StringBuilder puntoVentaIds = new StringBuilder(); puntoVentaIds.append(" 0"); @@ -121,7 +122,12 @@ public abstract class RelatorioAgenciaFechamento extends Relatorio { Integer qtdedigitado = rset1.getInt("qtdedigitado"); Integer qtdeAnulado = rset1.getInt("qtdeAnulado"); Integer qtdeDevolvido = rset1.getInt("qtdeDevolvido"); - + + if (isDiario) { + dataInicial = rset1.getString("DATA"); + dataFinal = rset1.getString("DATA"); + } + vendido = rset1.getBigDecimal("vendido"); BigDecimal digitado = rset1.getBigDecimal("digitado"); BigDecimal anulado = rset1.getBigDecimal("anulado"); @@ -129,11 +135,12 @@ public abstract class RelatorioAgenciaFechamento extends Relatorio { total = preencherAgenciaFechamento(empresaNome, rset1, agenciaFechamento, total, vendido, qtdevendido, qtdedigitado, qtdeAnulado, qtdeDevolvido, digitado, anulado, devolvido); - carregarDadosReceitaDespesa(fecInicio, fecFinal, empresa, sdf, agenciaFechamento, total, vendido, puntoVentaId); + carregarDadosReceitaDespesa(dataInicial, dataFinal, isDiario, empresa, sdf, agenciaFechamento, total, vendido, puntoVentaId); lsDadosRelatorio.add(agenciaFechamento); } - inserirReceitaDespesa(fecInicio, fecFinal, empresa, puntoVentaIds, empresaNome); + //Comentado para atender ao mantis 23925 + //inserirReceitaDespesa(fecInicio, fecFinal, empresa, puntoVentaIds, empresaNome); } @@ -154,8 +161,12 @@ public abstract class RelatorioAgenciaFechamento extends Relatorio { * @throws SQLException * @throws ParseException */ - protected void carregarDadosReceitaDespesa(String fecInicio, String fecFinal, String empresa, SimpleDateFormat sdf, RelatorioAgenciaFechamentoAntigoBean agenciaFechamento, BigDecimal total, BigDecimal vendido, String puntoVentaId) throws SQLException, ParseException { + protected void carregarDadosReceitaDespesa(String fecInicio, String fecFinal, Boolean isDiario, String empresa, SimpleDateFormat sdf, RelatorioAgenciaFechamentoAntigoBean agenciaFechamento, BigDecimal total, BigDecimal vendido, String puntoVentaId) throws SQLException, ParseException { NamedParameterStatement stmt = new NamedParameterStatement(getConexao(), criarQueryReceitaDespesa(puntoVentaId, empresa)); + if (isDiario) { + fecInicio = fecInicio.substring(0, 10).toString() + " 00:00:00"; + fecFinal = fecFinal.substring(0, 10).toString() + " 23:59:59"; + } stmt.setTimestamp("de", new java.sql.Timestamp(sdf.parse(fecInicio).getTime())); stmt.setTimestamp("ate", new java.sql.Timestamp(sdf.parse(fecFinal).getTime())); @@ -318,7 +329,7 @@ public abstract class RelatorioAgenciaFechamento extends Relatorio { sql.append(" AND cd.TURNO_ID IS NOT NULL "); sql.append(" AND cd.FECCORTE BETWEEN :de AND :ate "); sql.append(" AND cd.puntoventa_id = pv.puntoventa_id "); - sql.append(" AND pv.puntoventa_id not in ( " + puntoVentaIds.toString() + ") "); + sql.append(" AND pv.puntoventa_id in ( " + puntoVentaIds.toString() + ") "); if (empresa != null && !empresa.equals("") && !empresa.equals("-1")) { sql.append(" AND ee.EMPRESA_ID = " + empresa + " "); diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAproveitamentoFinanceiro.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAproveitamentoFinanceiro.java index 57699cb1d..1a82ce17e 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAproveitamentoFinanceiro.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAproveitamentoFinanceiro.java @@ -71,48 +71,45 @@ public class RelatorioAproveitamentoFinanceiro extends Relatorio { sql.append(" SELECT "); sql.append(" r.DESCRUTA as linha, "); sql.append(" r.ruta_id as rutaid, "); - sql.append(" count( c.caja_id) as passageiros, "); - sql.append(" sum( c.PRECIOPAGADO )as valor, "); - sql.append(" to_char( c.FECCORRIDA, 'D') as dia, "); + sql.append(" count( c.boleto_id) as passageiros, "); + sql.append(" sum( coalesce(c.preciopagado, 0) )as valor, "); + sql.append(" to_char( co.FECCORRIDA, 'D') as dia, "); // Quantidade de dias da semana diferente vendidas // "WW" Esse parâmetro para o to_char tras o dia da semana da data - sql.append(" coalesce(count(DISTINCT to_char( c.FECCORRIDA, 'WW')), 0) as qtde, "); + sql.append(" coalesce(count(DISTINCT to_char( co.FECCORRIDA, 'WW')), 0) as qtde, "); sql.append(" r.indsentidoida as sentido, "); sql.append(" da.cantasientos as assentos, "); sql.append(" TO_CHAR(co.fechorsalidaoriginal ,'HH24:mi') as horario, "); - sql.append(" c.CORRIDA_ID as servico "); - sql.append(" FROM CAJA c "); - sql.append(" inner join corrida co "); + sql.append(" co.CORRIDA_ID as servico "); + sql.append(" FROM boleto c "); + sql.append(" RIGHT OUTER JOIN corrida co "); sql.append(" on c.CORRIDA_ID = co.CORRIDA_ID "); sql.append(" and c.FECCORRIDA = co.FECCORRIDA "); sql.append(" and co.ACTIVO = 1 "); sql.append(" inner join ruta r "); - sql.append(" on c.RUTA_ID = r.RUTA_ID "); + sql.append(" on co.RUTA_ID = r.RUTA_ID "); sql.append(" and r.ACTIVO = 1 "); sql.append(" inner join MARCA m "); - sql.append(" on m.marca_id = c.marca_id "); + sql.append(" on m.marca_id = co.marca_id "); sql.append(" and m.activo = 1 "); sql.append(" left join rol_operativo ro "); sql.append(" on ro.roloperativo_id = co.roloperativo_id "); sql.append(" left join diagrama_autobus da "); sql.append(" on ro.diagramaautobus_id = da.diagramaautobus_id "); - sql.append(" WHERE c.activo = 1 "); + sql.append(" WHERE co.activo = 1 "); sql.append(" AND m.EMPRESA_ID = :EMPRESA_ID "); - sql.append(" and c.FECCORRIDA >= :DATA_INICIAL "); - sql.append(" and c.FECCORRIDA <= :DATA_FINAL "); + sql.append(" and co.FECCORRIDA >= :DATA_INICIAL "); + sql.append(" and co.FECCORRIDA <= :DATA_FINAL "); if (parametros.get("LINHAS") != null && !possuiFiltroTodos("LINHAS")) { - sql.append(" and c.ruta_id IN (" + parametros.get("LINHAS").toString() + ")"); + sql.append(" and co.ruta_id IN (" + parametros.get("LINHAS").toString() + ")"); } sql.append(" and c.MOTIVOCANCELACION_ID is null "); - sql.append(" and c.INDREIMPRESION = 0 "); - sql.append(" and c.MOTIVOREIMPRESION_ID is null "); - sql.append(" and c.INDSTATUSBOLETO = 'V' "); sql.append(" GROUP by r.DESCRUTA, r.ruta_id, r.indsentidoida, da.cantasientos, "); - sql.append(" to_char( c.FECCORRIDA, 'D'), TO_CHAR(co.fechorsalidaoriginal ,'HH24:mi'), "); - sql.append(" c.CORRIDA_ID "); - sql.append(" ORDER by r.DESCRUTA, r.indsentidoida desc, to_char( c.FECCORRIDA, 'D') "); + sql.append(" to_char( co.FECCORRIDA, 'D'), TO_CHAR(co.fechorsalidaoriginal ,'HH24:mi'), "); + sql.append(" co.CORRIDA_ID "); + sql.append(" ORDER by r.DESCRUTA, r.indsentidoida desc, to_char( co.FECCORRIDA, 'D') "); sql.append(" ) "); sql.append("PIVOT "); sql.append("( "); diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioBPe.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioBPe.java index 4a4889c66..2fb9305d9 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioBPe.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioBPe.java @@ -58,6 +58,7 @@ public class RelatorioBPe extends Relatorio { dataResult.put("dtvenda", rset.getString("dtvenda")); dataResult.put("hrvenda", rset.getString("hrvenda")); dataResult.put("locpuntoventa", rset.getString("locpuntoventa")); + dataResult.put("numPuntoVenta", rset.getString("numPuntoVenta")); dataResult.put("origem", rset.getString("origem")); dataResult.put("destino", rset.getString("destino")); dataResult.put("dtviagem", rset.getString("dtviagem")); @@ -94,7 +95,7 @@ public class RelatorioBPe extends Relatorio { ConstanteService constanteService = (ConstanteService) AppContext.getApplicationContext().getBean("constanteService"); String estados = (String) parametros.get("ESTADOS_ID"); - Integer empresaId = (Integer) parametros.get("EMPRESA_ID"); + String empresaId = (String) parametros.get("EMPRESA_ID"); String status = (String) parametros.get("STATUS"); String chBpe = (String) parametros.get("CHBPE"); String numBpe = (String) parametros.get("NUMBPE"); @@ -103,7 +104,7 @@ public class RelatorioBPe extends Relatorio { String alias = (String) parametros.get("ALIAS"); sql.append(" SELECT "); - sql.append(" dtvenda, hrvenda, locpuntoventa, origem, destino, dtviagem, vlbpe, valortarifa, valortaxa, valorpedagio, "); + sql.append(" dtvenda, hrvenda, locpuntoventa,numPuntoVenta, origem, destino, dtviagem, vlbpe, valortarifa, valortaxa, valorpedagio, "); sql.append(" valorseguro, valoroutros, chbpe, protocolo, num_bpe, numserie_bpe, status, obs, qrcode, errocontingencia "); sql.append(" FROM ( "); @@ -131,11 +132,11 @@ public class RelatorioBPe extends Relatorio { return sql.toString(); } - private void getWhere(StringBuilder sql, ConstanteService constanteService, String estados, Integer empresaId, String status, String chBpe, String numBpe, Date dtInicio, Date dtFim) { + private void getWhere(StringBuilder sql, ConstanteService constanteService, String estados, String empresaId, String status, String chBpe, String numBpe, Date dtInicio, Date dtFim) { sql.append(" WHERE e.ACTIVO = 1 "); if (empresaId != null) { - sql.append(" AND ep.EMPRESA_ID = " + empresaId + " "); + sql.append(" AND ep.EMPRESA_ID IN ( " + empresaId + " ) "); } if (estados != null) { sql.append(" AND e.ESTADO_ID IN ( " + estados + " )"); @@ -149,7 +150,7 @@ public class RelatorioBPe extends Relatorio { } else if (status != null && status.equals("S")) {//Substituidos sql.append(" AND bpe.CODSTAT IN ('100', '102') AND bpeSub.BPE_ID IS NOT NULL AND bol.ACTIVO = 1 "); } else if (status != null && status.equals("SB")) {//Substituicao - sql.append(" AND bpe.CODSTAT IN ('100', '102','150') AND bpe.TIPOSUBSTITUICAO IS NOT NULL AND bol.ACTIVO = 1 and bpeSub.CODSTAT IN('150','100','102') "); + sql.append(" AND ((bpe.CODSTAT IN ('100', '102', '150') AND bpe.TIPOSUBSTITUICAO IS NOT NULL AND bol.ACTIVO = 1 and bpeSub.CODSTAT IN ('100', '102', '150')) or (bpe.CODSTAT IN ('100', '102', '150') AND bpe.TIPOSUBSTITUICAO IS NOT NULL AND bol.ACTIVO = 1 )) "); } else if (status != null && status.equals("NE")) {//Nao Embarcado sql.append(" AND bpe.CODSTAT = '135' AND bpe.TIPOEVENTO = '110115' AND bol.ACTIVO = 1 "); } else if (status != null && status.equals("R")) {//Rejeitado @@ -161,6 +162,9 @@ public class RelatorioBPe extends Relatorio { } else if (status != null && status.equals("PE")) {//Pendente Envio sql.append(" AND bpe.CODSTAT IN ('-1','-2') "); } + else if (status != null && status.equals("T")) {//Opcao Todas + sql.append(opcaoTodas()); + } if(dtInicio != null && dtFim != null) { Constante constanteBPeOtimizado = constanteService.buscarPorNomeConstante(Constantes.RELATORIO_BPE_OTIMIZADO); @@ -183,6 +187,22 @@ public class RelatorioBPe extends Relatorio { } } + private String opcaoTodas() { + + StringBuilder sql = new StringBuilder(); + + sql.append(" AND ((bpe.CODSTAT = '100' AND bol.ACTIVO = 1) OR (bpe.CODSTAT = '135' AND bpe.TIPOEVENTO = '110111' AND bol.ACTIVO = 1 ) "); + sql.append(" OR (bpe.CODSTAT IN ('100', '102') AND bpeSub.BPE_ID IS NOT NULL AND bol.ACTIVO = 1) "); + sql.append(" OR ((bpe.CODSTAT IN ('100', '102', '150') AND bpe.TIPOSUBSTITUICAO IS NOT NULL AND bol.ACTIVO = 1 and bpeSub.CODSTAT IN ('100', '102', '150')) or (bpe.CODSTAT IN ('100', '102', '150') AND bpe.TIPOSUBSTITUICAO IS NOT NULL AND bol.ACTIVO = 1 )) "); + sql.append(" OR (bpe.CODSTAT = '135' AND bpe.TIPOEVENTO = '110115' AND bol.ACTIVO = 1) "); + sql.append(" OR (bpe.CODSTAT NOT IN ('100','135','102','150','-1','-2')) "); + sql.append(" OR (bpe.CODSTAT IN ('100', '150') AND bpe.INDCONTINGENCIA = 1 AND bol.ACTIVO = 1) "); + sql.append(" OR (bpe.CODSTAT IN ('-10','-20') AND bol.ACTIVO = 1) "); + sql.append(" OR (bpe.CODSTAT IN ('-1','-2'))) "); + + return sql.toString(); + } + private void getSelectFrom(StringBuilder sql, String alias) { sql.append("SELECT"); sql.append(" TO_CHAR(COALESCE(bpe.DT_VENDA,bol.FECHORVENTA),'dd/mm/yyyy') as dtvenda, "); @@ -194,6 +214,7 @@ public class RelatorioBPe extends Relatorio { sql.append(" COALESCE(destA.DESCPARADA, dest.DESCPARADA) as destino,"); } sql.append(" locpv.DESCPARADA as locpuntoventa, "); + sql.append(" pv.NUMPUNTOVENTA as numPuntoVenta, "); sql.append(" ori.DESCPARADA as origem, "); sql.append(" dest.DESCPARADA as destino,"); @@ -217,7 +238,7 @@ public class RelatorioBPe extends Relatorio { sql.append(" case "); sql.append(" when bpe.tiposubstituicao is null and bpeSub.bpe_id is null and bpe.indcontingencia = 0 then 'Autorizado' "); sql.append(" when bpe.tiposubstituicao is null and bpeSub.bpe_id is null and bpe.indcontingencia = 1 then 'Aut.Conting.' "); - sql.append(" when bpe.tiposubstituicao is not null then 'Autorizado/Substitução' "); + sql.append(" when bpe.tiposubstituicao is not null then 'Autorizado/Substituição' "); sql.append(" when bpeSub.bpe_id is not null then 'Autorizado/Substituído' "); sql.append(" else 'Autorizado' "); sql.append(" end "); @@ -225,7 +246,7 @@ public class RelatorioBPe extends Relatorio { sql.append(" when '102' then ( "); sql.append(" case "); - sql.append(" when bpe.tiposubstituicao is not null then 'Substitução' "); + sql.append(" when bpe.tiposubstituicao is not null then 'Substituição' "); sql.append(" when bpeSub.bpe_id is not null then 'Substituído' "); sql.append(" end "); sql.append(" ) "); @@ -251,7 +272,7 @@ public class RelatorioBPe extends Relatorio { sql.append(" bpe.QRCODE, bpe.errocontingencia "); sql.append(" FROM BPE bpe "); - sql.append(" LEFT JOIN BPE bpeSub ON bpe.BPESUBSTITUICAO_ID = bpeSub.BPE_ID AND bpeSub.activo = 1 "); + sql.append(" LEFT JOIN BPE bpeSub on (bpeSub.bpesubstituicao_id = bpe.bpe_id and bpeSub.activo = 1) "); sql.append(" LEFT JOIN BOLETO bol ON bol.BOLETO_ID = bpe.BOLETO_ID and bpe.activo = 1 "); sql.append(" LEFT JOIN estado e ON e.CODIBGE = bpe.UF "); sql.append(" LEFT JOIN marca ma ON bol.MARCA_ID = ma.MARCA_ID "); diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioCadastroClientesDetalhado.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioCadastroClientesDetalhado.java index 60e8aedc3..a46d9d314 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioCadastroClientesDetalhado.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioCadastroClientesDetalhado.java @@ -47,6 +47,8 @@ public class RelatorioCadastroClientesDetalhado extends Relatorio { dataResult.put("usuario", rset.getString("usuario")); dataResult.put("codigoPuntoVenta", rset.getString("codigoPuntoVenta")); dataResult.put("puntoVenta", rset.getString("puntoVenta")); + dataResult.put("descIdentificaUno", rset.getString("descIdentificaUno")); + dataResult.put("descIdentificaDos", rset.getString("descIdentificaDos")); this.dados.add(dataResult); } @@ -83,8 +85,19 @@ public class RelatorioCadastroClientesDetalhado extends Relatorio { sql.append("AND empresaFidelidad.EMPRESA_ID = empresa.EMPRESA_ID "); sql.append("AND clienteFidelidad.CLIENTE_ID = cliente.CLIENTE_ID) AS \"numFidelidade\", "); sql.append("cliente.NOMBCLIENTE AS \"cliente\", "); - sql.append("cliente.NUMIDENTIFICAUNO AS \"identificaUno\", "); - sql.append("cliente.NUMIDENTIFICADOS AS \"identificaDos\", "); + /*Foi feito esse CASE para forçar que o CPF fica no identificaUno e o RG identificaDos*/ + sql.append(" CASE "); + sql.append(" WHEN CLIENTE.TIPOIDENTIFICAUNO_ID = 2 THEN cliente.NUMIDENTIFICAUNO "); + sql.append(" WHEN CLIENTE.TIPOIDENTIFICADOS_ID = 2 THEN cliente.NUMIDENTIFICADOS "); + sql.append(" ELSE '' "); + sql.append(" END AS \"identificaUno\", "); + sql.append("ti.DESCTIPO AS \"descIdentificaUno\", "); + sql.append(" CASE "); + sql.append(" WHEN CLIENTE.TIPOIDENTIFICAUNO_ID = 1 THEN cliente.NUMIDENTIFICAUNO "); + sql.append(" WHEN CLIENTE.TIPOIDENTIFICADOS_ID = 1 THEN cliente.NUMIDENTIFICADOS "); + sql.append(" ELSE '' "); + sql.append(" END AS \"identificaDos\", "); + sql.append("ti2.DESCTIPO AS \"descIdentificaDos\", "); sql.append("cliente.FECNACIMIENTO AS \"fecNascimento\", "); sql.append("cliente.NUMTELEFONODOS AS \"celular\", "); sql.append("cliente.NUMTELEFONO AS \"telefone\", "); @@ -104,6 +117,8 @@ public class RelatorioCadastroClientesDetalhado extends Relatorio { sql.append("INNER JOIN PUNTO_VENTA puntoVenta ON usuarioUbicacion.PUNTOVENTA_ID = puntoVenta.PUNTOVENTA_ID "); sql.append("INNER JOIN TIPO_PTOVTA tipoPuntoVenta ON tipoPuntoVenta.TIPOPTOVTA_ID = puntoVenta.TIPOPTOVTA_ID "); sql.append("LEFT JOIN EMPRESA empresa ON empresa.EMPRESA_ID = cliente.EMPRESA_ID "); + sql.append("LEFT JOIN TIPO_IDENTIFICACION ti ON ti.TIPOIDENTIFICACION_ID = CLIENTE.TIPOIDENTIFICAUNO_ID "); + sql.append("LEFT JOIN TIPO_IDENTIFICACION ti2 ON TI2.TIPOIDENTIFICACION_ID = CLIENTE.TIPOIDENTIFICADOS_ID "); sql.append("WHERE cliente.ACTIVO = 1 "); sql.append("AND usuarioUbicacion.ACTIVO = 1 "); diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioCheckin.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioCheckin.java index 91dc20919..6b77314c8 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioCheckin.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioCheckin.java @@ -34,6 +34,7 @@ public class RelatorioCheckin extends Relatorio { Date fecFinal = (Date) getParametros().get("DATA_FINAL"); fecInicio = DateUtil.inicioFecha(fecInicio); fecFinal = DateUtil.fimFecha(fecFinal); + if (StringUtils.isNotBlank(idsBilheteiros)) { String []ls = idsBilheteiros.split(","); @@ -103,11 +104,14 @@ public class RelatorioCheckin extends Relatorio { sql.append("inner join boleto_checkin bc on b.boleto_id = bc.boletooriginal_id "); sql.append("inner join parada o on b.origen_id = o.parada_id "); sql.append("inner join usuario u on bc.usuario_id = u.usuario_id "); + + sql.append(" where b.activo = 1 "); sql.append("and bc.FECMODIF between ? and ? "); sql.append(corridaId == null ? "" : " and b.corrida_id = ? "); sql.append(origenId == null ? "" : " and b.origen_id = ? "); sql.append((lsInt == null || lsInt.size() == 0) ? "" : " and u.USUARIO_ID in ( "+ createIn(lsInt.size()) + ") "); + sql.append(" order by bc.datacancelado desc"); return sql.toString(); diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDepositos.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDepositos.java index c421b51dc..69fa8f820 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDepositos.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDepositos.java @@ -73,10 +73,17 @@ public class RelatorioDepositos extends Relatorio { deposito.setDtmotivo(rs.getDate("dtmotivo")); deposito.setSaldo(rs.getBigDecimal("saldo").multiply(BigDecimal.valueOf(-1))); deposito.setVrdeposito(rs.getBigDecimal("vrdeposito")); + BigDecimal vlrBoleto=rs.getBigDecimal("vlrBoleto"); + deposito.setVrdeposito(deposito.getVrdeposito().add(vlrBoleto)); deposito.setVrfechamento(rs.getBigDecimal("vrfechamento")); deposito.setEmpresaId(rs.getInt("empresaId")); deposito.setPuntoventaId(rs.getInt("puntoventaId")); + + if (! filtrarPendentes){ + deposito.setNumdeposito(rs.getString("numdeposito")); + } + boolean isPontoVendaEmpresaDiferente = (puntoventaIdAux == null || !puntoventaIdAux.equals(deposito.getPuntoventaId())) || (empresaIdAux == null || !empresaIdAux.equals(deposito.getEmpresaId())); @@ -152,6 +159,7 @@ public class RelatorioDepositos extends Relatorio { } sql.append(" tmp.vrdeposito, "); + sql.append(" vlrboleto, "); sql.append(" tmp.puntoventaId, "); sql.append(" tmp.empresaId "); sql.append(" FROM "); @@ -163,6 +171,7 @@ public class RelatorioDepositos extends Relatorio { sql.append(" f.fecfechamento AS dtmotivo, "); sql.append(" ( SUM(NVL(fd.valor_pago,0)) - f.total ) AS saldo, "); sql.append(" SUM(NVL(fd.valor_pago,0)) AS vrdeposito , "); + sql.append(" SUM(NVL(fbol.valordocumento,0)) AS vlrboleto, "); sql.append(" f.total AS vrfechamento, "); if (! filtrarPendentes){ @@ -184,6 +193,8 @@ public class RelatorioDepositos extends Relatorio { sql.append(" LEFT JOIN empresa_contabancaria ecb "); sql.append(" ON ecb.EMPRESACONTABANCARIA_ID = fdp.EMPRESACONTABANCARIA_ID "); sql.append(" AND ecb.activo = 1 "); + sql.append(" LEFT JOIN fechamento_boleto fbol ON f.fechamentocntcorrente_id = fbol.fechamentocntcorrente_id and fbol.indboletoquitado=1 "); + sql.append(" WHERE f.fecfechamento BETWEEN ? AND ? "); sql.append(" AND f.activo = 1 "); sql.append(" AND e.activo = 1 "); @@ -206,7 +217,7 @@ public class RelatorioDepositos extends Relatorio { if (!filtrarPendentes){ sql.append(" fdp.NUMDEPOSITO, "); } - + sql.append(" fbol.valordocumento, "); sql.append(" f.total ) tmp "); if (filtrarPendentes){ diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioEstoque.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioEstoque.java index 8be93d5ef..040d47da6 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioEstoque.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioEstoque.java @@ -28,8 +28,32 @@ public class RelatorioEstoque extends Relatorio { while (rset.next()) { Map dataResult = new HashMap(); - String formInicio = rset.getString("tipoVenta").equals(EnumTipoVenda.TPV_MANUAL.getId().toString()) ? - (rset.getString("ultimoFolioCaja") != null ? rset.getString("ultimoFolioCaja") : rset.getString("forminicial")) : rset.getString("forminicial"); + String tipoVenta = rset.getString("tipoVenta"); + String formfinal = rset.getString("formfinal"); + + String formInicio = rset.getString("forminicial"); + if (tipoVenta.equals(EnumTipoVenda.TPV_MANUAL.getId().toString())) { + + String ultimoFolioCaja = rset.getString("ultimoFolioCaja"); + + boolean isFormularioMaior = false; + try { + int ultimoFolioCajaInt = Integer.parseInt(ultimoFolioCaja); + int formfinalInt = Integer.parseInt(formfinal); + + if (ultimoFolioCaja != null && ultimoFolioCajaInt > formfinalInt) { + isFormularioMaior = true; + } + + } catch (Exception e) { + } + + if (isFormularioMaior) { + formInicio = formfinal; + } else { + formInicio = ultimoFolioCaja != null ? ultimoFolioCaja : formInicio; + } + } dataResult.put("aidf", rset.getString("aidf")); dataResult.put("empresa", rset.getString("nombempresa")); @@ -37,7 +61,7 @@ public class RelatorioEstoque extends Relatorio { dataResult.put("agencia", rset.getString("nombpuntoventa")); dataResult.put("serie", rset.getString("serie")); dataResult.put("forminicio", formInicio); - dataResult.put("formfinal", rset.getString("formfinal")); + dataResult.put("formfinal", formfinal); dataResult.put("estado", rset.getString("nombestado")); dataResult.put("tipo", rset.getString("tipo")); this.dados.add(dataResult); @@ -60,7 +84,7 @@ public class RelatorioEstoque extends Relatorio { sql.append(" dab.NUMSERIEPREIMPRESA AS serie, "); sql.append(" es.descestacion AS estacao, "); sql.append(" tp.desctipo AS tipo, "); - + sql.append(" ( case "); sql.append(" when "); sql.append(" dab.STATUSOPERACION = 0 "); @@ -70,7 +94,7 @@ public class RelatorioEstoque extends Relatorio { sql.append(" coalesce(fp.FOLIOPREIMPRESO,dab.NUMFOLIOINICIAL) "); sql.append(" end ) AS forminicial,"); sql.append(" dab.NUMFOLIOFINAL AS formfinal, "); - + sql.append(" ( SELECT "); sql.append(" MAX(to_number(c.numfoliopreimpreso)) + 1 AS numfoliopreimpreso"); sql.append(" FROM Caja c"); diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioGratuidadeAGR.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioGratuidadeAGR.java index 2b8b387f6..816a6b7c8 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioGratuidadeAGR.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioGratuidadeAGR.java @@ -53,7 +53,7 @@ public class RelatorioGratuidadeAGR extends Relatorio { String linhaIds = parametros.get("linhaIds").toString(); String empresa = parametros.get("empresa") != null ? parametros.get("empresa").toString() : ""; - String sql = getSql(fecInicioVenda, fecFinalVenda, linhaIds, tipGratuIds, clienteIds, empresa); + String sql = getSql(fecInicioVenda, fecFinalVenda, linhaIds, tipGratuIds, clienteIds, empresa, fecInicioViagem, fecFinalViagem); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss"); NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql); @@ -125,7 +125,7 @@ public class RelatorioGratuidadeAGR extends Relatorio { protected void processaParametros() throws Exception { } - private String getSql(String fecInicioVenda, String fecFinalVenda, String linha, String tipoGratu, String cliente, String empresa ) { + private String getSql(String fecInicioVenda, String fecFinalVenda, String linha, String tipoGratu, String cliente, String empresa, String fecInicioViagem, String fecFinalViagem ) { StringBuilder sql = new StringBuilder(3400); @@ -177,7 +177,9 @@ public class RelatorioGratuidadeAGR extends Relatorio { if( fecInicioVenda != null && fecFinalVenda !=null ){ sql.append(" AND b.fechorventa BETWEEN :fecInicioVenda AND :fecFinalVenda "); - }else { + } + + if( fecInicioViagem != null && fecFinalViagem !=null ){ sql.append(" AND b.fechorviaje BETWEEN :fecInicioViagem AND :fecFinalViagem "); } diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioGratuidadeARTESP.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioGratuidadeARTESP.java index 61062df97..dc7d34c05 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioGratuidadeARTESP.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioGratuidadeARTESP.java @@ -182,7 +182,7 @@ public class RelatorioGratuidadeARTESP extends Relatorio { StringBuilder sql = new StringBuilder(); - sql.append("SELECT distinct OC.DESCORGAO AS ORGAO, "); + sql.append("SELECT distinct OC.DESCORGAO AS ORGAO, "); sql.append("O.CODEMPRESAPORORGAO AS empresa,"); sql.append("B.FECHORVIAJE AS fechorviaje, "); sql.append("ori.cveparada AS codorigem, "); @@ -204,18 +204,15 @@ public class RelatorioGratuidadeARTESP extends Relatorio { sql.append("THEN b.DESCNUMDOC2 ELSE c.NUMIDENTIFICADOS "); sql.append("END AS CPF, "); sql.append("r.PREFIXO AS LINHA, "); - sql.append(" LISTAGG( "); - sql.append("cd.DESCCALLE || ', ' || cd.NUMEXTERIOR || '-' || "); - sql.append("cd.DESCIUDAD || '/' || cd.DESESTADO ,';;;;' )" ); - sql.append(" WITHIN GROUP( ORDER BY cd.CLIENTEDIRECCION_ID ASC )" ); - sql.append(" AS ENDERECO, "); + sql.append(" (select ed.desccalle || ', ' || ed.numexterior || '-' || ed.desciudad || '/' || ed.desestado "); + sql.append(" from cliente_direccion ed where ed.cliente_id = b.cliente_id and ed.activo = 1 and rownum = 1 ) ENDERECO, "); sql.append("COALESCE(c.numtelefono, CAJA.DESCTELEFONO) AS tel,"); sql.append("c.DESCCORREO AS email, "); sql.append("CASE "); - sql.append("WHEN B.MOTIVOCANCELACION_ID IN (31, 32, 90, 23,10) "); + sql.append("WHEN B.MOTIVOCANCELACION_ID IN (31, 32, 90, 23,10, 27) "); sql.append("THEN 1 ELSE 0 "); sql.append("END AS DESISTENCIA, "); - sql.append(" (COALESCE(T.PRECIO, 0) + COALESCE(T.IMPORTEPEDAGIO,0)) "); + sql.append(" (COALESCE(T.PRECIO, 0) + COALESCE(T.IMPORTEPEDAGIO,0)) "); sql.append("-(COALESCE(b.PRECIOPAGADO, 0) + COALESCE(b.IMPORTEPEDAGIO,0)) AS vlrGratuidade, "); sql.append(" bpe.chbpe as chaveBPE "); sql.append("FROM BOLETO b "); @@ -223,14 +220,13 @@ public class RelatorioGratuidadeARTESP extends Relatorio { sql.append("JOIN categoria ca ON b.categoria_id = ca.categoria_id "); sql.append("JOIN empresa e ON e.empresa_id = b.EMPRESACORRIDA_ID "); sql.append("JOIN marca m ON m.EMPRESA_ID = e.EMPRESA_ID "); - sql.append("JOIN parada ori ON ori.parada_id = b.origen_id "); - sql.append("JOIN parada des ON des.parada_id = b.destino_id "); + sql.append("JOIN parada ori ON ori.parada_id = b.origen_id "); + sql.append("JOIN parada des ON des.parada_id = b.destino_id "); sql.append("JOIN ruta r ON r.ruta_id = b.ruta_id "); - sql.append("JOIN RUTA_COMBINACION rc ON rc.ruta_id=r.ruta_id and rc.activo=1 "); - sql.append("JOIN TRAMO tr ON tr.tramo_id=rc.tramo_id and tr.activo=1 "); - sql.append("LEFT JOIN cliente c ON c.cliente_id = b.cliente_id "); - sql.append("LEFT JOIN CLIENTE_DIRECCION cd ON cd.cliente_id = c.cliente_id AND cd.ACTIVO = 1 "); - sql.append("LEFT JOIN ORGAO_CONCEDENTE OC ON r.ORGAOCONCEDENTE_ID = OC.ORGAOCONCEDENTE_ID "); + sql.append("LEFT JOIN cliente c ON c.cliente_id = b.cliente_id "); + sql.append("JOIN RUTA_COMBINACION rc ON rc.ruta_id=r.ruta_id and rc.activo=1 "); + sql.append("JOIN TRAMO tr ON tr.tramo_id=rc.tramo_id and tr.activo=1 "); + sql.append("LEFT JOIN ORGAO_CONCEDENTE OC ON r.ORGAOCONCEDENTE_ID = OC.ORGAOCONCEDENTE_ID "); sql.append("JOIN ORGAO_EMP_PARAM O ON e.empresa_id = O.EMPRESA_ID AND OC.ORGAOCONCEDENTE_ID = O.ORGAOCONCEDENTE_ID AND O.ACTIVO = 1 "); sql.append("JOIN TARIFA T ON r.RUTA_ID = T.RUTA_ID AND b.ORIGEN_ID = T.ORIGEN_ID AND b.DESTINO_ID = T.DESTINO_ID AND b.CLASESERVICIO_ID = T.CLASESERVICIO_ID AND m.MARCA_ID = T.MARCA_ID AND oc.ORGAOCONCEDENTE_ID = T.ORGAOCONCEDENTE_ID AND T.TRAMO_ID=tr.TRAMO_ID AND T.ACTIVO=1 "); sql.append("JOIN VIGENCIA_TARIFA vt ON vt.VIGENCIATARIFA_ID = t.VIGENCIATARIFA_ID AND b.FECHORVIAJE BETWEEN vt.FECINICIOVIGENCIA AND vt.FECFINVIGENCIA "); @@ -257,23 +253,14 @@ public class RelatorioGratuidadeARTESP extends Relatorio { if (estados != null) { sql.append(" AND e.ESTADO_ID IN ( " + estados + " )"); } - - sql.append(" group by OC.DESCORGAO, O.CODEMPRESAPORORGAO, B.FECHORVIAJE, ca.desccategoria, "); - sql.append(" ori.cveparada, ori.descparada, des.cveparada, B.NUMASIENTO, des.descparada, "); - sql.append(" c.TIPOIDENTIFICAUNO_ID, c.TIPOIDENTIFICADOS_ID, "); - sql.append(" b.FECCORRIDA, COALESCE(c.numtelefono, CAJA.DESCTELEFONO), c.DESCCORREO, CASE WHEN b.DESCNUMDOC IS NOT NULL THEN b.DESCNUMDOC ELSE c.NUMIDENTIFICAUNO END, "); - sql.append(" b.NUMFOLIOSISTEMA, CASE WHEN b.DESCNUMDOC2 IS NOT NULL THEN b.DESCNUMDOC2 ELSE c.NUMIDENTIFICADOS END, b.NOMBPASAJERO, b.NUMIDENTIFICACION, T.PRECIO, b.PRECIOPAGADO, b.descorgaodoc, r.PREFIXO, B.MOTIVOCANCELACION_ID, "); - sql.append(" T.IMPORTEOUTROS, T.IMPORTEPEDAGIO, T.IMPORTESEGURO, T.IMPORTETAXAEMBARQUE, T.IMPORTETPP, b.descorgaodoc, "); - sql.append(" b.IMPORTECATEGORIA, b.IMPORTEOUTROS, b.IMPORTEPEDAGIO, b.IMPORTESEGURO, b.IMPORTETAXAEMBARQUE, b.IMPORTETPP, bpe.chbpe "); + sql.append(" ORDER BY OC.DESCORGAO, O.CODEMPRESAPORORGAO, b.FECHORVIAJE, descorigem, descdestino "); return sql.toString(); } - private String getSqlNoTabelaPreco(String fecInicioVenda, String fecFinalVenda, String linha, String tipoGratu, String empresa, String codOrgaoConcedente, String estados) { - StringBuilder sql = new StringBuilder(); sql.append("SELECT OC.DESCORGAO AS ORGAO,"); @@ -298,30 +285,29 @@ public class RelatorioGratuidadeARTESP extends Relatorio { sql.append(" ELSE c.NUMIDENTIFICADOS"); sql.append(" END AS CPF,"); sql.append(" r.PREFIXO AS LINHA,"); - sql.append(" LISTAGG(cd.DESCCALLE || ', ' || cd.NUMEXTERIOR || '-' || cd.DESCIUDAD || '/' || cd.DESESTADO, ';;;;') WITHIN GROUP("); - sql.append(" ORDER BY cd.CLIENTEDIRECCION_ID ASC) AS ENDERECO, "); - sql.append(" COALESCE(c.numtelefono, CAJA.DESCTELEFONO) AS tel,"); - sql.append(" c.DESCCORREO AS email,"); - sql.append(" CASE"); - sql.append(" WHEN B.MOTIVOCANCELACION_ID IN (31,32, 90, 23,10 ) THEN 1 ELSE 0 END AS DESISTENCIA, "); + sql.append(" (select ed.desccalle || ', ' || ed.numexterior || '-' || ed.desciudad || '/' || ed.desestado "); + sql.append(" from cliente_direccion ed where ed.cliente_id = b.cliente_id and ed.activo = 1 and rownum = 1 ) ENDERECO, "); + sql.append(" COALESCE(c.numtelefono, CAJA.DESCTELEFONO) AS tel,"); + sql.append(" c.DESCCORREO AS email,"); + sql.append(" CASE"); + sql.append(" WHEN B.MOTIVOCANCELACION_ID IN (31,32, 90, 23,10, 27 ) THEN 1 ELSE 0 END AS DESISTENCIA, "); sql.append(" (COALESCE(NULL, b.preciobase) + COALESCE(NULL, 0)) -(COALESCE(b.PRECIOPAGADO, 0) + COALESCE(b.IMPORTEPEDAGIO, 0)) AS vlrGratuidade,"); sql.append(" bpe.chbpe AS chaveBPE "); - sql.append("FROM BOLETO b "); - sql.append("LEFT JOIN CAJA ON B.BOLETO_ID = CAJA.TRANSACAO_ID ") ; - sql.append("JOIN categoria ca ON b.categoria_id = ca.categoria_id "); - sql.append("JOIN empresa e ON e.empresa_id = b.EMPRESACORRIDA_ID "); - sql.append("JOIN marca m ON m.EMPRESA_ID = e.EMPRESA_ID "); - sql.append("JOIN parada ori ON ori.parada_id = b.origen_id "); - sql.append("JOIN parada des ON des.parada_id = b.destino_id "); - sql.append("JOIN ruta r ON r.ruta_id = b.ruta_id "); + sql.append(" FROM BOLETO b "); + sql.append(" LEFT JOIN CAJA ON B.BOLETO_ID = CAJA.TRANSACAO_ID ") ; + sql.append(" JOIN categoria ca ON b.categoria_id = ca.categoria_id "); + sql.append(" JOIN empresa e ON e.empresa_id = b.EMPRESACORRIDA_ID "); + sql.append(" JOIN marca m ON m.EMPRESA_ID = e.EMPRESA_ID "); + sql.append(" JOIN parada ori ON ori.parada_id = b.origen_id "); + sql.append(" JOIN parada des ON des.parada_id = b.destino_id "); + sql.append(" JOIN ruta r ON r.ruta_id = b.ruta_id "); sql.append("LEFT JOIN cliente c ON c.cliente_id = b.cliente_id "); - sql.append("LEFT JOIN CLIENTE_DIRECCION cd ON cd.cliente_id = c.cliente_id AND cd.ACTIVO = 1 "); - sql.append("LEFT JOIN ORGAO_CONCEDENTE OC ON r.ORGAOCONCEDENTE_ID = OC.ORGAOCONCEDENTE_ID "); - sql.append("JOIN ORGAO_EMP_PARAM O ON e.empresa_id = O.EMPRESA_ID AND OC.ORGAOCONCEDENTE_ID = O.ORGAOCONCEDENTE_ID AND O.ACTIVO = 1 "); - sql.append("LEFT JOIN BPE bpe ON bpe.BOLETO_ID = b.BOLETO_ID "); - sql.append("LEFT JOIN estado e ON e.CODIBGE = bpe.UF AND e.ACTIVO =1 "); - sql.append("WHERE b.fechorviaje BETWEEN to_date(:fecInicioVenda,'dd/mm/yyyy hh24:mi') AND to_date(:fecFinalVenda,'dd/mm/yyyy hh24:mi') "); - sql.append("AND (b.MOTIVOCANCELACION_ID not in (4) or b.MOTIVOCANCELACION_ID is null) "); + sql.append(" LEFT JOIN ORGAO_CONCEDENTE OC ON r.ORGAOCONCEDENTE_ID = OC.ORGAOCONCEDENTE_ID "); + sql.append(" JOIN ORGAO_EMP_PARAM O ON e.empresa_id = O.EMPRESA_ID AND OC.ORGAOCONCEDENTE_ID = O.ORGAOCONCEDENTE_ID AND O.ACTIVO = 1 "); + sql.append(" LEFT JOIN BPE bpe ON bpe.BOLETO_ID = b.BOLETO_ID "); + sql.append(" LEFT JOIN estado e ON e.CODIBGE = bpe.UF AND e.ACTIVO =1 "); + sql.append(" WHERE b.fechorviaje BETWEEN to_date(:fecInicioVenda,'dd/mm/yyyy hh24:mi') AND to_date(:fecFinalVenda,'dd/mm/yyyy hh24:mi') "); + sql.append(" AND (b.MOTIVOCANCELACION_ID not in (4) or b.MOTIVOCANCELACION_ID is null) "); if (tipoGratu != null) { sql.append(" AND b.CATEGORIA_ID in (").append(tipoGratu).append(") "); @@ -342,39 +328,6 @@ public class RelatorioGratuidadeARTESP extends Relatorio { sql.append(" AND e.ESTADO_ID IN ( " + estados + " )"); } - sql.append("GROUP BY OC.DESCORGAO,"); - sql.append(" O.CODEMPRESAPORORGAO,"); - sql.append(" B.FECHORVIAJE,"); - sql.append(" ori.cveparada,"); - sql.append(" ori.descparada,"); - sql.append(" des.cveparada,"); - sql.append(" des.descparada,"); - sql.append(" B.NUMASIENTO,"); - sql.append(" b.NUMFOLIOSISTEMA,"); - sql.append(" b.NOMBPASAJERO,"); - sql.append(" CASE"); - sql.append(" WHEN b.DESCNUMDOC IS NOT NULL THEN b.DESCNUMDOC"); - sql.append(" ELSE c.NUMIDENTIFICAUNO"); - sql.append(" END,"); - sql.append(" c.TIPOIDENTIFICAUNO_ID,"); - sql.append(" b.descorgaodoc,"); - sql.append(" c.TIPOIDENTIFICADOS_ID,"); - sql.append(" CASE"); - sql.append(" WHEN b.DESCNUMDOC2 IS NOT NULL THEN b.DESCNUMDOC2"); - sql.append(" ELSE c.NUMIDENTIFICADOS"); - sql.append(" END,"); - sql.append(" r.PREFIXO,"); - sql.append(" c.DESCCORREO,"); - sql.append(" CASE"); - sql.append(" WHEN B.MOTIVOCANCELACION_ID IN (31,"); - sql.append(" 32,"); - sql.append(" 90,"); - sql.append(" 23,10) THEN 1"); - sql.append(" ELSE 0"); - sql.append(" END,"); - sql.append(" COALESCE(c.numtelefono, CAJA.DESCTELEFONO),"); - sql.append(" (COALESCE(NULL, b.preciobase) + COALESCE(NULL, 0)) -(COALESCE(b.PRECIOPAGADO, 0) + COALESCE(b.IMPORTEPEDAGIO, 0)), "); - sql.append(" bpe.chbpe "); sql.append("ORDER BY OC.DESCORGAO, "); sql.append(" O.CODEMPRESAPORORGAO,"); sql.append(" b.FECHORVIAJE,"); diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioIndiceIRK.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioIndiceIRK.java index 0c5518936..0f3c67e24 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioIndiceIRK.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioIndiceIRK.java @@ -187,7 +187,7 @@ public class RelatorioIndiceIRK extends Relatorio { sb.append(" INNER JOIN parada origen ON (origen.parada_id = tr.origen_id)"); sb.append(" INNER JOIN parada destino ON (destino.parada_id = tr.destino_id)"); sb.append(" WHERE cj.activo = 1"); - sb.append(" AND cj.motivocancelacion_id IS NULL"); + sb.append(" AND cj.motivocancelacion_id IS NULL and cj.indstatusboleto = 'V' "); sb.append(" and cj.feccorrida BETWEEN TO_DATE(:DATA_INICIO, 'DD/MM/YY hh24:mi:ss') AND TO_DATE(:DATA_FINAL, 'DD/MM/YY hh24:mi:ss') "); sb.append(rutaIds == null ||TODOS.equals(rutaIds) ? "" : " AND r.ruta_id IN ( " + rutaIds + " ) "); sb.append(corridasIds == null || TODOS.equals(corridasIds) ? "" : " AND cj.corrida_id IN ( " + corridasIds + " ) "); diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioLinhasHorario.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioLinhasHorario.java index ff2256b88..5c894b8b3 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioLinhasHorario.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioLinhasHorario.java @@ -507,7 +507,7 @@ public class RelatorioLinhasHorario extends Relatorio { sql.append(" INNER JOIN VIGENCIA_TARIFA VT ON (VT.VIGENCIATARIFA_ID = TF.VIGENCIATARIFA_ID AND C.FECCORRIDA BETWEEN VT.FECINICIOVIGENCIA AND VT.FECFINVIGENCIA ) "); - sql.append(" WHERE C.ACTIVO = 1 AND C.FECCORRIDA BETWEEN TO_DATE(:DATA_INICIO, 'dd/mm/yyyy hh24:mi:ss') AND TO_DATE(:DATA_FINAL, 'dd/mm/yyyy hh24:mi:ss') "); + sql.append(" WHERE C.ACTIVO NOT IN (0,2) AND C.FECCORRIDA BETWEEN TO_DATE(:DATA_INICIO, 'dd/mm/yyyy hh24:mi:ss') AND TO_DATE(:DATA_FINAL, 'dd/mm/yyyy hh24:mi:ss') "); if (lsNumServico.size() > 0) { for (Corrida corrida : lsNumServico) { @@ -563,7 +563,7 @@ public class RelatorioLinhasHorario extends Relatorio { - sql.append(" WHERE CO.ACTIVO = 1 "); + sql.append(" WHERE CO.ACTIVO NOT IN (0,2) "); sql.append(" AND RC.ACTIVO = 1"); sql.append(" AND T.ACTIVO = 1"); sql.append(" AND BO.INDSTATUSBOLETO != 'S' AND BO.MOTIVOCANCELACION_ID IS NULL "); diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioLinhasHorarioSimplificado.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioLinhasHorarioSimplificado.java index f0230a2ff..72a328059 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioLinhasHorarioSimplificado.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioLinhasHorarioSimplificado.java @@ -516,7 +516,7 @@ public class RelatorioLinhasHorarioSimplificado extends Relatorio { sql.append(" LEFT JOIN BOLETO B ON (B.CORRIDA_ID = C.CORRIDA_ID AND B.FECCORRIDA = C.FECCORRIDA AND B.ACTIVO = 1 AND B.MOTIVOCANCELACION_ID IS NULL "); sql.append(" AND (B.CATEGORIA_ID <> ").append(CONSTANTE_GRATUIDADE_CRIANCA).append(" OR PORCCATEGORIA = 100)) "); - sql.append(" WHERE C.ACTIVO = 1 "); + sql.append(" WHERE C.ACTIVO NOT IN (0,2) "); sql.append(" AND C.FECCORRIDA BETWEEN TO_DATE(:DATA_INICIO, 'DD/MM/YYYY hh24:mi:ss') AND TO_DATE(:DATA_FINAL, 'DD/MM/YYYY hh24:mi:ss') "); if (lsNumServico.size() > 0) { @@ -559,7 +559,7 @@ public class RelatorioLinhasHorarioSimplificado extends Relatorio { sql.append(" INNER JOIN BOLETO BO ON CO.CORRIDA_ID = BO.CORRIDA_ID AND CO.FECCORRIDA = BO.FECCORRIDA AND BO.ACTIVO = 1 "); sql.append(" INNER JOIN RUTA_COMBINACION RC ON RC.RUTA_ID = CO.RUTA_ID "); sql.append(" INNER JOIN TRAMO T ON RC.TRAMO_ID = T.TRAMO_ID AND T.ORIGEN_ID = BO.ORIGEN_ID AND T.DESTINO_ID = BO.DESTINO_ID "); - sql.append(" WHERE CO.ACTIVO = 1 "); + sql.append(" WHERE CO.ACTIVO NOT IN (0,2) "); sql.append(" AND RC.ACTIVO = 1"); sql.append(" AND T.ACTIVO = 1"); sql.append(" AND BO.INDSTATUSBOLETO != 'S' AND BO.MOTIVOCANCELACION_ID IS NULL "); diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioMovimentacaoBilhete.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioMovimentacaoBilhete.java index 4f1fc259d..8da876530 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioMovimentacaoBilhete.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioMovimentacaoBilhete.java @@ -563,19 +563,19 @@ public class RelatorioMovimentacaoBilhete extends Relatorio { sb.append("AND e.empresa_id = :empresa_id "); } - if (agencia_id != null) { + if (agencia_id != null && !agencia_id.equals(-1)) { sb.append("AND c.puntoventa_id = :puntoventa_id "); } - if (ruta_id != null) { + if (ruta_id != null && !ruta_id.equals(-1)) { sb.append("AND c.ruta_id = :ruta_id "); } - if (origem_id != null) { + if (origem_id != null && !origem_id.equals(-1)) { sb.append("AND ori.parada_id = :origem_id "); } - if (destino_id != null) { + if (destino_id != null && !destino_id.equals(-1)) { sb.append("AND des.parada_id = :destino_id "); } diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioOrigemDestino.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioOrigemDestino.java index 36daff20e..594854d5f 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioOrigemDestino.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioOrigemDestino.java @@ -70,19 +70,19 @@ public class RelatorioOrigemDestino extends Relatorio { bean.setFechorsalida(rs.getTimestamp("fechorsalida")); bean.setOrigem(rs.getString("origem")); bean.setDestino(rs.getString("destino")); - bean.setKm_tramo(rs.getBigDecimal("km_tramo")); + bean.setKm_tramo(limpaNulo(rs.getBigDecimal("km_tramo"))); bean.setDescruta(rs.getString("descruta")); bean.setIndsentidoida(rs.getInt("indsentidoida")); - bean.setKm_corrida(rs.getBigDecimal("km_corrida")); + bean.setKm_corrida(limpaNulo(rs.getBigDecimal("km_corrida"))); bean.setAbsolutos(rs.getBigDecimal("absolutos")); bean.setReceita(rs.getBigDecimal("receita")); bean.setPreciobase(rs.getBigDecimal("preciobase")); - bean.setEquivalente_total_corrida(rs.getBigDecimal("equivalente_total_corrida")); + bean.setEquivalente_total_corrida(limpaNulo(rs.getBigDecimal("equivalente_total_corrida"))); bean.setDisponibilidade(rs.getInt("disponibilidade")); bean.setViagens(rs.getInt("viagens")); bean.setAbsoluto_total_corrida(rs.getInt("absoluto_total_corrida")); - bean.setImportetaxaembarque(rs.getBigDecimal("importetaxaembarque")); - bean.setImportepedagio(rs.getBigDecimal("importepedagio")); + bean.setImportetaxaembarque(limpaNulo(rs.getBigDecimal("importetaxaembarque"))); + bean.setImportepedagio(limpaNulo(rs.getBigDecimal("importepedagio"))); bean.setOrigemId(rs.getInt("origen_id")); bean.setDestinoId(rs.getInt("destino_id")); @@ -689,4 +689,12 @@ public class RelatorioOrigemDestino extends Relatorio { } return ""; } + + private BigDecimal limpaNulo( BigDecimal val ) { + if( val == null ) { + return BigDecimal.ZERO; + }else { + return val; + } + } } diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout.java index 33c8a60e8..cc557dfbb 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout.java @@ -2,14 +2,19 @@ package com.rjconsultores.ventaboletos.relatorios.impl; import java.math.BigDecimal; import java.sql.Connection; +import java.sql.PreparedStatement; import java.sql.ResultSet; +import java.sql.SQLException; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; +import java.util.List; import java.util.Map; import com.rjconsultores.ventaboletos.relatorios.utilitarios.ArrayDataSource; import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; +import com.rjconsultores.ventaboletos.utilerias.MoneyHelper; import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement; public class RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout extends Relatorio { @@ -67,6 +72,7 @@ public class RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout extends String origem = map.get("origem").toString(); String destino = map.get("destino").toString(); String numRuta = map.get("numRuta").toString(); + BigDecimal tarifa = (BigDecimal) map.get("tarifa"); Long ida = (Long) map.get("totalida"); Long volta = (Long) map.get("totalvolta"); @@ -74,7 +80,7 @@ public class RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout extends if (origem.equals(rset.getString("destino")) && destino.equals(rset.getString("origem")) - && numRuta.equals(rset.getString("numRuta"))) { + && numRuta.equals(rset.getString("numRuta")) && (tarifa != null && MoneyHelper.isIgual(tarifa, rset.getBigDecimal("tarifa")))) { agrupar = true; if (ida == 0) { map.put("totalida", rset.getLong("totalida")); @@ -96,12 +102,12 @@ public class RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout extends } } - + this.resultSet = rset; } }); } - + @Override protected void processaParametros() throws Exception { } @@ -110,66 +116,81 @@ public class RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout extends StringBuilder sql = new StringBuilder(); sql.append(" SELECT DISTINCT "); - sql.append(" sum(b.preciopagado + b.importepedagio) as totalReceita, "); - sql.append(" tar.precio as tarifa, "); - sql.append(" e.nombempresa empresa, "); - sql.append(" r.descruta linha, "); - sql.append(" r.NUMRUTA, "); - sql.append(" ori.descparada AS origem, "); - sql.append(" des.descparada AS destino, "); - sql.append(" MAX(tr.CANTKMREAL) as km, "); - sql.append(" COUNT( DISTINCT "); - sql.append(" CASE "); - sql.append(" WHEN(r.indsentidoida = 1) THEN b.boleto_id "); - sql.append(" ELSE NULL "); - sql.append(" END "); - sql.append(" ) AS totalida, "); - sql.append(" COUNT( DISTINCT "); - sql.append(" CASE "); - sql.append(" WHEN(r.indsentidoida = 0) THEN b.boleto_id "); - sql.append(" ELSE NULL "); - sql.append(" END "); - sql.append(" ) AS totalvolta, "); - sql.append(" rc.rutacombinacion_id rutaCombinacionId "); - sql.append(" FROM "); - sql.append(" boleto b "); - sql.append(" JOIN empresa e ON e.empresa_id = b.empresacorrida_id "); - sql.append(" JOIN marca m ON m.empresa_id = b.empresacorrida_id "); - sql.append(" JOIN categoria ca ON b.categoria_id = ca.categoria_id "); - sql.append(" JOIN parada ori ON ori.parada_id = b.origen_id "); - sql.append(" JOIN parada des ON des.parada_id = b.destino_id "); - sql.append(" JOIN ruta r ON r.ruta_id = b.ruta_id "); - sql.append(" JOIN RUTA_COMBINACION rc ON rc.ruta_id = r.ruta_id and rc.activo = 1 "); - sql.append(" INNER JOIN tramo tr ON tr.TRAMO_ID =rc.TRAMO_ID AND tr.ORIGEN_ID = ori.PARADA_ID AND tr.DESTINO_ID = des.PARADA_ID AND tr.ACTIVO = 1 "); - sql.append(" JOIN clase_servicio cs ON (b.claseservicio_id = cs.claseservicio_id ) "); - sql.append(" INNER JOIN vigencia_tarifa vt ON b.fechorventa BETWEEN vt.feciniciovigencia AND vt.fecfinvigencia AND vt.activo = 1 "); - sql.append(" INNER JOIN tarifa tar ON (tar.ruta_id = b.ruta_id "); - sql.append(" AND tar.marca_id = m.marca_id "); - sql.append(" AND tar.claseservicio_id = b.claseservicio_id "); - sql.append(" AND tar.vigenciatarifa_id = vt.vigenciatarifa_id "); - sql.append(" AND tar.origen_id = b.origen_id "); - sql.append(" AND tar.destino_id = b.destino_id "); - sql.append("AND tar.activo = 1 ) "); - sql.append(" WHERE b.empresacorrida_id IN :empresa_id "); + sql.append(" sum(b.preciopagado + b.importepedagio) AS totalReceita, "); + sql.append(" tar.precio AS tarifa, "); + sql.append(" e.nombempresa AS empresa, "); + sql.append(" r.descruta AS linha, "); + sql.append(" r.NUMRUTA, "); + sql.append(" ori.descparada AS origem, "); + sql.append(" des.descparada AS destino, "); + sql.append(" MAX(tr.CANTKMREAL) AS km, "); + sql.append(" COUNT( DISTINCT "); + sql.append(" CASE "); + sql.append(" WHEN(r.indsentidoida = 1) THEN b.boleto_id "); + sql.append(" ELSE NULL "); + sql.append(" END "); + sql.append(" ) AS totalida, "); + sql.append(" COUNT( DISTINCT "); + sql.append(" CASE "); + sql.append(" WHEN(r.indsentidoida = 0) THEN b.boleto_id "); + sql.append(" ELSE NULL "); + sql.append(" END "); + sql.append(" ) AS totalvolta, "); + sql.append(" rc.rutacombinacion_id AS rutaCombinacionId, "); + sql.append(" rs.numsecuencia "); - sql.append(" AND b.motivocancelacion_id is null "); + sql.append(" FROM "); + sql.append(" boleto b "); + sql.append(" JOIN empresa e ON ( e.empresa_id = b.empresacorrida_id ) "); + sql.append(" JOIN marca m ON ( m.empresa_id = b.empresacorrida_id ) "); + sql.append(" JOIN categoria ca ON ( b.categoria_id = ca.categoria_id ) "); + sql.append(" JOIN parada ori ON ( ori.parada_id = b.origen_id ) "); + sql.append(" JOIN parada des ON ( des.parada_id = b.destino_id ) "); + sql.append(" JOIN ruta r ON (r.ruta_id = b.ruta_id ) "); + sql.append(" JOIN RUTA_COMBINACION rc ON ( rc.ruta_id = r.ruta_id and rc.activo = 1 ) "); + sql.append(" INNER JOIN tramo tr ON ( tr.TRAMO_ID = rc.TRAMO_ID "); + sql.append(" AND tr.ORIGEN_ID = ori.PARADA_ID "); + sql.append(" AND tr.DESTINO_ID = des.PARADA_ID "); + sql.append(" AND tr.ACTIVO = 1 ) "); + sql.append(" JOIN clase_servicio cs ON ( b.claseservicio_id = cs.claseservicio_id ) "); + sql.append(" INNER JOIN vigencia_tarifa vt ON ( b.fechorventa BETWEEN vt.feciniciovigencia "); + sql.append(" AND vt.fecfinvigencia "); + sql.append(" AND vt.activo = 1 ) "); + sql.append(" INNER JOIN tarifa tar ON ( tar.ruta_id = b.ruta_id "); + sql.append(" AND tar.marca_id = m.marca_id "); + sql.append(" AND tar.claseservicio_id = b.claseservicio_id "); + sql.append(" AND tar.vigenciatarifa_id = vt.vigenciatarifa_id "); + sql.append(" AND tar.origen_id = b.origen_id "); + sql.append(" AND tar.destino_id = b.destino_id "); + sql.append(" AND tar.TRAMO_ID = tr.TRAMO_ID "); + sql.append(" AND tar.activo = 1 ) "); + sql.append(" LEFT JOIN ruta_secuencia rs ON (tr.tramo_id = rs.tramo_id "); + sql.append(" AND r.ruta_id = rs.ruta_id "); + sql.append(" AND rs.activo =1 ) "); + + sql.append(" WHERE b.empresacorrida_id IN :empresa_id "); + + sql.append(" AND b.motivocancelacion_id is null "); if (linhasIds) { - sql.append(" AND r.NUMRUTA = :linhas_id "); + sql.append(" AND r.NUMRUTA = :linhas_id "); } sql.append(" AND b.feccorrida BETWEEN :dataIni AND :dataFim "); - sql.append(" GROUP BY "); - sql.append(" tar.precio, "); - sql.append(" e.nombempresa, "); - sql.append(" r.descruta, "); - sql.append(" r.numruta, "); - sql.append(" ori.descparada, "); - sql.append(" des.descparada, rc.rutacombinacion_id "); - sql.append(" ORDER BY "); - sql.append(" r.descruta, "); - sql.append(" rc.rutacombinacion_id "); + sql.append(" GROUP BY "); + sql.append(" tar.precio, "); + sql.append(" e.nombempresa, "); + sql.append(" r.descruta, "); + sql.append(" r.numruta, "); + sql.append(" ori.descparada, "); + sql.append(" des.descparada, "); + sql.append(" rc.rutacombinacion_id, "); + sql.append(" rs.numsecuencia "); + sql.append(" ORDER BY "); + sql.append(" rs.numsecuencia, "); + sql.append(" r.descruta, "); + sql.append(" rc.rutacombinacion_id "); return sql.toString(); } diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioReceitaServico.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioReceitaServico.java index b62230b1f..f74e92210 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioReceitaServico.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioReceitaServico.java @@ -14,8 +14,7 @@ import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement; public class RelatorioReceitaServico extends Relatorio { - public RelatorioReceitaServico(Map parametros, Connection conexao) throws Exception - { + public RelatorioReceitaServico(Map parametros, Connection conexao) throws Exception { super(parametros, conexao); this.setCustomDataSource(new ArrayDataSource(this) { @@ -51,8 +50,6 @@ public class RelatorioReceitaServico extends Relatorio { if (parametros.get("CLASESERVICIO_ID") != null && (!parametros.get("CLASESERVICIO_ID").equals(""))) stmt.setInt("CLASESERVICIO_ID", (Integer) parametros.get("CLASESERVICIO_ID")); - // else - // stmt.setNull("CLASESERVICIO_ID", java.sql.Types.INTEGER); ResultSet rset = stmt.executeQuery(); @@ -73,6 +70,7 @@ public class RelatorioReceitaServico extends Relatorio { dataResult.put("total", rset.getBigDecimal("total")); dataResult.put("tipo", rset.getString("tipo")); dataResult.put("agencia", rset.getString("agencia")); + dataResult.put("telefone", rset.getString("telefone")); dataResult.put("dataHoraCompra", rset.getTimestamp("dataHoraCompra")); dataResult.put("passageiro", !(rset.getString("passageiro") == null) ? rset.getString("passageiro") : ""); dataResult.put("nrBilhete", !(rset.getString("nrBilhete") == null) ? rset.getString("nrBilhete") : ""); @@ -107,6 +105,7 @@ public class RelatorioReceitaServico extends Relatorio { sql.append("p.nombpuntoventa AS agencia, "); sql.append("b.fechorventa AS dataHoraCompra, "); sql.append("b.nombpasajero AS passageiro, "); + sql.append("b.desctelefono AS telefone, "); sql.append("b.NUMFOLIOSISTEMA AS nrBilhete "); sql.append("FROM BOLETO b "); sql.append("INNER JOIN marca mar ON b.marca_id = mar.marca_id "); diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioResumoLinhasAnaliticoSimplificadoSumarizado.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioResumoLinhasAnaliticoSimplificadoSumarizado.java index 464408a44..8a2f22bc1 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioResumoLinhasAnaliticoSimplificadoSumarizado.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioResumoLinhasAnaliticoSimplificadoSumarizado.java @@ -150,7 +150,7 @@ public class RelatorioResumoLinhasAnaliticoSimplificadoSumarizado extends Relato sql.append(" subnivel4.numruta, "); sql.append(" subnivel4.interestadual,"); sql.append(" subnivel4.grupo_linha, "); - sql.append(" subnivel4.extensao_km,"); + sql.append(" COALESCE(subnivel4.extensao_km,0) as extensao_km"); sql.append(" subnivel4.cve_clase_servicio, "); sql.append(" subnivel4.desc_clase_servicio,"); sql.append(" SUM(nvl(subnivel4.receita_seguro, 0)) AS receita_seguro, "); diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioResumoLinhasAnaliticoSumarizado.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioResumoLinhasAnaliticoSumarizado.java index 54c49eb05..23c574739 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioResumoLinhasAnaliticoSumarizado.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioResumoLinhasAnaliticoSumarizado.java @@ -112,7 +112,7 @@ public class RelatorioResumoLinhasAnaliticoSumarizado extends Relatorio { sqlSb.append(" TAB.DESCRUTA, "); sqlSb.append(" TAB.INTERESTADUAL, "); sqlSb.append(" TAB.GRUPO_LINHA, "); - sqlSb.append(" TAB.EXTENSAO_KM, "); + sqlSb.append(" COALESCE(TAB.EXTENSAO_KM, 0) AS EXTENSAO_KM, "); sqlSb.append(" TAB.CVE_CLASE_SERVICIO, "); sqlSb.append(" SUM(NVL(TAB.RECEITA_SEGURO,0)) AS RECEITA_SEGURO, "); sqlSb.append(" SUM(NVL(TAB.RECEITA_BAGAGEM,0)) AS RECEITA_BAGAGEM, "); diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioTaxasLinha.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioTaxasLinha.java index cf7facab2..832d5cf82 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioTaxasLinha.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioTaxasLinha.java @@ -260,9 +260,9 @@ public class RelatorioTaxasLinha extends Relatorio { sql.append(" EM.EMPRESA_ID, "); sql.append(" CJ.PUNTOVENTA_ID, "); sql.append(" PV.NOMBPUNTOVENTA, "); - sql.append(" SUM(CASE WHEN (CJ.IMPORTETAXAEMBARQUE>0 and cj.motivocancelacion_id is null ) THEN 1 WHEN (CJ.IMPORTETAXAEMBARQUE>0 and cj.motivocancelacion_id is not null ) then -1 ELSE 0 END) EMBARQUE_VENDIDOS, "); - sql.append(" SUM(CASE WHEN (CJ.IMPORTEPEDAGIO>0 and cj.motivocancelacion_id is null) THEN 1 WHEN (CJ.IMPORTEPEDAGIO>0 and cj.motivocancelacion_id is not null) THEN -1 ELSE 0 END) PEDAGIO_VENDIDOS, "); - sql.append(" SUM(CASE WHEN (CJ.IMPORTESEGURO>0 and cj.motivocancelacion_id is null) THEN 1 WHEN (CJ.IMPORTESEGURO>0 and cj.motivocancelacion_id is not null) THEN -1 ELSE 0 END) SEGURO_VENDIDOS, "); + sql.append(" SUM(CASE WHEN (CJ.IMPORTETAXAEMBARQUE>0 and cj.indcancelacion = 0 ) THEN 1 WHEN (CJ.IMPORTETAXAEMBARQUE>0 and cj.indcancelacion = 1 ) then -1 ELSE 0 END) EMBARQUE_VENDIDOS, "); + sql.append(" SUM(CASE WHEN (CJ.IMPORTEPEDAGIO>0 and cj.indcancelacion = 0 ) THEN 1 WHEN (CJ.IMPORTEPEDAGIO>0 and cj.indcancelacion = 1 ) THEN -1 ELSE 0 END) PEDAGIO_VENDIDOS, "); + sql.append(" SUM(CASE WHEN (CJ.IMPORTESEGURO>0 and cj.indcancelacion = 0 ) THEN 1 WHEN (CJ.IMPORTESEGURO>0 and cj.indcancelacion = 1 ) THEN -1 ELSE 0 END) SEGURO_VENDIDOS, "); sql.append(" CO.ESTADO_ID ORIGEM_ESTADO_ID, "); sql.append(" CD.ESTADO_ID DESTINO_ESTADO_ID, "); sql.append(" CASE "); @@ -271,9 +271,9 @@ public class RelatorioTaxasLinha extends Relatorio { sql.append(" ELSE "); sql.append(" 'N' "); sql.append(" END INTERESTADUAL, "); - sql.append(" SUM( (case when cj.motivocancelacion_id is null then 1 else -1 end) * CJ.IMPORTETAXAEMBARQUE) TOTAL_EMBARQUE, "); - sql.append(" SUM( (case when cj.motivocancelacion_id is null then 1 else -1 end) * CJ.IMPORTEPEDAGIO) TOTAL_PEDAGIO, "); - sql.append(" SUM( (case when cj.motivocancelacion_id is null then 1 else -1 end) * CJ.IMPORTESEGURO) TOTAL_SEGURO, "); + sql.append(" SUM( (case when cj.indcancelacion = 0 then 1 else -1 end) * CJ.IMPORTETAXAEMBARQUE) TOTAL_EMBARQUE, "); + sql.append(" SUM( (case when cj.indcancelacion = 0 then 1 else -1 end) * CJ.IMPORTEPEDAGIO) TOTAL_PEDAGIO, "); + sql.append(" SUM( (case when cj.indcancelacion = 0 then 1 else -1 end) * CJ.IMPORTESEGURO) TOTAL_SEGURO, "); sql.append(" EST.ICMS AS ICMS, "); sql.append(" SUM( (case when sx.status =0 then 1 else 0.0 end)) QTD_SEGUROOPCIONALCANCELADO, "); sql.append(" SUM( (case when sx.status =0 then sx.valor else 0.0 end )) TOTAL_SEG_CANCELADO, "); @@ -290,11 +290,12 @@ public class RelatorioTaxasLinha extends Relatorio { sql.append("INNER JOIN CIUDAD CD ON PD.CIUDAD_ID = CD.CIUDAD_ID "); sql.append("LEFT JOIN CORRIDA CR ON (CJ.CORRIDA_ID = CR.CORRIDA_ID AND CJ.FECCORRIDA = CR.FECCORRIDA) "); sql.append("LEFT JOIN RUTA RT ON RT.RUTA_ID = CJ.RUTA_ID "); - sql.append("LEFT JOIN SEGPOLV SX ON SX.BOLETO_ID =CJ.TRANSACAO_ID "); - - sql.append("WHERE (CJ.IMPORTETAXAEMBARQUE>0 OR CJ.IMPORTEPEDAGIO>0 OR CJ.IMPORTESEGURO>0 OR SX.VALOR>0) "); + sql.append("LEFT JOIN SEGPOLV SX ON SX.BOLETO_ID = CJ.TRANSACAO_ID "); + sql.append("LEFT JOIN TAXPOLV TX ON TX.BOLETO_ID = CJ.TRANSACAO_ID "); + + sql.append("WHERE (CJ.IMPORTETAXAEMBARQUE>0 OR CJ.IMPORTEPEDAGIO>0 OR CJ.IMPORTESEGURO>0 OR SX.VALOR>0 OR TX.VALORTAXA > 0) "); sql.append("AND CJ.INDSTATUSOPERACION = 'F' "); - sql.append("AND CJ.INDREIMPRESION = 0 "); + sql.append("AND CJ.indstatusboleto not in ('E') "); sql.append("AND DECODE(:TIPO_DATA, 1, CJ.FECHORVENTA, 2, CJ.FECCORRIDA) BETWEEN :DATA_INICIAL AND :DATA_FINAL "); sql.append("AND EM.EMPRESA_ID = COALESCE(:EMPRESA_ID, EM.EMPRESA_ID) "); @@ -317,6 +318,7 @@ public class RelatorioTaxasLinha extends Relatorio { sql.append(" CJ.PUNTOVENTA_ID, "); sql.append(" PV.NOMBPUNTOVENTA, "); sql.append(" EST.ICMS "); + sql.append(" ORDER BY EM.NOMBEMPRESA,PV.NOMBPUNTOVENTA ,PO.DESCPARADA, PD.DESCPARADA "); return sql.toString(); diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioVendasBilheteiro.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioVendasBilheteiro.java index a8d975880..f17c2387f 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioVendasBilheteiro.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioVendasBilheteiro.java @@ -65,6 +65,8 @@ public class RelatorioVendasBilheteiro extends Relatorio { sql.append(" m.EMPRESA_ID = :EMPRESA_ID "); sql.append(" and c.FECHORVENTA >= :DATA_INICIAL "); sql.append(" and c.FECHORVENTA <= :DATA_FINAL "); + sql.append(" and ((c.indreimpresion = 1 "); + sql.append(" AND c.motivoreimpresion_id = 99) or c.indreimpresion = 0) "); if (parametros.get("NUMPUNTOVENTA") != null && !possuiFiltroTodos("NUMPUNTOVENTA")) { sql.append(" and pv.PUNTOVENTA_ID IN (" + parametros.get("NUMPUNTOVENTA").toString() + ")"); } diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioVendasCartoes.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioVendasCartoes.java index 5fcc72ef5..b358e24a7 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioVendasCartoes.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioVendasCartoes.java @@ -23,8 +23,8 @@ import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement; import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; public class RelatorioVendasCartoes extends Relatorio { - - private static Logger log = Logger.getLogger(RelatorioMovimentacaoEstoque.class); + + private static Logger log = Logger.getLogger(RelatorioVendasCartoes.class); List list = null; @@ -36,10 +36,10 @@ public class RelatorioVendasCartoes extends Relatorio { public void initDados() throws Exception { Connection conexao = this.relatorio.getConexao(); Map parametros = this.relatorio.getParametros(); - + NamedParameterStatement stmt = null; ResultSet rset = null; - + String dataInicial = parametros.get("DATA_INICIAL").toString() + " 00:00:00"; String dataFinal = parametros.get("DATA_FINAL").toString() + " 23:59:59"; Empresa empresa = (Empresa) parametros.get("EMPRESA"); @@ -47,28 +47,29 @@ public class RelatorioVendasCartoes extends Relatorio { Usuario usuario = (Usuario) parametros.get("USUARIO"); Estacion estacao = (Estacion) parametros.get("ESTACION"); String tipoAgencias = (String) parametros.get("TIPOPUNTOVENTA"); - + String sql = getSql(dataInicial, dataFinal, empresa, puntoVenta, tipoAgencias, usuario, estacao, buscarPorDataDaVenda); - + log.info("query= " + sql); + try { stmt = new NamedParameterStatement(conexao, sql); - - if(empresa != null){ + + if (empresa != null) { stmt.setInt("empresaId", empresa.getEmpresaId()); } - if(puntoVenta != null){ + if (puntoVenta != null) { stmt.setInt("puntoventaId", puntoVenta.getPuntoventaId()); } - if(dataInicial != null){ - stmt.setString("dataInicial",dataInicial); + if (dataInicial != null) { + stmt.setString("dataInicial", dataInicial); } - if(dataFinal != null){ + if (dataFinal != null) { stmt.setString("dataFinal", dataFinal); } - if(estacao != null){ + if (estacao != null) { stmt.setInt("estacionId", estacao.getEstacionId()); } - if(usuario != null){ + if (usuario != null) { stmt.setInt("usuarioId", usuario.getUsuarioId()); } @@ -77,50 +78,50 @@ public class RelatorioVendasCartoes extends Relatorio { list = new ArrayList(); BigDecimal valorTotal = BigDecimal.ZERO; while (rset.next()) { - + RelatorioVendasCartoesBean bean = new RelatorioVendasCartoesBean(); - + bean.setDataVenda(rset.getDate("dataVenda")); - bean.setDataOperacao(rset.getString("dataOperacao") != null ? DateUtil.getDateFromString(rset.getString("dataOperacao"), "ddMMyy") : null); - bean.setDescPagamento(rset.getString("descPagamento") != null ? rset.getString("descPagamento") : null); - bean.setValor(rset.getBigDecimal("valor") != null ? rset.getBigDecimal("valor") : null); - bean.setAutorizacao(rset.getString("autorizacao") != null ? rset.getString("autorizacao") : null); + bean.setDataOperacao(rset.getString("dataOperacao") != null ? DateUtil.getDateFromString(rset.getString("dataOperacao"), "ddMMyy") : null); + bean.setDescPagamento(rset.getString("descPagamento") != null ? rset.getString("descPagamento") : null); + bean.setValor(rset.getBigDecimal("valor") != null ? rset.getBigDecimal("valor") : null); + bean.setAutorizacao(rset.getString("autorizacao") != null ? rset.getString("autorizacao") : null); bean.setQtdParcelas(rset.getInt("qtdParcelas")); bean.setNumeroPuntoVenta(rset.getInt("numeroPuntoVenta")); - bean.setNomePuntoVenta(rset.getString("nomePuntoVenta") != null ? rset.getString("nomePuntoVenta") : null); - bean.setDescOperadoraCartao(rset.getString("descOperadoraCartao") != null ? rset.getString("descOperadoraCartao") : null); - bean.setNSU(rset.getString("nsu") != null ? rset.getString("nsu") : null); - bean.setNumeroCartao(rset.getString("numeroCartao") != null ? rset.getString("numeroCartao") : null); - bean.setBandeira(rset.getString("bandeira") != null ? rset.getString("bandeira") : null); - bean.setEstabelecimento(rset.getString("estabelecimento") != null ? rset.getString("estabelecimento") : null); - bean.setTerminal(rset.getString("terminal") != null ? rset.getString("terminal") : null); - valorTotal = valorTotal.add(bean.getValor() != null ? bean.getValor() : BigDecimal.ZERO); + bean.setNomePuntoVenta(rset.getString("nomePuntoVenta") != null ? rset.getString("nomePuntoVenta") : null); + bean.setDescOperadoraCartao(rset.getString("descOperadoraCartao") != null ? rset.getString("descOperadoraCartao") : null); + bean.setNSU(rset.getString("nsu") != null ? rset.getString("nsu") : null); + bean.setNumeroCartao(rset.getString("numeroCartao") != null ? rset.getString("numeroCartao") : null); + bean.setBandeira(rset.getString("bandeira") != null ? rset.getString("bandeira") : null); + bean.setEstabelecimento(rset.getString("estabelecimento") != null ? rset.getString("estabelecimento") : null); + bean.setTerminal(rset.getString("terminal") != null ? rset.getString("terminal") : null); + valorTotal = valorTotal.add(bean.getValor() != null ? bean.getValor() : BigDecimal.ZERO); bean.setValorTotal(valorTotal); - + list.add(bean); } } catch (Exception e) { log.error(e.getMessage(), e); } finally { - if(rset != null && !rset.isClosed()) { + if (rset != null && !rset.isClosed()) { rset.close(); } - if(stmt != null && !stmt.isClosed()) { + if (stmt != null && !stmt.isClosed()) { stmt.close(); } } } }); - + this.setCollectionDataSource(new JRBeanCollectionDataSource(list)); } - - private RelatorioVendasCartoesBean calcTotalValor(RelatorioVendasCartoesBean bean) { - BigDecimal valorTotal = bean.getValorTotal().add(bean.getValorTotal()); - bean.setValorTotal(valorTotal); - return bean; - } - + + // private RelatorioVendasCartoesBean calcTotalValor(RelatorioVendasCartoesBean bean) { + // BigDecimal valorTotal = bean.getValorTotal().add(bean.getValorTotal()); + // bean.setValorTotal(valorTotal); + // return bean; + // } + @Override protected void processaParametros() throws Exception { } @@ -128,9 +129,9 @@ public class RelatorioVendasCartoes extends Relatorio { private String getSql(String dataInicial, String dataFinal, Empresa empresa, PuntoVenta puntoVenta, String tipoAgencias, Usuario usuario, Estacion estacion, Boolean buscarPorDataDaVenda) { StringBuilder sb = new StringBuilder(); - + sb.append("SELECT caja.descpago as descPagamento,"); - sb.append(" to_char(caja.dataoperacao, 'ddMMyyyy') as dataOperacao,"); + sb.append(" to_char(caja.dataoperacao, 'ddMMyyyy') as dataOperacao,"); sb.append(" caja.autorizacao as autorizacao,"); sb.append(" coalesce(caja.qtdparcelas, 1) as qtdParcelas ,"); sb.append(" caja.datavenda as dataVenda, "); @@ -150,8 +151,8 @@ public class RelatorioVendasCartoes extends Relatorio { sb.append(" ct.cantparcelas AS qtdparcelas,"); sb.append(" c.fechorventa AS datavenda,"); sb.append(" case when c.motivocancelacion_id is null then cfp.importe else cfp.importe * -1 end AS preco,"); - sb.append(" pt.numpuntoventa as numeroPuntoVenta, "); - sb.append("pt.nombpuntoventa as nomePuntoVenta, "); + sb.append(" pt.numpuntoventa as numeroPuntoVenta, "); + sb.append("pt.nombpuntoventa as nomePuntoVenta, "); sb.append("ct.descoperadoracartao as descoperadoracartao, "); sb.append("ct.nsu as NSU, "); sb.append(" ct.numtarjeta as numeroCartao, "); @@ -169,38 +170,36 @@ public class RelatorioVendasCartoes extends Relatorio { sb.append(" LEFT JOIN estacion_sitef estsitef ON ( estsitef.estacion_id = c.estacion_id and estsitef.activo = 1) "); sb.append(" WHERE c.indreimpresion = 0 "); - if(empresa!= null){ + if (empresa != null) { sb.append("and ma.empresa_id = :empresaId "); } - - if(puntoVenta != null){ + + if (puntoVenta != null) { sb.append("AND c.puntoventa_id = :puntoventaId "); } - - if(estacion!= null){ + + if (estacion != null) { sb.append("AND c.estacion_id = :estacionId "); } - - if(usuario!= null){ + + if (usuario != null) { sb.append(" and c.usuario_id = :usuarioId "); } - - if(dataInicial != null && buscarPorDataDaVenda){ + + if (dataInicial != null && buscarPorDataDaVenda) { sb.append("AND c.fechorventa >= TO_DATE(:dataInicial, 'DD/MM/YYYY HH24:MI:SS') "); } else if (dataInicial != null && !buscarPorDataDaVenda) { sb.append("AND c.feccorte >= TO_DATE(:dataInicial, 'DD/MM/YYYY HH24:MI:SS') "); } - - if(dataFinal != null && buscarPorDataDaVenda){ + + if (dataFinal != null && buscarPorDataDaVenda) { sb.append("AND c.fechorventa <= TO_DATE(:dataFinal, 'DD/MM/YYYY HH24:MI:SS') "); - } else if (dataInicial != null && !buscarPorDataDaVenda) { + } else if (dataInicial != null && !buscarPorDataDaVenda) { sb.append("AND c.feccorte <= TO_DATE(:dataFinal, 'DD/MM/YYYY HH24:MI:SS') "); } sb.append(tipoAgencias.equals("-1") || tipoAgencias.equals("TODAS") ? "" : " and pt.tipoptovta_id not in (" + tipoAgencias + ") "); - - sb.append(" AND fp.formapago_id IN(2,3)"); sb.append(" AND c.activo = 1) caja "); sb.append("GROUP BY caja.descpago,"); @@ -217,7 +216,7 @@ public class RelatorioVendasCartoes extends Relatorio { sb.append(" caja.estabelecimento, "); sb.append(" caja.terminal "); sb.append("ORDER BY caja.nomePuntoVenta, caja.datavenda "); - + return sb.toString(); } diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioVendasConexaoRuta.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioVendasConexaoRuta.java index ec455f6d9..7fce8f232 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioVendasConexaoRuta.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioVendasConexaoRuta.java @@ -105,11 +105,11 @@ public class RelatorioVendasConexaoRuta extends Relatorio { bean.setNomeAgencia((String) rset.getString("nomeAgencia")); bean.setServico((Integer) rset.getInt("servico")); bean.setPoltrona((String) rset.getObject("poltrona")); - bean.setNumLinha((Integer) rset.getInt("numLinha")); + bean.setNumLinha((String) rset.getString("numLinha")); bean.setDescricaoLinha((String) rset.getObject("descricaoLinha")); - bean.setCodOrigem((Integer) rset.getInt("codOrigem")); + bean.setCodOrigem((String) rset.getString("codOrigem")); bean.setDescricaoOrigem((String) rset.getObject("descricaoOrigem")); - bean.setCodDestino((Integer) rset.getInt("codDestino")); + bean.setCodDestino((String) rset.getString("codDestino")); bean.setDescricaoDestino((String) rset.getObject("descricaoDestino")); bean.setDataEmbarque((Date) rset.getObject("dataEmbarque")); bean.setDataVenda((Date) rset.getObject("dataVenda")); @@ -192,10 +192,10 @@ public class RelatorioVendasConexaoRuta extends Relatorio { sb.append("INNER JOIN vigencia_tarifa vt ON c.fechorventa BETWEEN vt.feciniciovigencia AND vt.fecfinvigencia "); sb.append("AND vt.activo = 1 "); sb.append("INNER JOIN usuario u ON (c.usuario_id = u.usuario_id) "); - sb.append("left join conexion cc on cc.conexionctrl_id = c.conexionctrl_id and cc.activo =1 "); - sb.append("left join conexion_ruta_tramo_ctrl ctr on ctr.conexionrutatramoctrl_id = cc.conexionrutatramoctrl_id and ctr.activo = 1 "); - sb.append("left join conexion_ruta_ctrl ctrl on ctrl.conexionrutactrl_id = ctr.conexionrutactrl_id and ctrl.activo =1 "); - sb.append("left join conexion_ruta_conf conf on conf.conexionrutaconf_id = ctrl.conexionrutaconf_id and conf.activo =1 "); + sb.append("left join conexion cc on cc.conexionctrl_id = c.conexionctrl_id "); + sb.append("left join conexion_ruta_tramo_ctrl ctr on ctr.conexionrutatramoctrl_id = cc.conexionrutatramoctrl_id "); + sb.append("left join conexion_ruta_ctrl ctrl on ctrl.conexionrutactrl_id = ctr.conexionrutactrl_id "); + sb.append("left join conexion_ruta_conf conf on conf.conexionrutaconf_id = ctrl.conexionrutaconf_id "); sb.append("left JOIN CONVENIO_DET CONV_D ON CONV_D.CONVENIODET_ID = c.CONVENIODET_ID "); sb.append(" left join CONVENIO CONV ON CONV.CONVENIO_ID = CONV_D.CONVENIO_ID "); sb.append("WHERE c.indconexion = 1"); diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioVendasRequisicao.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioVendasRequisicao.java index 5e7577dab..933a9c8ec 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioVendasRequisicao.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioVendasRequisicao.java @@ -166,7 +166,7 @@ public class RelatorioVendasRequisicao extends Relatorio { .append("JOIN MARCA M ON C.MARCA_ID = M.MARCA_ID ") .append("JOIN EMPRESA E ON E.EMPRESA_ID = M.EMPRESA_ID ") .append("JOIN PUNTO_VENTA PV ON PV.PUNTOVENTA_ID = C.PUNTOVENTA_ID ") - .append("WHERE FP.FORMAPAGO_ID = 11 ") + .append("WHERE (FP.FORMAPAGO_ID = 11 OR FP.TIPO_PAGO = 6) ") .append("AND C.ACTIVO = 1 ") .append("AND C.INDREIMPRESION = 0 "); diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioW2IAnalitico.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioW2IAnalitico.java index 4cee2808d..19437a4c1 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioW2IAnalitico.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioW2IAnalitico.java @@ -9,6 +9,7 @@ import java.util.Date; import java.util.List; import java.util.Map; +import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import com.rjconsultores.ventaboletos.relatorios.utilitarios.DataSource; @@ -34,7 +35,7 @@ public class RelatorioW2IAnalitico extends Relatorio { Connection conexao = this.relatorio.getConexao(); Map parametros = this.relatorio.getParametros(); String puntosVentaIds = (String) parametros.get("NUMPUNTOVENTA"); - + puntosVentaIds = StringUtils.replace(puntosVentaIds, "," , "','"); lsDadosRelatorio = new ArrayList(); String sql = getSql(puntosVentaIds); @@ -46,7 +47,7 @@ public class RelatorioW2IAnalitico extends Relatorio { stmt.setInt("TIPO_DATA", (Integer) parametros.get("TIPO_DATA")); stmt.setTimestamp("DATA_INICIAL", new Timestamp(DateUtil.inicioFecha((Date) parametros.get("DATA_INICIAL")).getTime())); stmt.setTimestamp("DATA_FINAL", new Timestamp(DateUtil.fimFecha((Date) parametros.get("DATA_FINAL")).getTime())); - + if (parametros.get("EMPRESA_ID") != null) stmt.setInt("EMPRESA_ID", (Integer) parametros.get("EMPRESA_ID")); else @@ -134,8 +135,8 @@ public class RelatorioW2IAnalitico extends Relatorio { sql.append("AND po.parada_id = COALESCE(:ORIGEN_ID, po.parada_id) "); sql.append("AND pd.parada_id = COALESCE(:DESTINO_ID, pd.parada_id) "); - if (!puntosVentaIds.equals("Todas")) { - sql.append(" AND pv.puntoventa_id IN (").append(puntosVentaIds).append(") "); + if (!puntosVentaIds.contains("-1")) { + sql.append(" AND pv.puntoventa_id IN ('"+puntosVentaIds+"') "); } sql.append("ORDER BY b.fechorventa ASC "); diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioW2ISintetico.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioW2ISintetico.java index 86cf3156a..4852dc168 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioW2ISintetico.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioW2ISintetico.java @@ -9,6 +9,7 @@ import java.util.Date; import java.util.List; import java.util.Map; +import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import com.rjconsultores.ventaboletos.relatorios.utilitarios.DataSource; @@ -92,7 +93,7 @@ public class RelatorioW2ISintetico extends Relatorio { private String getSql(Map parametros) { String puntosVentaIds = (String) parametros.get("NUMPUNTOVENTA"); - + puntosVentaIds = StringUtils.replace(puntosVentaIds, "," , "','"); StringBuilder sql = new StringBuilder(); sql.append("SELECT DISTINCT "); sql.append("em.empresa_id AS empresaId, "); @@ -123,7 +124,7 @@ public class RelatorioW2ISintetico extends Relatorio { if (parametros.get("DESTINO_ID") != null && parametros.get("DESTINO_ID") != "" && ((Integer) parametros.get("DESTINO_ID") != -1)) { sql.append("AND pd.parada_id = COALESCE(:DESTINO_ID, pd.parada_id) "); } - if (!puntosVentaIds.equals("Todas")) { + if (!puntosVentaIds.contains("-1")) { sql.append(" AND pv.puntoventa_id IN (").append(puntosVentaIds).append(") "); } sql.append("GROUP BY em.empresa_id, em.nombempresa,pv.puntoventa_id,pv.nombpuntoventa "); diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioBPe_es.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioBPe_es.properties index 8a6d36489..bf8e7b819 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioBPe_es.properties +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioBPe_es.properties @@ -29,4 +29,5 @@ label.numBPe=N label.serie=Série label.status=Status label.obs=Observação +label.codAgencia=Cod.Agência header.filtro.total=Total Geral: \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioBPe_pt_BR.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioBPe_pt_BR.properties index 63b5c15c9..8b906d801 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioBPe_pt_BR.properties +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioBPe_pt_BR.properties @@ -29,4 +29,5 @@ label.protocolo=Protocolo label.numBPe=Núm. BPe label.serie=Série label.status=Status -label.obs=Observação \ No newline at end of file +label.obs=Observação +label.codAgencia=Cod. Agência \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioCheckin_es.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioCheckin_es.properties index e6a3ed2fb..ea60ebc0d 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioCheckin_es.properties +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioCheckin_es.properties @@ -13,7 +13,7 @@ cabecalho.filtros=Filtros: #Labels datail datail.voucher=Nº Bilhete / Voucher -datail.origen=Origem +datail.origen=Origem do Serviço datail.servicio=Serviço datail.data.servicio=Data do Serviço datail.data.checkin=Data Checkin diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioCheckin_pt_BR.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioCheckin_pt_BR.properties index e6a3ed2fb..bc2769b2b 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioCheckin_pt_BR.properties +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioCheckin_pt_BR.properties @@ -10,10 +10,16 @@ cabecalho.impressorPor=Impressor por: cabecalho.pagina=Página cabecalho.de=de cabecalho.filtros=Filtros: +#Labels header +cabecalho.pagina=Página\: +cabecalho.empresa=Empresa\: +cabecalho.bilheteiro = Bilheteiro(s)\: +cabecalho.usuario = Usuário\: + #Labels datail datail.voucher=Nº Bilhete / Voucher -datail.origen=Origem +datail.origen=Origem do Serviço datail.servicio=Serviço datail.data.servicio=Data do Serviço datail.data.checkin=Data Checkin diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioDepositos_pt_BR.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioDepositos_pt_BR.properties index 88c73c1e2..79a0c6251 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioDepositos_pt_BR.properties +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioDepositos_pt_BR.properties @@ -14,8 +14,8 @@ header.data=Per header.agencia=Agência header.dtmotivo=Data Fechamento header.saldo=Pendente -header.vrdeposito=Vr. Depósito -header.vrfechamento=Vr. Fechamento +header.vrdeposito=Depósito/Boleto +header.vrfechamento=Fechamento header.usuario=Usuário header.numdeposito=Num. Depósito header.numeroAgencia=Número diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamentoFinanceiro.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamentoFinanceiro.jasper index 96d4257b7a13430bf85268f1863b24dea382bff1..b54b3ee43deefb65decac7fe74faf10cfd1927f9 100644 GIT binary patch literal 124764 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%0Ahdx2rz|}gu*OwJ3W@4 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 Olij;M->FOcp8p4e?TwWH diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamentoFinanceiro.jrxml b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamentoFinanceiro.jrxml index 1521d4575..b3cd51e33 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamentoFinanceiro.jrxml +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamentoFinanceiro.jrxml @@ -1,8 +1,8 @@ - + - +