From e2f9f9313222fc3415c666f8861f7a09979e845a Mon Sep 17 00:00:00 2001 From: celio Date: Sat, 18 Feb 2023 12:04:38 -0300 Subject: [PATCH] fixes bug#AL-2128 --- pom.xml | 2 +- .../impl/RelatorioLinhasHorario.java | 225 +++++++----------- .../RelatorioLinhasHorarioSimplificado.java | 219 ++++++++--------- ...LinhasHorarioSimplificado_pt_BR.properties | 1 + .../RelatorioLinhasHorarioSimplificado.jasper | Bin 87973 -> 89130 bytes .../RelatorioLinhasHorarioSimplificado.jrxml | 40 +++- .../RelatorioLinhasHorarioBean.java | 9 + .../RelatorioLinhasHorarioController.java | 31 ++- web/WEB-INF/i3-label_en.label | 55 ++--- web/WEB-INF/i3-label_es_MX.label | 31 ++- web/WEB-INF/i3-label_pt_BR.label | 2 +- .../filtroRelatorioLinhasHorario.zul | 11 +- 12 files changed, 316 insertions(+), 310 deletions(-) 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..9eca65793 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..cc225a0d7 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 fca3f372bc32c046795055d5ac61ad54e5ae06ba..e9801533f94b31bde0d04e141ff54bf0fab0281c 100644 GIT binary patch literal 89130 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 OwSD*Y8UDRvUH=I>-I*5v literal 87973 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 OA-P|2iu-=7-v0ze=u49T 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..9cdf12b21 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 Líneas 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 = Organismo 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..c948240e5 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 @@ -1386,7 +1387,6 @@ editarFormaPagoController.lblLogpay.label=Logpay editarFormaPagoController.lblTPI.label=TPI editarFormaPagoController.lblMobiPix.label=MobiPix editarFormaPagoController.lblAdyen.label=Adyen -editarFormaPagoController.lblMercadoPago.label=Mercado Pago editarFormaPagoController.lblAtivaProcessoEstorno.label=Ativa processo de estorno editarFormaPagoController.lblVoucherRodoviaria.label=Voucher Rodoviária editarFormaPagoController.lblTransferenciaReativacao.label=Utiliza na Transferência / Reativação 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 @@ - - + + + - + +