diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAcompanhamentoEquivalentes.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAcompanhamentoEquivalentes.java index bd8237df2..3273fb3db 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAcompanhamentoEquivalentes.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAcompanhamentoEquivalentes.java @@ -15,6 +15,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.apache.commons.lang.StringUtils; + import com.rjconsultores.ventaboletos.relatorios.utilitarios.ArrayDataSource; import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; import com.rjconsultores.ventaboletos.relatorios.utilitarios.RelatorioAcompanhamentoEquivalenteBean; @@ -71,6 +73,8 @@ public class RelatorioAcompanhamentoEquivalentes extends Relatorio { Connection conexao = this.relatorio.getConexao(); Map parametros = this.relatorio.getParametros(); String sql = getSql(); + + System.out.println(sql); NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql); @@ -89,6 +93,13 @@ public class RelatorioAcompanhamentoEquivalentes extends Relatorio { this.resultSet = stmt.executeQuery(); } + private boolean verificaTipoServicoExtra(String tipoServico) { + if (StringUtils.equalsIgnoreCase(tipoServico, "Extra")) { + return true; + } + return false; + } + @Override public void initDados() throws Exception { @@ -98,9 +109,14 @@ public class RelatorioAcompanhamentoEquivalentes extends Relatorio { while (this.resultSet.next()) { + Integer indicador = (Integer) this.relatorio.getParametros().get("INDICADOR"); 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"); + + String horario = this.resultSet.getString("HORARIO"); + boolean isServicoExtra = verificaTipoServicoExtra(this.resultSet.getString("TIPO_SERVICO")); Map row = new HashMap(); BigDecimal totalMes = BigDecimal.ZERO; @@ -110,7 +126,7 @@ public class RelatorioAcompanhamentoEquivalentes extends Relatorio { cal.setTime(dataInicial); cal.set(Calendar.DATE, 1); - List ls = getValorByIndicador(corridaId, rolOperativoId, (Integer) this.relatorio.getParametros().get("INDICADOR"), assentos, dataInicial); + List ls = 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++) { @@ -153,42 +169,43 @@ public class RelatorioAcompanhamentoEquivalentes extends Relatorio { } protected List getValorByIndicador(Integer corridaId, - Integer rolOperativoId, Integer indicador, Integer assentos, Date dataInicial) throws SQLException { + Integer rolOperativoId, Integer indicador, Integer assentos, Date dataInicial, + Integer rutaId, String horario, boolean isServicoExtra) throws SQLException { String sql = null; switch (IndicadorRelatorio.fromInt(indicador)) { case MPE: - sql = getSqlIndicadorEquivalentes(); + sql = getSqlIndicadorEquivalentes(isServicoExtra); break; case ABSOLUTO: - sql = getSqlIndicadorAbsoluto(); + sql = getSqlIndicadorAbsoluto(isServicoExtra); break; case EQ: - sql = getSqlIndicadorEq(); + sql = getSqlIndicadorEq(isServicoExtra); break; case IAP: - sql = getSqlIndicadorIap(); + sql = getSqlIndicadorIap(isServicoExtra); break; case PAXKM: - sql = getSqlIndicadorPax(); + sql = getSqlIndicadorPax(isServicoExtra); break; case RECEITA_KM: - sql = getSqlIndicadorReceitaKm(); + sql = getSqlIndicadorReceitaKm(isServicoExtra); break; case RECEITA_VIAGEM: - sql = getSqlIndicadorReceitaViagem(); + sql = getSqlIndicadorReceitaViagem(isServicoExtra); break; } - return getListaValoresIndicadores(corridaId, rolOperativoId, indicador, assentos, sql, dataInicial); + return getListaValoresIndicadores(corridaId, rolOperativoId, indicador, assentos, sql, dataInicial, rutaId, horario); } }); } protected List getListaValoresIndicadores(Integer corridaId, Integer rolOperativoId, - Integer indicador, Integer assentos, String sql, Date dataInicial) throws SQLException { + Integer indicador, Integer assentos, String sql, Date dataInicial, Integer rutaId, String horario) throws SQLException { List lsEquivalente = new ArrayList(); try { @@ -200,6 +217,8 @@ public class RelatorioAcompanhamentoEquivalentes extends Relatorio { stmt.setInt("CORRIDA_ID", corridaId); stmt.setDate("DATA_MES", new java.sql.Date(dataInicial.getTime())); stmt.setInt("ROLOPERATIVO_ID", rolOperativoId); + stmt.setInt("RUTA_ID", rutaId); + stmt.setString("HORARIO", horario); if (IndicadorRelatorio.fromInt(indicador).equals(IndicadorRelatorio.IAP)) { stmt.setInt("CAPACIDADE", assentos); @@ -236,7 +255,7 @@ public class RelatorioAcompanhamentoEquivalentes extends Relatorio { return null; } - protected String getSqlIndicadorEq() { + protected String getSqlIndicadorEq(boolean isServicoExtra) { StringBuilder sql = new StringBuilder(); sql.append("SELECT "); @@ -258,6 +277,9 @@ public class RelatorioAcompanhamentoEquivalentes extends Relatorio { sql.append(" WHERE "); sql.append(" CR.CORRIDA_ID = :CORRIDA_ID "); sql.append(" AND TO_CHAR(CR.FECCORRIDA, 'MMYYYY') = TO_CHAR(:DATA_MES, 'MMYYYY') "); + sql.append(" AND TO_CHAR(CR.FECHORSALIDAORIGINAL, 'HH24:MI') = TO_CHAR(TO_DATE(:HORARIO, 'HH24:MI'), 'HH24:MI') "); + sql.append(isServicoExtra ? " AND CR.TIPOSERVICIO_ID = 2 " : " AND CR.TIPOSERVICIO_ID <> 2 "); + sql.append(" AND CR.RUTA_ID = :RUTA_ID "); sql.append(" AND CR.ROLOPERATIVO_ID = :ROLOPERATIVO_ID "); sql.append(" AND TF.CLASESERVICIO_ID = CR.CLASESERVICIO_ID "); sql.append(" AND TF.MARCA_ID = CR.MARCA_ID "); @@ -293,7 +315,7 @@ public class RelatorioAcompanhamentoEquivalentes extends Relatorio { return sql.toString(); } - protected String getSqlIndicadorPax() { + protected String getSqlIndicadorPax(boolean isServicoExtra ) { StringBuilder sql = new StringBuilder(); sql.append("SELECT "); @@ -306,6 +328,9 @@ public class RelatorioAcompanhamentoEquivalentes extends Relatorio { sql.append("WHERE "); sql.append(" CR.CORRIDA_ID = :CORRIDA_ID "); sql.append("AND TO_CHAR(CR.FECCORRIDA, 'MMYYYY') = TO_CHAR(:DATA_MES, 'MMYYYY') "); + sql.append("AND TO_CHAR(CR.FECHORSALIDAORIGINAL, 'HH24:MI') = TO_CHAR(TO_DATE(:HORARIO, 'HH24:MI'), 'HH24:MI') "); + sql.append(isServicoExtra ? "AND CR.TIPOSERVICIO_ID = 2 " : " AND CR.TIPOSERVICIO_ID <> 2 "); + sql.append("AND CR.RUTA_ID = :RUTA_ID "); sql.append("AND CR.ROLOPERATIVO_ID = :ROLOPERATIVO_ID "); sql.append("AND BO.ACTIVO = 1 "); sql.append("AND BO.INDSTATUSOPERACION = 'F' "); @@ -318,7 +343,7 @@ public class RelatorioAcompanhamentoEquivalentes extends Relatorio { } - protected String getSqlIndicadorIap() { + protected String getSqlIndicadorIap(boolean isServicoExtra) { StringBuilder sql = new StringBuilder(); sql.append("SELECT "); @@ -352,6 +377,9 @@ public class RelatorioAcompanhamentoEquivalentes extends Relatorio { sql.append(" AND C.CORRIDA_ID = BO.CORRIDA_ID "); sql.append(" AND C.FECCORRIDA = BO.FECCORRIDA "); sql.append(" AND C.ROLOPERATIVO_ID = :ROLOPERATIVO_ID "); + sql.append(" AND TO_CHAR(C.FECHORSALIDAORIGINAL, 'HH24:MI') = TO_CHAR(TO_DATE(:HORARIO, 'HH24:MI'), 'HH24:MI') "); + sql.append(isServicoExtra ? " AND C.TIPOSERVICIO_ID = 2 " : " AND C.TIPOSERVICIO_ID <> 2 "); + sql.append(" AND C.RUTA_ID = :RUTA_ID "); sql.append(" AND BO.ACTIVO = 1 "); sql.append(" AND C.ACTIVO = 1 "); sql.append(" AND (BO.MOTIVOCANCELACION_ID IS NULL OR BO.MOTIVOCANCELACION_ID = 0 ) "); @@ -364,7 +392,7 @@ public class RelatorioAcompanhamentoEquivalentes extends Relatorio { } - protected String getSqlIndicadorReceitaKm() { + protected String getSqlIndicadorReceitaKm(boolean isServicoExtra) { StringBuilder sql = new StringBuilder(); sql.append("SELECT (SUB_REC.RECEITA/SUB_REC.KM) AS VALOR, "); @@ -378,7 +406,6 @@ public class RelatorioAcompanhamentoEquivalentes extends Relatorio { sql.append(" CR.FECCORRIDA "); sql.append(" FROM BOLETO BO "); sql.append(" INNER JOIN CORRIDA CR ON CR.CORRIDA_ID = BO.CORRIDA_ID AND CR.FECCORRIDA = BO.FECCORRIDA "); - sql.append(" INNER JOIN (SELECT SUM(TR1.CANTKMREAL) KM, CR.CORRIDA_ID, CR.FECCORRIDA "); sql.append(" FROM CORRIDA CR "); sql.append(" INNER JOIN RUTA_COMBINACION RS ON RS.RUTA_ID = CR.RUTA_ID "); @@ -387,11 +414,17 @@ public class RelatorioAcompanhamentoEquivalentes extends Relatorio { sql.append(" WHERE CR.ACTIVO = 1 AND RS.ACTIVO = 1 AND TR1.ACTIVO = 1 "); sql.append(" AND CR.CORRIDA_ID = :CORRIDA_ID "); sql.append(" AND TO_CHAR(CR.FECCORRIDA, 'MMYYYY') = TO_CHAR(:DATA_MES, 'MMYYYY') "); + sql.append(" AND TO_CHAR(CR.FECHORSALIDAORIGINAL, 'HH24:MI') = TO_CHAR(TO_DATE(:HORARIO, 'HH24:MI'), 'HH24:MI') "); + sql.append(isServicoExtra ? " AND CR.TIPOSERVICIO_ID = 2 " : " AND CR.TIPOSERVICIO_ID <> 2 "); + sql.append(" AND CR.RUTA_ID = :RUTA_ID "); sql.append(" AND CR.ROLOPERATIVO_ID = :ROLOPERATIVO_ID "); sql.append(" GROUP BY CR.CORRIDA_ID, CR.FECCORRIDA "); sql.append(" )SUB_KM ON SUB_KM.CORRIDA_ID = CR.CORRIDA_ID AND SUB_KM.FECCORRIDA = CR.FECCORRIDA "); sql.append(" WHERE BO.CORRIDA_ID = :CORRIDA_ID "); sql.append(" AND TO_CHAR(BO.FECCORRIDA, 'MMYYYY') = TO_CHAR(:DATA_MES, 'MMYYYY') "); + sql.append(" AND TO_CHAR(CR.FECHORSALIDAORIGINAL, 'HH24:MI') = TO_CHAR(TO_DATE(:HORARIO, 'HH24:MI'), 'HH24:MI') "); + sql.append(isServicoExtra ? " AND CR.TIPOSERVICIO_ID = 2 " : " AND CR.TIPOSERVICIO_ID <> 2 "); + sql.append(" AND CR.RUTA_ID = :RUTA_ID "); sql.append(" AND CR.ROLOPERATIVO_ID = :ROLOPERATIVO_ID "); sql.append(" AND BO.ACTIVO = 1 "); sql.append(" AND BO.INDSTATUSOPERACION = 'F' "); @@ -404,7 +437,7 @@ public class RelatorioAcompanhamentoEquivalentes extends Relatorio { return sql.toString(); } - protected String getSqlIndicadorReceitaViagem() { + protected String getSqlIndicadorReceitaViagem(boolean isServicoExtra) { StringBuilder sql = new StringBuilder(); sql.append("SELECT "); @@ -416,6 +449,9 @@ public class RelatorioAcompanhamentoEquivalentes extends Relatorio { sql.append("WHERE "); sql.append(" BO.CORRIDA_ID = :CORRIDA_ID "); sql.append("AND TO_CHAR(BO.FECCORRIDA, 'MMYYYY') = TO_CHAR(:DATA_MES, 'MMYYYY') "); + sql.append("AND TO_CHAR(CR.FECHORSALIDAORIGINAL, 'HH24:MI') = TO_CHAR(TO_DATE(:HORARIO, 'HH24:MI'), 'HH24:MI') "); + sql.append(isServicoExtra ? "AND CR.TIPOSERVICIO_ID = 2 " : " AND CR.TIPOSERVICIO_ID <> 2 "); + sql.append("AND CR.RUTA_ID = :RUTA_ID "); sql.append("AND CR.ROLOPERATIVO_ID = :ROLOPERATIVO_ID "); sql.append("AND BO.ACTIVO = 1 "); sql.append("AND BO.INDSTATUSOPERACION = 'F' "); @@ -426,7 +462,7 @@ public class RelatorioAcompanhamentoEquivalentes extends Relatorio { return sql.toString(); } - protected String getSqlIndicadorEquivalentes() { + protected String getSqlIndicadorEquivalentes(boolean isServicoExtra) { /* O calculo do MPE não leva em consideração a quantidade de viagens conforme formula, uma vez que o detalhemtno do relatório já é por viagem */ StringBuilder sql = new StringBuilder(); @@ -461,6 +497,9 @@ public class RelatorioAcompanhamentoEquivalentes extends Relatorio { sql.append(" WHERE CT1.CORRIDA_ID = :CORRIDA_ID "); sql.append(" AND TO_CHAR(CT1.FECCORRIDA, 'MMYYYY') = TO_CHAR(:DATA_MES, 'MMYYYY') "); sql.append(" AND CR.ROLOPERATIVO_ID = :ROLOPERATIVO_ID "); + sql.append(" AND TO_CHAR(CR.FECHORSALIDAORIGINAL, 'HH24:MI') = TO_CHAR(TO_DATE(:HORARIO, 'HH24:MI'), 'HH24:MI') "); + sql.append(isServicoExtra ? "AND CR.TIPOSERVICIO_ID = 2 " : " AND CR.TIPOSERVICIO_ID <> 2 "); + sql.append(" AND CR.RUTA_ID = :RUTA_ID "); sql.append(" GROUP BY "); sql.append(" CT1.CORRIDA_ID, "); sql.append(" CT1.FECCORRIDA, CR.ROLOPERATIVO_ID) EL "); @@ -468,6 +507,9 @@ public class RelatorioAcompanhamentoEquivalentes extends Relatorio { sql.append(" WHERE CR.CORRIDA_ID = :CORRIDA_ID "); sql.append(" AND TO_CHAR(CR.FECCORRIDA, 'MMYYYY') = TO_CHAR(:DATA_MES, 'MMYYYY') "); sql.append(" AND CR.ROLOPERATIVO_ID = :ROLOPERATIVO_ID "); + sql.append(" AND TO_CHAR(CR.FECHORSALIDAORIGINAL, 'HH24:MI') = TO_CHAR(TO_DATE(:HORARIO, 'HH24:MI'), 'HH24:MI') "); + sql.append(isServicoExtra ? "AND CR.TIPOSERVICIO_ID = 2 " : " AND CR.TIPOSERVICIO_ID <> 2 "); + sql.append(" AND CR.RUTA_ID = :RUTA_ID "); sql.append("AND BO.ACTIVO = 1 "); sql.append("AND BO.INDSTATUSOPERACION = 'F' "); sql.append("AND BO.MOTIVOCANCELACION_ID IS NULL "); @@ -483,7 +525,7 @@ public class RelatorioAcompanhamentoEquivalentes extends Relatorio { } - protected String getSqlIndicadorAbsoluto() { + protected String getSqlIndicadorAbsoluto(boolean isServicoExtra) { StringBuilder sql = new StringBuilder(); sql.append("SELECT "); @@ -495,6 +537,9 @@ public class RelatorioAcompanhamentoEquivalentes extends Relatorio { sql.append("WHERE "); sql.append(" BO.CORRIDA_ID = :CORRIDA_ID "); sql.append("AND TO_CHAR(BO.FECCORRIDA, 'MMYYYY') = TO_CHAR(:DATA_MES, 'MMYYYY') "); + sql.append("AND TO_CHAR(CR.FECHORSALIDAORIGINAL, 'HH24:MI') = TO_CHAR(TO_DATE(:HORARIO, 'HH24:MI'), 'HH24:MI') "); + sql.append(isServicoExtra ? "AND CR.TIPOSERVICIO_ID = 2 " : " AND CR.TIPOSERVICIO_ID <> 2 "); + sql.append("AND CR.RUTA_ID = :RUTA_ID "); sql.append("AND CR.ROLOPERATIVO_ID = :ROLOPERATIVO_ID "); sql.append("AND BO.ACTIVO = 1 "); sql.append("AND BO.INDSTATUSOPERACION = 'F' ");