diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAcompanhamentoEquivalentes.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAcompanhamentoEquivalentes.java index b1478c55e..25ca8a357 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAcompanhamentoEquivalentes.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAcompanhamentoEquivalentes.java @@ -74,12 +74,14 @@ public class RelatorioAcompanhamentoEquivalentes extends Relatorio { this.prepareQuery(); + Map> mapa = getMapaCorridaIdListaRoloperativoId(); + Date dataInicial = (Date) this.relatorio.getParametros().get("DATA_MES"); while (this.resultSet.next()) { Integer indicador = (Integer) this.relatorio.getParametros().get("INDICADOR"); - Integer rolOperativoId = this.resultSet.getInt("ROLOPERATIVO_ID"); + // Integer rolOperativoId = this.resultSet.getInt("ROLOPERATIVO_ID"); Integer corridaId = this.resultSet.getInt("CORRIDA_ID"); Integer assentos = this.resultSet.getInt("ASSENTOS"); Integer rutaId = this.resultSet.getInt("RUTA_ID"); @@ -95,7 +97,17 @@ public class RelatorioAcompanhamentoEquivalentes extends Relatorio { cal.setTime(dataInicial); cal.set(Calendar.DATE, 1); - List ls = getValorByIndicador(corridaId, rolOperativoId, indicador, assentos, dataInicial, rutaId, horario, isServicoExtra); + List ls = new ArrayList(); + List listaRoloperativoId = mapa.get(corridaId); + + // Mantis 15983 + // A query principal do relatório possuía a coluna ROLOPERATIVO_ID assim duplicando os serviços quando existiam mais de um ROLOPERATIVO_ID por CORRIDA_ID. + // Assim foi retirado a coluna ROLOPERATIVO_ID da query principal mas foi feito antes um mapa com a relação CORRIDA_ID x ROLOPERATIVO_ID(s) + if (listaRoloperativoId != null) { + for (Integer rolOperativoId : listaRoloperativoId) { + ls.addAll(getValorByIndicador(corridaId, rolOperativoId, indicador, assentos, dataInicial, rutaId, horario, isServicoExtra)); + } + } // Roda todos os dias do mes for (int dia = 1; dia <= cal.getActualMaximum(Calendar.DATE); dia++) { @@ -143,7 +155,7 @@ public class RelatorioAcompanhamentoEquivalentes extends Relatorio { Connection conexao = this.relatorio.getConexao(); Map parametros = this.relatorio.getParametros(); - String sql = getSql(); + String sql = getSql(false); NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql); @@ -217,6 +229,46 @@ public class RelatorioAcompanhamentoEquivalentes extends Relatorio { return getListaValoresIndicadores(corridaId, rolOperativoId, indicador, assentos, sql, dataInicial, rutaId, horario); } + protected Map> getMapaCorridaIdListaRoloperativoId() throws SQLException { + Connection conexao = this.relatorio.getConexao(); + String sql = getSql(true); + NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql); + + Map parametros = this.relatorio.getParametros(); + + if (parametros.get("EMPRESA_ID") != null) { + stmt.setInt("EMPRESA_ID", (Integer) parametros.get("EMPRESA_ID")); + } else { + stmt.setNull("EMPRESA_ID", java.sql.Types.INTEGER); + } + + if (parametros.get("TIPOSERVICIO_ID") != null) { + stmt.setInt("TIPOSERVICIO_ID", (Integer) parametros.get("TIPOSERVICIO_ID")); + } else { + stmt.setNull("TIPOSERVICIO_ID", java.sql.Types.INTEGER); + } + + stmt.setDate("DATA_MES", new java.sql.Date(((Date) parametros.get("DATA_MES")).getTime())); + + Map> mapa = new HashMap>(); + ResultSet rs = stmt.executeQuery(); + + while (rs.next()) { + Integer corridaId = rs.getInt("CORRIDA_ID"); + Integer rolOperativoId = rs.getInt("ROLOPERATIVO_ID"); + List lista = mapa.get(corridaId); + + if (lista == null) { + lista = new ArrayList(); + } + + lista.add(rolOperativoId); + + mapa.put(corridaId, lista); + } + + return mapa; + } }); } @@ -574,7 +626,7 @@ public class RelatorioAcompanhamentoEquivalentes extends Relatorio { public void processaParametros() throws Exception { } - private String getSql() { + private String getSql(boolean addRoloperativo_id) { StringBuilder sql = new StringBuilder(); @@ -584,7 +636,11 @@ public class RelatorioAcompanhamentoEquivalentes extends Relatorio { sql.append(" DA.CANTASIENTOS ASSENTOS, "); sql.append(" PO.CVEPARADA||' - '||PD.CVEPARADA SIGLA, "); sql.append(" TO_CHAR(CR.FECHORSALIDAORIGINAL, 'HH24:MI') HORARIO, "); - sql.append(" CR.ROLOPERATIVO_ID, "); + + if (addRoloperativo_id) { + sql.append(" CR.ROLOPERATIVO_ID, "); + } + sql.append(" CASE "); sql.append(" WHEN CO.ESTADO_ID <> CD.ESTADO_ID THEN "); sql.append(" 'S' ");