diff --git a/pom.xml b/pom.xml index 94942c2c7..a37095d56 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 br.com.rjconsultores ventaboletosadm - 1.0.58 + 1.0.59 war diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioLinhasHorario.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioLinhasHorario.java index 1fc88d7bd..5c00388eb 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioLinhasHorario.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioLinhasHorario.java @@ -1,10 +1,10 @@ package com.rjconsultores.ventaboletos.relatorios.impl; import java.math.BigDecimal; -import java.math.MathContext; -import java.math.RoundingMode; import java.sql.Connection; import java.sql.ResultSet; +import java.sql.Timestamp; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -20,7 +20,6 @@ import com.rjconsultores.ventaboletos.relatorios.utilitarios.DataSource; import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; import com.rjconsultores.ventaboletos.relatorios.utilitarios.RelatorioLinhasHorarioBean; import com.rjconsultores.ventaboletos.service.ConstanteService; -import com.rjconsultores.ventaboletos.utilerias.DateUtil; import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement; import com.rjconsultores.ventaboletos.web.utilerias.spring.AppContext; @@ -42,64 +41,53 @@ public class RelatorioLinhasHorario extends Relatorio { public void initDados() throws Exception { CONSTANTE_GRATUIDADE_CRIANCA = buscarConstante("GRATUIDADE_CRIANCA"); - + SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); Connection conexao = this.relatorio.getConexao(); - Map parametros = this.relatorio.getParametros(); - ArrayList lsNumLinha = (ArrayList) parametros.get("lsNumLinha"); ArrayList lsNumServico = (ArrayList) parametros.get("lsNumServico"); - - String servicoFiltro = ""; - if (lsNumServico.size() > 0) { - for (Corrida corrida : lsNumServico) { - if (lsNumServico.indexOf(corrida) == 0) { - servicoFiltro = "" + corrida.getId().getCorridaId(); - } else { - servicoFiltro += ", " + corrida.getId().getCorridaId(); - } - } - } else { - servicoFiltro = "TODOS"; - } - parametros.put("SERVICO_FILTRO", servicoFiltro); - - String linhaFiltro = ""; - if (lsNumLinha.size() > 0) { - for (Ruta ruta : lsNumLinha) { - if (lsNumLinha.indexOf(ruta) == 0) { - linhaFiltro = "" + ruta.getRutaId(); - } else { - linhaFiltro += ", " + ruta.getRutaId(); - } - } - } else { - linhaFiltro = "TODOS"; - } - parametros.put("LINHA_FILTRO", linhaFiltro); - + parametros.put("SERVICO_FILTRO", retornaFiltro(lsNumServico, null)); + parametros.put("LINHA_FILTRO", retornaFiltro(null, lsNumLinha)); + Empresa empresa = (Empresa) parametros.get("EMPRESA"); - GrupoRuta grupoRuta = (GrupoRuta) parametros.get("GRUPORUTA"); - Integer tipoServico = (Integer) parametros.get("TIPOSERVICIO_ID"); - String sql = getSql(lsNumLinha, lsNumServico, empresa, tipoServico, grupoRuta); + Boolean isPorData = parametros.get("ISPORDATA") == null ? false : true; + String sql = getSql(lsNumLinha, lsNumServico, empresa, tipoServico, grupoRuta, isPorData); NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql); ResultSet rset = null; - - if (parametros.get("DATA_INICIO") != null) { - Date dataFinal = (Date) parametros.get("DATA_INICIO"); - stmt.setString("DATA_INICIO", DateUtil.getStringDate(dataFinal, DateUtil.ddMMaaHH24mmss)); - } + stmt.setString("CRIANCA_ID",CONSTANTE_GRATUIDADE_CRIANCA); - if (parametros.get("DATA_FINAL") != null) { - Date dataFinal = (Date) parametros.get("DATA_FINAL"); - stmt.setString("DATA_FINAL", DateUtil.getStringDate(dataFinal, DateUtil.ddMMaaHH24mmss)); + if (empresa != null) { + stmt.setInt("EMPRESA_ID", empresa.getEmpresaId()); } + if (parametros.get("DATA_INICIO") != null) { + Date dataInicio = (Date) parametros.get("DATA_INICIO"); + String dataInicioStr = dateFormat.format(dataInicio); + stmt.setString("DATA_INICIO", dataInicioStr); + } + if (parametros.get("DATA_FINAL") != null) { + Date dataFinal = (Date) parametros.get("DATA_FINAL"); + String dataInicioStr = dateFormat.format(dataFinal); + stmt.setString("DATA_FINAL", dataInicioStr); + } + if (grupoRuta != null) { + stmt.setInt("GRUPORUTA_ID", grupoRuta.getGrupoRutaId()); + } + if (lsNumServico != null && !lsNumServico.isEmpty()) { + String corridaIds = retornaFiltro(lsNumServico, null); + stmt.setString("CORRIDA_ID", corridaIds); + } + if (lsNumLinha != null && !lsNumLinha.isEmpty()) { + String rutaIds = retornaFiltro(null, lsNumLinha); + stmt.setString("RUTA_ID", rutaIds); + } + if (tipoServico > 0) { + stmt.setInt("TIPOSERVICIO_ID", tipoServico); + } rset = stmt.executeQuery(); - lsDadosRelatorio = new ArrayList(); BigDecimal totalPassagens = BigDecimal.ZERO; @@ -121,7 +109,6 @@ public class RelatorioLinhasHorario extends Relatorio { BigDecimal totalPaxKMOfertado = BigDecimal.ZERO; BigDecimal totalPaxKMTransportado = BigDecimal.ZERO; BigDecimal totalIAP = BigDecimal.ZERO; - BigDecimal totalTxEmbarque = BigDecimal.ZERO; BigDecimal totalPedagio = BigDecimal.ZERO; @@ -192,11 +179,11 @@ public class RelatorioLinhasHorario extends Relatorio { totalOrdinario = totalOrdinario.add(horarioBean.getOrd() != null ? horarioBean.getOrd() : BigDecimal.ZERO); totalExtra = totalExtra.add(horarioBean.getExtra() != null ? horarioBean.getExtra() : BigDecimal.ZERO); totalViagem = totalViagem.add(horarioBean.getTotalViagem() != null ? horarioBean.getTotalViagem() : BigDecimal.ZERO); - //No double deck corrida2_id estrá preenchido para os dois pisos (nas duas corridas). - //Implementado esta lógica para não somar os dois KMs. Deverá somar somente um dos pisos + //No double deck corrida2_id estrá preenchido para os dois pisos (nas duas corridas). + //Implementado esta lógica para não somar os dois KMs. Deverá somar somente um dos pisos if(Boolean.TRUE.equals(horarioBean.getIsDoubleDeck())) { if(horarioBean.getServico2()!=null && !listaCorridas.contains(horarioBean.getServico2().longValue())) { - //Um dos pisos não será marcadado como double deck para não realizar o agrupamento dentro do relatório. + //Um dos pisos não será marcadado como double deck para não realizar o agrupamento dentro do relatório. horarioBean.setIsDoubleDeck(Boolean.FALSE); totalKmRodado = totalKmRodado.add(horarioBean.getKmRodado() != null ? horarioBean.getKmRodado() : BigDecimal.ZERO); } @@ -206,22 +193,15 @@ public class RelatorioLinhasHorario extends Relatorio { listaCorridas.add(horarioBean.getServico().longValue()); totalAbsoluto = totalAbsoluto.add(horarioBean.getAbsol() != null ? horarioBean.getAbsol() : BigDecimal.ZERO); totalEquivalente = totalEquivalente.add(horarioBean.getEquivalente() != null ? horarioBean.getEquivalente() : BigDecimal.ZERO); - totalTxEmbarque = totalTxEmbarque.add(horarioBean.getTxEmbarque() != null ? horarioBean.getTxEmbarque() : BigDecimal.ZERO); totalPedagio = totalPedagio.add(horarioBean.getPedagio() != null ? horarioBean.getPedagio() : BigDecimal.ZERO); - mediaMPA = mediaMPA.add(horarioBean.getMpa() != null ? horarioBean.getMpa() : BigDecimal.ZERO); mediaMPE = mediaMPE.add(horarioBean.getMpe() != null ? horarioBean.getMpe() : BigDecimal.ZERO); - mediaRsPorKm = mediaRsPorKm.add(horarioBean.getRsKm() != null ? horarioBean.getRsKm() : BigDecimal.ZERO); - totalEQ = totalEQ.add(horarioBean.getEq() != null ? horarioBean.getEq() : BigDecimal.ZERO); - mediaRSPorViagem = mediaRSPorViagem.add(horarioBean.getRsViagem() != null ? horarioBean.getRsViagem() : BigDecimal.ZERO); - totalPaxKMOfertado = totalPaxKMOfertado.add(horarioBean.getPaxKmOfertado() != null ? horarioBean.getPaxKmOfertado() : BigDecimal.ZERO); totalPaxKMTransportado = totalPaxKMTransportado.add(horarioBean.getPaxKmTransportado() != null ? horarioBean.getPaxKmTransportado() : BigDecimal.ZERO); - totalIAP = totalIAP.add(horarioBean.getIap()); } @@ -255,6 +235,31 @@ public class RelatorioLinhasHorario extends Relatorio { } } + + private String retornaFiltro(ArrayList lsNumServico, ArrayList lsNumLinha) { + String filtro = "TODOS"; + if (lsNumServico != null && !lsNumServico.isEmpty()) { + for (Corrida corrida : lsNumServico) { + if (lsNumServico.indexOf(corrida) == 0) { + filtro = "" + corrida.getId().getCorridaId(); + } else { + filtro += ", " + corrida.getId().getCorridaId(); + } + } + return filtro; + } else if (lsNumLinha != null && !lsNumLinha.isEmpty()) { + for (Ruta ruta : lsNumLinha) { + if (lsNumLinha.indexOf(ruta) == 0) { + filtro = "" + ruta.getRutaId(); + } else { + filtro += ", " + ruta.getRutaId(); + } + } + return filtro; + } else { + return filtro; + } + } }); } @@ -362,7 +367,7 @@ public class RelatorioLinhasHorario extends Relatorio { try { resultado = valor1.divide(valor2, 2, 4); } catch (Exception ex) { - log.error("Erro ao calcular divisão no Relatorio de linhas por horario", ex); + log.error("Erro ao calcular divisão no Relatorio de linhas por horario", ex); } return resultado; } @@ -371,12 +376,13 @@ public class RelatorioLinhasHorario extends Relatorio { protected void processaParametros() throws Exception { } - private String getSql(ArrayList lsNumLinha, ArrayList lsNumServico, Empresa empresa, Integer tipoServico, GrupoRuta grupoRuta) { + private String getSql(ArrayList lsNumLinha, ArrayList lsNumServico, Empresa empresa, Integer tipoServico, GrupoRuta grupoRuta, Boolean isPorData) { StringBuilder sql = new StringBuilder(); sql.append(" SELECT "); sql.append(" GRUPO_RUTA, "); sql.append(" HORA, "); + sql.append(isPorData ? " DATA_CORRIDA," : ""); sql.append(" SERVICO, "); sql.append(" SERVICO2, "); sql.append(" SENTIDO , "); @@ -401,8 +407,9 @@ public class RelatorioLinhasHorario extends Relatorio { sql.append(" FROM "); sql.append(" (SELECT "); sql.append(" R.RUTA_ID, "); - sql.append(" NVL(GR.DESCGRUPO, 'Não Definido') AS GRUPO_RUTA, "); + sql.append(" NVL(GR.DESCGRUPO, 'Não Definido') AS GRUPO_RUTA, "); sql.append(" TO_CHAR(C.FECHORSALIDA, 'HH24:MI') AS HORA, "); + sql.append(isPorData ? " TO_CHAR(C.feccorrida,'dd/mm/yyyy') AS DATA_CORRIDA, " : ""); sql.append(" C.CORRIDA_ID AS SERVICO, "); sql.append(" C.CORRIDA2_ID AS SERVICO2, "); sql.append(" R.INDSENTIDOIDA AS SENTIDO, "); @@ -459,7 +466,7 @@ public class RelatorioLinhasHorario extends Relatorio { sql.append(" INNER JOIN PARADA ORIGEM ON C.Origen_Id = ORIGEM.PARADA_ID "); sql.append(" INNER JOIN PARADA DESTINO ON C.DESTINO_ID = DESTINO.PARADA_ID "); - sql.append(empresa == null ? "" : " INNER JOIN MARCA M ON (C.MARCA_ID = M.MARCA_ID AND M.EMPRESA_ID=" + empresa.getEmpresaId() + ")"); + sql.append(empresa == null ? "" : " INNER JOIN MARCA M ON (C.MARCA_ID = M.MARCA_ID AND M.EMPRESA_ID= :EMPRESA_ID)"); sql.append(" INNER JOIN RUTA R ON (C.RUTA_ID = R.RUTA_ID ) "); sql.append(" INNER JOIN RUTA_COMBINACION RC ON (RC.RUTA_ID = C.RUTA_ID AND RC.ACTIVO=1) "); sql.append(" INNER JOIN TRAMO TR ON (TR.TRAMO_ID = RC.TRAMO_ID AND TR.ORIGEN_ID = C.ORIGEN_ID AND TR.DESTINO_ID = C.DESTINO_ID) "); @@ -468,7 +475,7 @@ public class RelatorioLinhasHorario extends Relatorio { sql.append(" WHERE "); sql.append(" EXISTS (SELECT * FROM CAJA CA WHERE CA.CORRIDA_ID = C.CORRIDA_ID AND CA.FECCORRIDA = C.FECCORRIDA AND CA.MOTIVOCANCELACION_ID IS NULL) "); - 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') "); + sql.append(" AND C.FECCORRIDA BETWEEN TO_TIMESTAMP(:DATA_INICIO, 'dd/mm/yyyy hh24:mi:ss') AND TO_TIMESTAMP(:DATA_FINAL, 'dd/mm/yyyy hh24:mi:ss') "); sql.append(" GROUP BY C.CORRIDA_ID, C.CORRIDA2_ID, "); sql.append(" C.ROLOPERATIVO_ID, "); sql.append(" c.ruta_id, "); @@ -490,37 +497,20 @@ public class RelatorioLinhasHorario extends Relatorio { sql.append(" TO_CHAR(C.FECHORSALIDA, 'HH24:MI') AS HORASALIDA, "); sql.append(" COUNT(B.BOLETO_ID) AS ABSOL, C.CORRIDA2_ID, "); sql.append(" NVL(TF.PRECIO, 0) AS TARIFA "); - sql.append(" FROM CORRIDA C "); - - sql.append(empresa == null ? "" : " INNER JOIN MARCA M ON (C.MARCA_ID = M.MARCA_ID AND M.EMPRESA_ID=" + empresa.getEmpresaId() + ")"); - + sql.append(empresa == null ? "" : " INNER JOIN MARCA M ON (C.MARCA_ID = M.MARCA_ID AND M.EMPRESA_ID= :EMPRESA_ID)"); sql.append(" LEFT JOIN BOLETO B ON (B.CORRIDA_ID = C.CORRIDA_ID "); sql.append(" AND B.FECCORRIDA = C.FECCORRIDA "); sql.append(" AND B.ACTIVO = 1 "); sql.append(" AND B.MOTIVOCANCELACION_ID IS NULL "); - sql.append(" AND B.CATEGORIA_ID <> ").append(CONSTANTE_GRATUIDADE_CRIANCA).append(") "); + sql.append(" AND B.CATEGORIA_ID <> :CRIANCA_ID ) "); sql.append(" INNER JOIN RUTA R ON (C.RUTA_ID = R.RUTA_ID ) "); sql.append(" INNER JOIN RUTA_COMBINACION RC ON (RC.RUTA_ID = C.RUTA_ID AND RC.ACTIVO=1) "); sql.append(" INNER JOIN TRAMO TR ON (TR.TRAMO_ID = RC.TRAMO_ID AND TR.ORIGEN_ID = C.ORIGEN_ID AND TR.DESTINO_ID = C.DESTINO_ID) "); sql.append(" INNER JOIN TARIFA TF ON ( TR.TRAMO_ID=TF.TRAMO_ID AND TF.CLASESERVICIO_ID = C.CLASESERVICIO_ID AND TF.DESTINO_ID = C.DESTINO_ID AND TF.ORIGEN_ID = C.ORIGEN_ID AND TF.MARCA_ID = C.MARCA_ID AND TF.RUTA_ID = C.RUTA_ID AND R.ORGAOCONCEDENTE_ID= TF.ORGAOCONCEDENTE_ID AND TF.ACTIVO=1 AND ((TF.MONEDA_ID = B.MONEDA_ID) OR (B.MONEDA_ID IS NULL))) "); 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 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) { - if (lsNumServico.indexOf(corrida) == 0) { - sql.append(" AND B.CORRIDA_ID IN ( " + corrida.getId().getCorridaId()); - } else { - sql.append(" , " + corrida.getId().getCorridaId() + " "); - } - } - sql.append(" ) "); - } - - + sql.append(" WHERE C.ACTIVO NOT IN (0,2) AND C.FECCORRIDA BETWEEN TO_TIMESTAMP(:DATA_INICIO, 'dd/mm/yyyy hh24:mi:ss') AND TO_TIMESTAMP(:DATA_FINAL, 'dd/mm/yyyy hh24:mi:ss') "); + sql.append(lsNumServico.isEmpty() ? "" : " AND B.CORRIDA_ID IN ( :CORRIDA_ID ) "); sql.append(" GROUP BY C.CORRIDA_ID,C.CORRIDA2_ID, c.ruta_id, C.ROLOPERATIVO_ID, "); sql.append(" C.DESTINO_ID, C.ORIGEN_ID, TO_CHAR(C.FECHORSALIDA, 'HH24:MI'),NVL(TF.PRECIO, 0) "); sql.append(" ) TB4 ON (TB4.CORRIDA_ID = C.CORRIDA_ID AND (TB4.CORRIDA2_ID=C.CORRIDA2_ID OR (TB4.CORRIDA2_ID IS NULL AND C.CORRIDA2_ID IS NULL)) and tb4.c_ruta_id = c.ruta_id "); @@ -549,7 +539,7 @@ public class RelatorioLinhasHorario extends Relatorio { sql.append(" NVL(bo.preciobase, 0) AS PRECIOBASE, "); sql.append(" NVL(TF.PRECIO,0) AS TARIFA "); sql.append(" FROM CORRIDA CO "); - sql.append(empresa == null ? "" : " INNER JOIN MARCA M ON (CO.MARCA_ID = M.MARCA_ID AND M.EMPRESA_ID=" + empresa.getEmpresaId() + ")"); + sql.append(empresa == null ? "" : " INNER JOIN MARCA M ON (CO.MARCA_ID = M.MARCA_ID AND M.EMPRESA_ID= :EMPRESA_ID)"); 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 "); @@ -560,27 +550,14 @@ public class RelatorioLinhasHorario extends Relatorio { sql.append(" INNER JOIN TARIFA TF ON ( TR.TRAMO_ID=TF.TRAMO_ID AND TF.CLASESERVICIO_ID = CO.CLASESERVICIO_ID AND TF.DESTINO_ID = CO.DESTINO_ID AND TF.ORIGEN_ID = CO.ORIGEN_ID AND TF.MARCA_ID = CO.MARCA_ID AND TF.RUTA_ID = CO.RUTA_ID AND R.ORGAOCONCEDENTE_ID= TF.ORGAOCONCEDENTE_ID AND TF.ACTIVO=1 AND ((TF.MONEDA_ID = BO.MONEDA_ID) OR (BO.MONEDA_ID IS NULL))) "); sql.append(" INNER JOIN VIGENCIA_TARIFA VT ON (VT.VIGENCIATARIFA_ID = TF.VIGENCIATARIFA_ID AND CO.FECCORRIDA BETWEEN VT.FECINICIOVIGENCIA AND VT.FECFINVIGENCIA ) "); - - - 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 "); - sql.append(" AND BO.CATEGORIA_ID <> ").append(CONSTANTE_GRATUIDADE_CRIANCA); - sql.append(" AND BO.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) { - if (lsNumServico.indexOf(corrida) == 0) { - sql.append(" AND BO.CORRIDA_ID IN ( " + corrida.getId().getCorridaId()); - } else { - sql.append(" , " + corrida.getId().getCorridaId() + " "); - } - } - sql.append(" ) "); - } + sql.append(" AND BO.CATEGORIA_ID <> :CRIANCA_ID"); + sql.append(" AND BO.FECCORRIDA BETWEEN TO_TIMESTAMP(:DATA_INICIO, 'dd/mm/yyyy hh24:mi:ss') AND TO_TIMESTAMP(:DATA_FINAL, 'dd/mm/yyyy hh24:mi:ss') "); + sql.append(lsNumServico.isEmpty() ? "" : " AND BO.CORRIDA_ID IN ( :CORRIDA_ID ) "); sql.append(" GROUP BY CO.FECCORRIDA, CO.CORRIDA_ID, CO.CORRIDA2_ID, CO.ROLOPERATIVO_ID, "); sql.append(" CO.RUTA_ID, CO.EMPRESACORRIDA_ID, BO.NUMKMVIAJE, BO.BOLETO_ID, T.CANTKMREAL, "); sql.append(" NVL(BO.IMPORTESEGURO, 0), NVL(BO.IMPORTETAXAEMBARQUE, 0), "); @@ -588,50 +565,32 @@ public class RelatorioLinhasHorario extends Relatorio { sql.append(" ON (CJ.CORRIDA_ID = C.CORRIDA_ID AND (CJ.CORRIDA2_ID=C.CORRIDA2_ID OR (CJ.CORRIDA2_ID IS NULL AND C.CORRIDA2_ID IS NULL)) AND CJ.FECCORRIDA = C.FECCORRIDA AND CJ.ROLOPERATIVO_ID = C.ROLOPERATIVO_ID "); sql.append(" AND CJ.RUTA_ID = C.RUTA_ID AND CJ.EMPRESACORRIDA_ID = C.EMPRESACORRIDA_ID AND CJ.TARIFA=TF.PRECIO ) "); - sql.append(" WHERE 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) { - if (lsNumServico.indexOf(corrida) == 0) { - sql.append(" AND C.CORRIDA_ID IN ( " + corrida.getId().getCorridaId()); - } else { - sql.append(" , " + corrida.getId().getCorridaId() + " "); - } - } - sql.append(" ) "); - } - - sql.append(grupoRuta == null ? "" : " AND R.GRUPORUTA_ID IN ( " + grupoRuta.getGrupoRutaId() + " ) "); - - if (lsNumLinha.size() > 0) { - for (Ruta ruta : lsNumLinha) { - if (lsNumLinha.indexOf(ruta) == 0) { - sql.append(" AND R.RUTA_ID IN ( " + ruta.getRutaId()); - } else { - sql.append(" , " + ruta.getRutaId() + " "); - } - } - sql.append(" ) "); - } - - sql.append(tipoServico > 0 ? " AND C.TIPOSERVICIO_ID = " + tipoServico + " " : ""); + sql.append(" WHERE C.FECCORRIDA BETWEEN TO_TIMESTAMP(:DATA_INICIO, 'dd/mm/yyyy hh24:mi:ss') AND TO_TIMESTAMP(:DATA_FINAL, 'dd/mm/yyyy hh24:mi:ss') "); + sql.append(lsNumServico.isEmpty() ? "" : " AND C.CORRIDA_ID IN ( :CORRIDA_ID ) "); + sql.append(grupoRuta == null ? "" : " AND R.GRUPORUTA_ID IN ( :GRUPORUTA_ID ) "); + sql.append(lsNumLinha.isEmpty() ? "" : " AND R.RUTA_ID IN ( :RUTA_ID ) "); + sql.append(tipoServico == 0 ? "" : " AND C.TIPOSERVICIO_ID = :TIPOSERVICIO_ID" ); sql.append(" AND C.ACTIVO <> 0 AND ORIGEM.ACTIVO = 1 AND DESTINO.ACTIVO = 1 AND TB2.ORIGEM = ORIGEM.CVEPARADA AND TB2.DESTINO = DESTINO.CVEPARADA "); sql.append("AND R.ACTIVO = 1 AND RO.ACTIVO = 1 AND DA.ACTIVO = 1 AND CS.ACTIVO = 1 "); - sql.append("GROUP BY R.RUTA_ID, NVL(GR.DESCGRUPO, 'Não Definido'), TO_CHAR(C.FECHORSALIDA, 'HH24:MI'), C.CORRIDA_ID, R.INDSENTIDOIDA, "); + sql.append("GROUP BY R.RUTA_ID, NVL(GR.DESCGRUPO, 'Não Definido'), TO_CHAR(C.FECHORSALIDA, 'HH24:MI'), "); + sql.append(isPorData ? " to_char(C.feccorrida ,'dd/mm/yyyy'), " : null); + sql.append("C.CORRIDA_ID, R.INDSENTIDOIDA, "); sql.append(" NVL(TF.PRECIO, 0), DA.CANTASIENTOS, CS.DESCCLASE, TR.CANTKMREAL, TB2.ORD, TB2.EXTRA, ABSOL, "); sql.append(" CO.ESTADO_ID, CD.ESTADO_ID, ORIGEM.CVEPARADA, DESTINO.CVEPARADA, CJ.PRECIOPAGADO, "); sql.append(" CJ.IMPORTESEGURO, CJ.IMPORTETAXAEMBARQUE, CJ.IMPORTEPEDAGIO, "); sql.append(" CJ.EQUIVALENTE, CJ.KM_REAL , CJ.BOLETO_ID, C.CORRIDA2_ID ) "); - sql.append("GROUP BY GRUPO_RUTA, HORA, SERVICO, SERVICO2, SENTIDO, LOT, CLA, TARIFA, ORIGEM, DESTINO, "); + sql.append("GROUP BY GRUPO_RUTA, HORA, "); + sql.append(isPorData ? " DATA_CORRIDA, " : null); + sql.append("SERVICO, SERVICO2, SENTIDO, LOT, CLA, TARIFA, ORIGEM, DESTINO, "); sql.append(" EXTENSAO, BAGAGENS, ORD, EXTRA, TIPO_LINHA, ISDOUBLEDECK, ABSOL "); sql.append("ORDER BY TIPO_LINHA, GRUPO_RUTA, SERVICO, SERVICO2, ORIGEM, DESTINO "); - return sql.toString(); + System.out.println(sql.toString()); + return sql.toString(); } private String buscarConstante(String nomeConstante) { ConstanteService constanteService = (ConstanteService) AppContext.getApplicationContext().getBean("constanteService"); return constanteService.buscarPorNomeConstante(nomeConstante).getValorconstante(); } -} +} \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioLinhasHorarioSimplificado.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioLinhasHorarioSimplificado.java index 0450d1b17..086f54a5d 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioLinhasHorarioSimplificado.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioLinhasHorarioSimplificado.java @@ -14,6 +14,7 @@ import java.util.List; import java.util.Map; import org.apache.log4j.Logger; +import org.zkoss.web.servlet.dsp.action.If; import com.rjconsultores.ventaboletos.entidad.Corrida; import com.rjconsultores.ventaboletos.entidad.Empresa; @@ -43,52 +44,27 @@ public class RelatorioLinhasHorarioSimplificado extends Relatorio { public void initDados() throws Exception { CONSTANTE_GRATUIDADE_CRIANCA = buscarConstante("GRATUIDADE_CRIANCA"); - Connection conexao = this.relatorio.getConexao(); - Map parametros = this.relatorio.getParametros(); ArrayList lsNumLinha = (ArrayList) parametros.get("lsNumLinha"); ArrayList lsNumServico = (ArrayList) parametros.get("lsNumServico"); - - String servicoFiltro = ""; - if (lsNumServico.size() > 0) { - for (Corrida corrida : lsNumServico) { - if (lsNumServico.indexOf(corrida) == 0) { - servicoFiltro = "" + corrida.getId().getCorridaId(); - } else { - servicoFiltro += ", " + corrida.getId().getCorridaId(); - } - } - } else { - servicoFiltro = "TODOS"; - } - parametros.put("SERVICO_FILTRO", servicoFiltro); - - String linhaFiltro = ""; - if (lsNumLinha.size() > 0) { - for (Ruta ruta : lsNumLinha) { - if (lsNumLinha.indexOf(ruta) == 0) { - linhaFiltro = "" + ruta.getRutaId(); - } else { - linhaFiltro += ", " + ruta.getRutaId(); - } - } - } else { - linhaFiltro = "TODOS"; - } - parametros.put("LINHA_FILTRO", linhaFiltro); + parametros.put("SERVICO_FILTRO", retornaFiltro(lsNumServico, null)); + parametros.put("LINHA_FILTRO", retornaFiltro(null, lsNumLinha)); Empresa empresa = (Empresa) parametros.get("EMPRESA"); - GrupoRuta grupoRuta = (GrupoRuta) parametros.get("GRUPORUTA"); - Integer tipoServico = (Integer) parametros.get("TIPOSERVICIO_ID"); - - String sql = getSql(lsNumLinha, lsNumServico, empresa, tipoServico, grupoRuta, (Boolean)parametros.get("ISSENTIDOIDA"), (Boolean)parametros.get("ISSENTIDOVOLTA")); + Boolean isPorData = parametros.get("ISPORDATA") == null ? false : true; + String sql = getSql(lsNumLinha, lsNumServico, empresa, tipoServico, grupoRuta, (Boolean)parametros.get("ISSENTIDOIDA"), (Boolean)parametros.get("ISSENTIDOVOLTA"), isPorData); NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql); ResultSet rset = null; + stmt.setString("CRIANCA_ID",CONSTANTE_GRATUIDADE_CRIANCA); + + if (empresa != null) { + stmt.setInt("EMPRESA_ID", empresa.getEmpresaId()); + } if (parametros.get("HORA_INICIAL") == null) { SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); if (parametros.get("DATA_INICIO") != null) { @@ -103,6 +79,20 @@ public class RelatorioLinhasHorarioSimplificado extends Relatorio { }else { setaParametroDataHora(parametros, stmt); } + if (grupoRuta != null) { + stmt.setInt("GRUPORUTA_ID", grupoRuta.getGrupoRutaId()); + } + if (lsNumServico != null && !lsNumServico.isEmpty()) { + String corridaIds = retornaFiltro(lsNumServico, null); + stmt.setString("CORRIDA_ID", corridaIds); + } + if (lsNumLinha != null && !lsNumLinha.isEmpty()) { + String rutaIds = retornaFiltro(null, lsNumLinha); + stmt.setString("RUTA_ID", rutaIds); + } + if (tipoServico > 0) { + stmt.setInt("TIPOSERVICIO_ID", tipoServico); + } rset = stmt.executeQuery(); @@ -139,6 +129,9 @@ public class RelatorioLinhasHorarioSimplificado extends Relatorio { horarioBean.setGrupoRuta(group); horarioBean.setTipoLinha((String) rset.getObject("TIPO_LINHA")); horarioBean.setHora((String) rset.getObject("HORA")); + if(isPorData) { + horarioBean.setDataCorrida((String) rset.getObject("DATA_CORRIDA")); + } horarioBean.setServico((BigDecimal) rset.getObject("SERVICO")); if (rset.getObject("SENTIDO") != null) { @@ -248,6 +241,31 @@ public class RelatorioLinhasHorarioSimplificado extends Relatorio { } } + + private String retornaFiltro(ArrayList lsNumServico, ArrayList lsNumLinha) { + String filtro = "TODOS"; + if (lsNumServico != null && !lsNumServico.isEmpty()) { + for (Corrida corrida : lsNumServico) { + if (lsNumServico.indexOf(corrida) == 0) { + filtro = "" + corrida.getId().getCorridaId(); + } else { + filtro += ", " + corrida.getId().getCorridaId(); + } + } + return filtro; + } else if (lsNumLinha != null && !lsNumLinha.isEmpty()) { + for (Ruta ruta : lsNumLinha) { + if (lsNumLinha.indexOf(ruta) == 0) { + filtro = "" + ruta.getRutaId(); + } else { + filtro += ", " + ruta.getRutaId(); + } + } + return filtro; + } else { + return filtro; + } + } }); @@ -421,12 +439,14 @@ public class RelatorioLinhasHorarioSimplificado extends Relatorio { protected void processaParametros() throws Exception { } - private String getSql(ArrayList lsNumLinha, ArrayList lsNumServico, Empresa empresa, Integer tipoServico, GrupoRuta grupoRuta, Boolean isSentidoIda, Boolean isSentidoVolta) { + private String getSql(ArrayList lsNumLinha, ArrayList lsNumServico, Empresa empresa, Integer tipoServico, + GrupoRuta grupoRuta, Boolean isSentidoIda, Boolean isSentidoVolta, Boolean isPorData) { StringBuilder sql = new StringBuilder(); sql.append(" SELECT "); sql.append(" GRUPO_RUTA, "); sql.append(" HORA, "); + sql.append(isPorData ? " DATA_CORRIDA," : ""); sql.append(" DESCRUTA, "); sql.append(" SERVICO, "); sql.append(" SENTIDO , "); @@ -450,8 +470,9 @@ public class RelatorioLinhasHorarioSimplificado extends Relatorio { sql.append(" (SELECT "); sql.append(" R.RUTA_ID, "); sql.append(" R.DESCRUTA AS DESCRUTA, "); - sql.append(" NVL(GR.DESCGRUPO, 'Não Definido') AS GRUPO_RUTA, "); + sql.append(" NVL(GR.DESCGRUPO, 'Não Definido') AS GRUPO_RUTA, "); sql.append(" TO_CHAR(C.FECHORSALIDA, 'HH24:MI') AS HORA, "); + sql.append(isPorData ? " TO_CHAR(C.feccorrida,'dd/mm/yyyy') AS DATA_CORRIDA, " : ""); sql.append(" C.CORRIDA_ID AS SERVICO, "); sql.append(" R.INDSENTIDOIDA AS SENTIDO, "); sql.append(" DA.CANTASIENTOS AS LOT, "); @@ -487,7 +508,7 @@ public class RelatorioLinhasHorarioSimplificado extends Relatorio { sql.append(" INNER JOIN PARADA ORIGEM ON C.Origen_Id = ORIGEM.PARADA_ID "); sql.append(" INNER JOIN PARADA DESTINO ON C.DESTINO_ID = DESTINO.PARADA_ID "); - sql.append(empresa == null ? "" : " INNER JOIN MARCA M ON (C.MARCA_ID = M.MARCA_ID AND M.EMPRESA_ID=" + empresa.getEmpresaId() + ")"); + sql.append(empresa == null ? "" : " INNER JOIN MARCA M ON (C.MARCA_ID = M.MARCA_ID AND M.EMPRESA_ID= :EMPRESA_ID)"); sql.append(" WHERE "); sql.append(" EXISTS (SELECT * FROM CAJA CA WHERE CA.CORRIDA_ID = C.CORRIDA_ID AND CA.FECCORRIDA = C.FECCORRIDA AND CA.MOTIVOCANCELACION_ID IS NULL) "); @@ -498,9 +519,10 @@ public class RelatorioLinhasHorarioSimplificado extends Relatorio { sql.append(" Destino.Cveparada, "); sql.append(" ORIGEM.CVEPARADA, "); sql.append(" TO_CHAR(C.FECHORSALIDA, 'HH24:MI') "); - sql.append(" ) TB2 ON (TB2.CORRIDA_ID = C.CORRIDA_ID and tb2.c_ruta_id = c.ruta_id ) "); + sql.append(" ) TB2 ON ((TB2.CORRIDA_ID = C.CORRIDA_ID and tb2.c_ruta_id = c.ruta_id ) "); sql.append(" AND TB2.ROLOPERATIVO_ID = C.ROLOPERATIVO_ID "); - sql.append(" AND TB2.HORASALIDA = TO_CHAR(C.FECHORSALIDA, 'HH24:MI') "); + sql.append(" AND TB2.HORASALIDA = TO_CHAR(C.FECHORSALIDA, 'HH24:MI')) "); + sql.append(" INNER JOIN ("); sql.append(" SELECT "); sql.append(" C.CORRIDA_ID, "); @@ -512,74 +534,56 @@ public class RelatorioLinhasHorarioSimplificado extends Relatorio { sql.append(" COUNT(B.BOLETO_ID) AS ABSOL "); sql.append(" FROM CORRIDA C "); - sql.append(empresa == null ? "" : " INNER JOIN MARCA M ON (C.MARCA_ID = M.MARCA_ID AND M.EMPRESA_ID=" + empresa.getEmpresaId() + ")"); + sql.append(empresa == null ? "" : " INNER JOIN MARCA M ON (C.MARCA_ID = M.MARCA_ID AND M.EMPRESA_ID= :EMPRESA_ID)"); 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(" ) "); + sql.append(" AND B.CATEGORIA_ID <> :CRIANCA_ID ) "); 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) { - for (Corrida corrida : lsNumServico) { - if (lsNumServico.indexOf(corrida) == 0) { - sql.append(" AND B.CORRIDA_ID IN ( " + corrida.getId().getCorridaId()); - } else { - sql.append(" , " + corrida.getId().getCorridaId() + " "); - } - } - sql.append(" ) "); - } + sql.append(lsNumServico.isEmpty() ? "" : " AND B.CORRIDA_ID IN (:CORRIDA_ID) "); sql.append(" GROUP BY C.CORRIDA_ID, c.ruta_id, C.ROLOPERATIVO_ID, C.DESTINO_ID, C.ORIGEN_ID, TO_CHAR(C.FECHORSALIDA, 'HH24:MI') "); - sql.append(" ) TB4 ON (TB4.CORRIDA_ID = C.CORRIDA_ID and tb4.c_ruta_id = c.ruta_id) "); + sql.append(" ) TB4 ON ((TB4.CORRIDA_ID = C.CORRIDA_ID and tb4.c_ruta_id = c.ruta_id) "); sql.append(" AND c.DESTINO_ID = TB4.DESTINO_ID "); sql.append(" AND c.ORIGEN_ID = TB4.ORIGEN_ID "); sql.append(" AND TB4.ROLOPERATIVO_ID = C.ROLOPERATIVO_ID "); - sql.append(" AND TB4.HORASALIDA = TO_CHAR(C.FECHORSALIDA, 'HH24:MI') "); + sql.append(" AND TB4.HORASALIDA = TO_CHAR(C.FECHORSALIDA, 'HH24:MI')) "); sql.append("LEFT JOIN "); sql.append(" (SELECT CO.FECCORRIDA, "); - sql.append(" CO.CORRIDA_ID, "); - sql.append(" CO.ROLOPERATIVO_ID, "); - sql.append(" CO.RUTA_ID, "); - sql.append(" CO.EMPRESACORRIDA_ID, "); - sql.append(" BO.BOLETO_ID, "); - sql.append(" BO.NUMKMVIAJE * COUNT(1) AS KM_REAL, "); - sql.append(" CASE "); - sql.append("WHEN T.CANTKMREAL<>0 AND BO.NUMKMVIAJE<>0 "); - sql.append("THEN ROUND(BO.NUMKMVIAJE * COUNT(1) / T.CANTKMREAL, 3) "); - sql.append("ELSE 0 "); - sql.append("END AS EQUIVALENTE, "); - sql.append(" NVL(BO.IMPORTESEGURO, 0) AS IMPORTESEGURO, "); - sql.append(" NVL(BO.IMPORTETAXAEMBARQUE, 0) AS IMPORTETAXAEMBARQUE, "); - sql.append(" NVL(BO.IMPORTEPEDAGIO, 0) AS IMPORTEPEDAGIO, "); - sql.append(" NVL(BO.PRECIOPAGADO, 0) AS PRECIOPAGADO "); - sql.append(" FROM CORRIDA CO "); - sql.append(empresa == null ? "" : " INNER JOIN MARCA M ON (CO.MARCA_ID = M.MARCA_ID AND M.EMPRESA_ID=" + empresa.getEmpresaId() + ")"); - 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 NOT IN (0,2) "); + sql.append(" CO.CORRIDA_ID, "); + sql.append(" CO.ROLOPERATIVO_ID, "); + sql.append(" CO.RUTA_ID, "); + sql.append(" CO.EMPRESACORRIDA_ID, "); + sql.append(" BO.BOLETO_ID, "); + sql.append(" BO.NUMKMVIAJE * COUNT(1) AS KM_REAL, "); + sql.append(" CASE "); + sql.append(" WHEN T.CANTKMREAL<>0 AND BO.NUMKMVIAJE<>0 "); + sql.append(" THEN ROUND(BO.NUMKMVIAJE * COUNT(1) / T.CANTKMREAL, 3) "); + sql.append(" ELSE 0 "); + sql.append(" END AS EQUIVALENTE, "); + sql.append(" NVL(BO.IMPORTESEGURO, 0) AS IMPORTESEGURO, "); + sql.append(" NVL(BO.IMPORTETAXAEMBARQUE, 0) AS IMPORTETAXAEMBARQUE, "); + sql.append(" NVL(BO.IMPORTEPEDAGIO, 0) AS IMPORTEPEDAGIO, "); + sql.append(" NVL(BO.PRECIOPAGADO, 0) AS PRECIOPAGADO "); + sql.append(" FROM CORRIDA CO "); + sql.append(empresa == null ? "" : " INNER JOIN MARCA M ON (CO.MARCA_ID = M.MARCA_ID AND M.EMPRESA_ID= :EMPRESA_ID)"); + 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 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 "); - sql.append(" AND BO.CATEGORIA_ID <> ").append(CONSTANTE_GRATUIDADE_CRIANCA); + sql.append(" AND BO.CATEGORIA_ID <> :CRIANCA_ID"); sql.append(" AND BO.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) { - if (lsNumServico.indexOf(corrida) == 0) { - sql.append(" AND BO.CORRIDA_ID IN ( " + corrida.getId().getCorridaId()); - } else { - sql.append(" , " + corrida.getId().getCorridaId() + " "); - } - } - sql.append(" ) "); - } + sql.append(lsNumServico.isEmpty() ? "" : " AND B.CORRIDA_ID IN (:CORRIDA_ID) "); sql.append(" GROUP BY CO.FECCORRIDA, CO.CORRIDA_ID, CO.ROLOPERATIVO_ID, CO.RUTA_ID, CO.EMPRESACORRIDA_ID, BO.NUMKMVIAJE, BO.BOLETO_ID, T.CANTKMREAL, "); - sql.append(" NVL(BO.IMPORTESEGURO, 0), NVL(BO.IMPORTETAXAEMBARQUE, 0), NVL(BO.IMPORTEPEDAGIO, 0), NVL(BO.PRECIOPAGADO, 0)) CJ "); - sql.append(" ON (CJ.CORRIDA_ID = C.CORRIDA_ID AND CJ.FECCORRIDA = C.FECCORRIDA AND CJ.ROLOPERATIVO_ID = C.ROLOPERATIVO_ID "); + sql.append(" NVL(BO.IMPORTESEGURO, 0), NVL(BO.IMPORTETAXAEMBARQUE, 0), NVL(BO.IMPORTEPEDAGIO, 0), NVL(BO.PRECIOPAGADO, 0) "); + sql.append(" ) CJ ON (CJ.CORRIDA_ID = C.CORRIDA_ID AND CJ.FECCORRIDA = C.FECCORRIDA AND CJ.ROLOPERATIVO_ID = C.ROLOPERATIVO_ID "); sql.append(" AND CJ.RUTA_ID = C.RUTA_ID AND CJ.EMPRESACORRIDA_ID = C.EMPRESACORRIDA_ID) "); sql.append("INNER JOIN PARADA ORIGEM ON (C.ORIGEN_ID = ORIGEM.PARADA_ID ) "); sql.append("INNER JOIN PARADA DESTINO ON ( C.DESTINO_ID = DESTINO.PARADA_ID ) "); @@ -599,38 +603,17 @@ public class RelatorioLinhasHorarioSimplificado extends Relatorio { sql.append("FROM RUTA_COMBINACION RC "); sql.append("INNER JOIN TRAMO T ON RC.TRAMO_ID = T.TRAMO_ID "); sql.append("WHERE RC.ACTIVO = 1 "); - sql.append(") TB5 ON TB5.RUTA_ID = C.RUTA_ID "); + sql.append(") TB5 ON (TB5.RUTA_ID = C.RUTA_ID "); sql.append("AND TB5.ORIGEN_ID = ORIGEM.PARADA_ID "); - sql.append("AND TB5.DESTINO_ID = DESTINO.PARADA_ID "); + sql.append("AND TB5.DESTINO_ID = DESTINO.PARADA_ID) "); sql.append(" WHERE 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(" AND (TF.TARIFA_ID IS NULL OR (TF.TARIFA_ID IS NOT NULL AND C.FECCORRIDA BETWEEN VTF.FECINICIOVIGENCIA AND VTF.FECFINVIGENCIA )) "); sql.append(" "); - if (lsNumServico.size() > 0) { - for (Corrida corrida : lsNumServico) { - if (lsNumServico.indexOf(corrida) == 0) { - sql.append(" AND C.CORRIDA_ID IN ( " + corrida.getId().getCorridaId()); - } else { - sql.append(" , " + corrida.getId().getCorridaId() + " "); - } - } - sql.append(" ) "); - } - - sql.append(grupoRuta == null ? "" : " AND R.GRUPORUTA_ID IN ( " + grupoRuta.getGrupoRutaId() + " ) "); - - if (lsNumLinha.size() > 0) { - for (Ruta ruta : lsNumLinha) { - if (lsNumLinha.indexOf(ruta) == 0) { - sql.append(" AND R.RUTA_ID IN ( " + ruta.getRutaId()); - } else { - sql.append(" , " + ruta.getRutaId() + " "); - } - } - sql.append(" ) "); - } - - sql.append(tipoServico > 0 ? " AND C.TIPOSERVICIO_ID = " + tipoServico + " " : ""); + sql.append(lsNumServico.isEmpty() ? "" : " AND B.CORRIDA_ID IN (:CORRIDA_ID) "); + sql.append(grupoRuta == null ? "" : " AND R.GRUPORUTA_ID IN (:GRUPORUTA_ID) "); + sql.append(lsNumLinha.isEmpty() ? "" : " AND R.RUTA_ID IN (:RUTA_ID) "); + sql.append(tipoServico == 0 ? "" : " AND C.TIPOSERVICIO_ID = :TIPOSERVICIO_ID" ); if(Boolean.TRUE.equals(isSentidoIda)) { sql.append(" AND R.INDSENTIDOIDA =1 "); @@ -642,12 +625,16 @@ public class RelatorioLinhasHorarioSimplificado extends Relatorio { sql.append(" AND C.ACTIVO <> 0 AND ORIGEM.ACTIVO = 1 AND DESTINO.ACTIVO = 1 AND TB2.ORIGEM = ORIGEM.CVEPARADA AND TB2.DESTINO = DESTINO.CVEPARADA "); sql.append("AND R.ACTIVO = 1 AND RO.ACTIVO = 1 AND DA.ACTIVO = 1 AND CS.ACTIVO = 1 "); - sql.append("GROUP BY R.RUTA_ID, R.DESCRUTA, NVL(GR.DESCGRUPO, 'Não Definido'), TO_CHAR(C.FECHORSALIDA, 'HH24:MI'), C.CORRIDA_ID, R.INDSENTIDOIDA, "); + sql.append("GROUP BY R.RUTA_ID, R.DESCRUTA, NVL(GR.DESCGRUPO, 'Não Definido'), TO_CHAR(C.FECHORSALIDA, 'HH24:MI'),"); + sql.append(isPorData ? " TO_CHAR(C.feccorrida ,'dd/mm/yyyy'), " : null); + sql.append(" C.CORRIDA_ID, R.INDSENTIDOIDA, "); sql.append(" DA.CANTASIENTOS, CS.DESCCLASE, TB5.EXTENSAO, TB2.ORD, TB2.EXTRA, ABSOL, "); sql.append(" CO.ESTADO_ID, CD.ESTADO_ID, ORIGEM.CVEPARADA, DESTINO.CVEPARADA, CJ.PRECIOPAGADO, "); sql.append(" CJ.IMPORTESEGURO, CJ.IMPORTETAXAEMBARQUE, CJ.IMPORTEPEDAGIO, "); sql.append(" CJ.EQUIVALENTE, CJ.KM_REAL , CJ.BOLETO_ID ) "); - sql.append("GROUP BY GRUPO_RUTA, HORA, DESCRUTA, SERVICO, SENTIDO, LOT, CLA, ORIGEM, DESTINO, "); + sql.append("GROUP BY GRUPO_RUTA, HORA, "); + sql.append(isPorData ? " DATA_CORRIDA, " : null); + sql.append(" DESCRUTA, SERVICO, SENTIDO, LOT, CLA, ORIGEM, DESTINO, "); sql.append(" EXTENSAO, BAGAGENS, ORD, EXTRA, TIPO_LINHA, ABSOL "); sql.append("ORDER BY TIPO_LINHA, GRUPO_RUTA, DESCRUTA, SERVICO, ORIGEM, DESTINO "); diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioLinhasHorarioSimplificado_pt_BR.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioLinhasHorarioSimplificado_pt_BR.properties index 89a6fdc28..c45d8d937 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioLinhasHorarioSimplificado_pt_BR.properties +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioLinhasHorarioSimplificado_pt_BR.properties @@ -20,6 +20,7 @@ detail.viagens=VIAGENS detail.passageiros=PASSAGEIROS detail.parametrosOperacionais=PARÂM. OPERACIONAIS detail.hora=Hora +detail.data=Data detail.servico=Serviço detail.trecho=Trecho detail.setido=Sentido diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhasHorarioSimplificado.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhasHorarioSimplificado.jasper index fca3f372b..e9801533f 100644 Binary files a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhasHorarioSimplificado.jasper and b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhasHorarioSimplificado.jasper differ diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhasHorarioSimplificado.jrxml b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhasHorarioSimplificado.jrxml index 79211eb68..66bef579e 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhasHorarioSimplificado.jrxml +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhasHorarioSimplificado.jrxml @@ -1,8 +1,8 @@ - - + + @@ -33,6 +33,7 @@ + @@ -58,6 +59,7 @@ + @@ -571,7 +573,7 @@ - + @@ -616,7 +618,7 @@ - + @@ -638,7 +640,7 @@ - + @@ -690,19 +692,26 @@ - + - + + + + + + + + @@ -753,14 +762,14 @@ - + - + @@ -802,26 +811,33 @@ - + - + - + + + + + + + + diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioLinhasHorarioBean.java b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioLinhasHorarioBean.java index d0bfab3fc..399aa3bb1 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioLinhasHorarioBean.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioLinhasHorarioBean.java @@ -8,6 +8,7 @@ public class RelatorioLinhasHorarioBean { private String grupoRuta; private String origem; private String destino; + private String dataCorrida; private String hora; private BigDecimal servico; private BigDecimal servico2; @@ -119,6 +120,14 @@ public class RelatorioLinhasHorarioBean { this.hora = hora; } + public String getDataCorrida() { + return dataCorrida; + } + + public void setDataCorrida(String dataCorrida) { + this.dataCorrida = dataCorrida; + } + public BigDecimal getServico() { return servico == null ? BigDecimal.ZERO : servico; } diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioLinhasHorarioController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioLinhasHorarioController.java index 0cdda5569..24a9d6388 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioLinhasHorarioController.java +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioLinhasHorarioController.java @@ -16,6 +16,7 @@ import org.zkoss.util.resource.Labels; import org.zkoss.zhtml.Messagebox; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.Event; +import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zul.Checkbox; import org.zkoss.zul.Combobox; import org.zkoss.zul.Datebox; @@ -88,6 +89,8 @@ public class RelatorioLinhasHorarioController extends MyGenericForwardComposer { private Radio rdExtraOrdinario; private Radio rdTodos; private Checkbox chkSimplificado; + private Checkbox chkSimplificadoPorData; + private Timebox horaInicial; private Timebox horaFinal; private Checkbox chkIndSentidoIda; @@ -119,6 +122,7 @@ public class RelatorioLinhasHorarioController extends MyGenericForwardComposer { parametros.put("DATA_FINAL", DateUtil.fimFecha(this.datFinal.getValue())); parametros.put("ISSIMPLIFICADO", chkSimplificado.isChecked()); + parametros.put("ISSIMPLIFICADO", chkSimplificadoPorData.isChecked()); parametros.put("USUARIO_ID", UsuarioLogado.getUsuarioLogado().getUsuarioId().toString()); parametros.put("NOME_USUARIO", UsuarioLogado.getUsuarioLogado().getNombusuario().toString()); @@ -152,10 +156,8 @@ public class RelatorioLinhasHorarioController extends MyGenericForwardComposer { parametros.put("NOMBEMPRESA", "TODOS"); } - lsNumLinha = new ArrayList(Arrays.asList(linhaListSelList.getData())); lsNumServico = new ArrayList(Arrays.asList(servicoListSelList.getData())); - parametros.put("lsNumLinha", lsNumLinha); parametros.put("lsNumServico", lsNumServico); Relatorio relatorio = null; @@ -172,6 +174,7 @@ public class RelatorioLinhasHorarioController extends MyGenericForwardComposer { } parametros.put("ISSENTIDOIDA", chkIndSentidoIda.isChecked()); parametros.put("ISSENTIDOVOLTA", chkIndSentidoVolta.isChecked() ); + parametros.put("ISPORDATA",chkSimplificadoPorData.isChecked() ); relatorio = new RelatorioLinhasHorarioSimplificado(parametros, dataSourceRead.getConnection()); tituloRelatorio = "relatorioLinhasHorarioSimplificadoController.window.title"; @@ -260,7 +263,31 @@ public class RelatorioLinhasHorarioController extends MyGenericForwardComposer { servicoList.setItemRenderer(new RenderCorridaOrigemDestino()); servicoListSelList.setItemRenderer(new RenderCorridaOrigemDestino()); + chkSimplificado.addEventListener("onCheck", new EventListener() { + public void onEvent(Event event) { + boolean isChecked = chkSimplificado.isChecked(); + + if (!isChecked) { + chkSimplificadoPorData.setChecked(false); + chkSimplificadoPorData.setDisabled(true); + } else { + chkSimplificadoPorData.setDisabled(false); + } + } + }); + + chkSimplificadoPorData.addEventListener("onCheck", new EventListener() { + public void onEvent(Event event) { + boolean isChecked = chkSimplificadoPorData.isChecked(); + + if (isChecked && !chkSimplificado.isChecked()) { + chkSimplificado.setChecked(true); + } + } + }); } + + public List getLsEmpresa() { return lsEmpresa; diff --git a/web/WEB-INF/i3-label_en.label b/web/WEB-INF/i3-label_en.label index 64deb7f3d..e905228e4 100644 --- a/web/WEB-INF/i3-label_en.label +++ b/web/WEB-INF/i3-label_en.label @@ -675,34 +675,35 @@ relatorioOCDController.msg.nenhumaDataInformada = Nenhuma data foi informada relatorioOCDController.msg.dataInicialFinal = Informar data inicial e final #Relatorio Linhas Horario -relatorioLinhasHorarioController.lbDataIni.value = Data Inicial Viagem -relatorioLinhasHorarioController.lbDataFin.value = Data Final Viagem -relatorioLinhasHorarioController.lbEmpresa.label = Empresa -relatorioLinhasHorarioController.lbGrupoRuta.label = Grupo de Linhas -relatorioLinhasHorarioController.lbLote.label = Lote -relatorioLinhasHorarioController.lbLinha.label = Linha -relatorioLinhasHorarioController.lbServico.label = Servico -relatorioLinhasHorarioController.window.title = Relatório de Linhas por Horário -relatorioLinhasHorarioSimplificadoController.window.title = Relatório de Linhas por Horário Simplificado -relatorioLinhasHorarioController.lbNumRuta.label = Num. Linha -relatorioLinhasHorarioController.lbPrefixo.label = Prefixo +relatorioLinhasHorarioController.lbDataIni.value = Departure Date +relatorioLinhasHorarioController.lbDataFin.value = Arrival Date +relatorioLinhasHorarioController.lbEmpresa.label = Company +relatorioLinhasHorarioController.lbGrupoRuta.label = Line Group +relatorioLinhasHorarioController.lbLote.label = Batch +relatorioLinhasHorarioController.lbLinha.label = Line +relatorioLinhasHorarioController.lbServico.label = Service +relatorioLinhasHorarioController.window.title = Schedule by Line Report +relatorioLinhasHorarioSimplificadoController.window.title = Simplified Schedule by Line Report +relatorioLinhasHorarioController.lbNumRuta.label = Line Number +relatorioLinhasHorarioController.lbPrefixo.label = Prefix -relatorioLinhasHorarioController.lbOrgao.label = Orgão Concedente -relatorioLinhasHorarioController.lbDataCorrida.value = Data -relatorioLinhasHorarioController.btnPesquisa.label = Pesquisar -relatorioLinhasHorarioController.btnLimpar.label = Limpar -relatorioLinhasHorarioController.horaSaida.label = Hora -relatorioLinhasHorarioController.origem.destino.label = Origem x Destino -relatorioLinhasHorarioController.rutaId.label = Cód Linha -relatorioLinhasHorarioController.rdTipoServico.label = Tipos de Serviços -relatorioLinhasHorarioController.rdOrdinario.label = Ordinários -relatorioLinhasHorarioController.rdExtraOrdinario.label = Extraordinários -relatorioLinhasHorarioController.rdTodos.label = Todos -relatorioLinhasHorarioController.lblSimplificado.value = Emite relatório Simplificado -relatorioLinhasHorarioController.lbHoraSaidaInicial.value = Hora Saída -relatorioLinhasHorarioController.lbHoraSaidaFinal.value = à -relatorioLinhasHorarioController.chKIda.value = Linha Ida -relatorioLinhasHorarioController.chKVolta.value = Linha Volta +relatorioLinhasHorarioController.lbOrgao.label = Regulatory Agency +relatorioLinhasHorarioController.lbDataCorrida.value = Date +relatorioLinhasHorarioController.btnPesquisa.label = Search +relatorioLinhasHorarioController.btnLimpar.label = Clear +relatorioLinhasHorarioController.horaSaida.label = Time +relatorioLinhasHorarioController.origem.destino.label = Origin x Destination +relatorioLinhasHorarioController.rutaId.label = Line Code +relatorioLinhasHorarioController.rdTipoServico.label = Service Types +relatorioLinhasHorarioController.rdOrdinario.label = Regular +relatorioLinhasHorarioController.rdExtraOrdinario.label = Extraordinary +relatorioLinhasHorarioController.rdTodos.label = All +relatorioLinhasHorarioController.lblSimplificado.value = Generate Simplified Report. +relatorioLinhasHorarioController.lblSimplificadoData.value = Generate Simp. by date +relatorioLinhasHorarioController.lbHoraSaidaInicial.value = Departure Time +relatorioLinhasHorarioController.lbHoraSaidaFinal.value = to +relatorioLinhasHorarioController.chKIda.value = Outbound Line +relatorioLinhasHorarioController.chKVolta.value = Return Line #Relatório Indice IRK relatorioIndiceIRKController.window.title = Relatório Indice IRK diff --git a/web/WEB-INF/i3-label_es_MX.label b/web/WEB-INF/i3-label_es_MX.label index f7a7077f0..52f679d82 100644 --- a/web/WEB-INF/i3-label_es_MX.label +++ b/web/WEB-INF/i3-label_es_MX.label @@ -630,30 +630,35 @@ relatorioOCDController.msg.nenhumaDataInformada = Ninguna fecha fue informada relatorioOCDController.msg.dataInicialFinal = Informar fecha inicial y final #Relatorio rutas Horario -relatorioLinhasHorarioController.window.title = Reporte de rutas por horário -relatorioLinhasHorarioController.lbDataIni.value = Fecha inicial viaje -relatorioLinhasHorarioController.lbDataFin.value = Fecha final viaje +relatorioLinhasHorarioController.lbDataIni.value = Fecha Inicial Viaje +relatorioLinhasHorarioController.lbDataFin.value = Fecha Final Viaje relatorioLinhasHorarioController.lbEmpresa.label = Empresa -relatorioLinhasHorarioController.lbGrupoRuta.label = Grupo de rutas +relatorioLinhasHorarioController.lbGrupoRuta.label = Grupo de Rutas relatorioLinhasHorarioController.lbLote.label = Lote -relatorioLinhasHorarioController.lbLinha.label = Linea -relatorioLinhasHorarioController.lbServico.label = Clase - - -relatorioLinhasHorarioController.lbNumRuta.label = Num. linea +relatorioLinhasHorarioController.lbLinha.label = Línea +relatorioLinhasHorarioController.lbServico.label = Servicio +relatorioLinhasHorarioController.window.title = Reporte de Líneas por Horario +relatorioLinhasHorarioSimplificadoController.window.title = Reporte de Líneas por Horario Simplificado +relatorioLinhasHorarioController.lbNumRuta.label = Núm. Línea relatorioLinhasHorarioController.lbPrefixo.label = Prefijo -relatorioLinhasHorarioController.lbOrgao.label = Instituición concedente +relatorioLinhasHorarioController.lbOrgao.label = Instituición Concedente relatorioLinhasHorarioController.lbDataCorrida.value = Fecha relatorioLinhasHorarioController.btnPesquisa.label = Buscar relatorioLinhasHorarioController.btnLimpar.label = Limpiar relatorioLinhasHorarioController.horaSaida.label = Hora -relatorioLinhasHorarioController.origem.destino.label = Origen x Destino -relatorioLinhasHorarioController.rutaId.label = Cod linea -relatorioLinhasHorarioController.rdTipoServico.label = Tipos de corridas +relatorioLinhasHorarioController.origem.destino.label = Origen x Destino +relatorioLinhasHorarioController.rutaId.label = Cod. Línea +relatorioLinhasHorarioController.rdTipoServico.label = Tipos de Servicios relatorioLinhasHorarioController.rdOrdinario.label = Ordinarios relatorioLinhasHorarioController.rdExtraOrdinario.label = Extraordinarios relatorioLinhasHorarioController.rdTodos.label = Todos +relatorioLinhasHorarioController.lblSimplificado.value = Generar Reporte Simple. +relatorioLinhasHorarioController.lblSimplificadoData.value = Generar Simple por fecha +relatorioLinhasHorarioController.lbHoraSaidaInicial.value = Hora Salida +relatorioLinhasHorarioController.lbHoraSaidaFinal.value = a +relatorioLinhasHorarioController.chKIda.value = Línea Ida +relatorioLinhasHorarioController.chKVolta.value = Línea Vuelta #Relatorio Tramo Vendido relatorioTrechoVendidoController.lbDataIni.value = Fecha inicial diff --git a/web/WEB-INF/i3-label_pt_BR.label b/web/WEB-INF/i3-label_pt_BR.label index 58f688ade..8db6dc047 100644 --- a/web/WEB-INF/i3-label_pt_BR.label +++ b/web/WEB-INF/i3-label_pt_BR.label @@ -699,6 +699,7 @@ relatorioLinhasHorarioController.rdOrdinario.label = Ordinários relatorioLinhasHorarioController.rdExtraOrdinario.label = Extraordinários relatorioLinhasHorarioController.rdTodos.label = Todos relatorioLinhasHorarioController.lblSimplificado.value = Emite relatório Simplificado +relatorioLinhasHorarioController.lblSimplificadoData.value = Emite Simplificado por Data relatorioLinhasHorarioController.lbHoraSaidaInicial.value = Hora Saída relatorioLinhasHorarioController.lbHoraSaidaFinal.value = à relatorioLinhasHorarioController.chKIda.value = Linha Ida diff --git a/web/gui/relatorios/filtroRelatorioLinhasHorario.zul b/web/gui/relatorios/filtroRelatorioLinhasHorario.zul index f10f8df10..7c8a6e474 100644 --- a/web/gui/relatorios/filtroRelatorioLinhasHorario.zul +++ b/web/gui/relatorios/filtroRelatorioLinhasHorario.zul @@ -7,7 +7,7 @@ @@ -250,11 +250,12 @@ - - + + + - + +