diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout.java index e43abb66e..95ab3b535 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout.java @@ -2,19 +2,15 @@ package com.rjconsultores.ventaboletos.relatorios.impl; import java.math.BigDecimal; import java.sql.Connection; -import java.sql.PreparedStatement; import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; +import java.text.SimpleDateFormat; import java.util.HashMap; import java.util.Iterator; -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.web.utilerias.NamedParameterStatement; public class RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout extends Relatorio { @@ -23,26 +19,34 @@ public class RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout extends this.setCustomDataSource(new ArrayDataSource(this) { + @SuppressWarnings("rawtypes") public void initDados() throws Exception { Connection conexao = this.relatorio.getConexao(); Map parametros = this.relatorio.getParametros(); - - String dataDe = (String) parametros.get("DATA_DE"); - - String dataAte = (String) parametros.get("DATA_ATE"); - + String dataDe = (String) parametros.get("DATA_DE"), dataAte = (String) parametros.get("DATA_ATE"), linhasIds = null; + Boolean isLinhas = false; + Integer empresaId = null; - String linhasIds = (String) parametros.get("LINHAS"); - String empresaId = (String) parametros.get("EMPRESA_IDS"); + if (parametros.get("LINHAS") != null) { + linhasIds = (String) parametros.get("LINHAS"); + isLinhas = true; + } + if (parametros.get("EMPRESA_IDS") != null) { + empresaId = Integer.parseInt((String) parametros.get("EMPRESA_IDS")); + } + String sql = getSql(isLinhas); - String sql = getSql(dataDe, dataAte, linhasIds, empresaId); - - PreparedStatement ps = conexao.prepareStatement(sql.toString()); + NamedParameterStatement ps = new NamedParameterStatement(conexao, sql.toString()); + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); + ps.setInt("empresa_id", empresaId); + if (isLinhas) { + ps.setString("linhas_id", linhasIds); + } + ps.setTimestamp("dataIni", new java.sql.Timestamp(sdf.parse(dataDe).getTime())); + ps.setTimestamp("dataFim", new java.sql.Timestamp(sdf.parse(dataAte).getTime())); ResultSet rset = ps.executeQuery(); - BigDecimal lugaresOfertados = BigDecimal.ZERO; - while (rset.next()) { boolean agrupar = false; Map dataResult = new HashMap(); @@ -54,23 +58,33 @@ public class RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout extends dataResult.put("totalida", rset.getLong("totalida")); dataResult.put("totalvolta", rset.getLong("totalvolta")); dataResult.put("totalReceita", rset.getBigDecimal("totalReceita")); - + dataResult.put("numRuta", rset.getString("numRuta")); + for (Iterator iterator = dados.iterator(); iterator.hasNext();) { + @SuppressWarnings("unchecked") Map map = (Map) iterator.next(); String origem = map.get("origem").toString(); String destino = map.get("destino").toString(); + String numRuta = map.get("numRuta").toString(); + Long ida = (Long) map.get("totalida"); Long volta = (Long) map.get("totalvolta"); - + BigDecimal total = (BigDecimal) map.get("totalReceita"); - if (origem.equals(rset.getString("destino")) && destino.equals(rset.getString("origem"))) { + if (origem.equals(rset.getString("destino")) + && destino.equals(rset.getString("origem")) + && numRuta.equals(rset.getString("numRuta"))) { agrupar = true; if (ida == 0) { map.put("totalida", rset.getLong("totalida")); + total = total.add(rset.getBigDecimal("totalReceita")); + map.put("totalReceita", total); } if (volta == 0) { map.put("totalvolta", rset.getLong("totalvolta")); + total = total.add(rset.getBigDecimal("totalReceita")); + map.put("totalReceita", total); } } @@ -85,88 +99,6 @@ public class RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout extends this.resultSet = rset; } - - private void ordenarTrechosSentidoIda(List> dados, String linhasIds) { - - List listOrigemDestino = this.buscarSequenciaOrigemDestinoIda(linhasIds); - - if (listOrigemDestino.isEmpty()){ - return; - } - - - List> dadosOrdenados = new ArrayList>(); - - - for(Map dado : dados){ - - Map dataResult = new HashMap(); - - String origemAtual = dado.get("origemId").toString(); - String destinoAtual = dado.get("destinoId").toString(); - - String trecho = origemAtual.concat("|").concat(destinoAtual); - - if (!listOrigemDestino.contains(trecho) ){ - origemAtual = dado.get("destino").toString(); - destinoAtual = dado.get("origem").toString(); - } - - dataResult.put("origem", origemAtual); - dataResult.put("destino", destinoAtual); - dataResult.put("km", dado.get("km")); - dataResult.put("totalida", dado.get("totalida")); - dataResult.put("totalvolta", dado.get("totalvolta")); - - dadosOrdenados.add(dataResult); - } - - dados.clear(); - dados.addAll(dadosOrdenados); - - - } - - private List buscarSequenciaOrigemDestinoIda(String linhasIds) { - StringBuilder query = new StringBuilder(); - query.append("SELECT "); - query.append("ori.parada_id || '|' || des.parada_id AS trecho "); - query.append("FROM "); - query.append("ruta r "); - query.append("JOIN RUTA_combinacion rc ON rc.ruta_id = r.ruta_id "); - query.append("JOIN RUTA_secuencia rs ON rs.ruta_id = r.ruta_id "); - query.append("INNER JOIN tramo tr ON tr.TRAMO_ID =rc.TRAMO_ID AND tr.ACTIVO = 1 "); - query.append("JOIN parada ori ON\tori.parada_id = tr.origen_id "); - query.append("JOIN parada des ON\tdes.parada_id = tr.destino_id "); - query.append(" "); - query.append("WHERE "); - query.append(" r.NUMRUTA = '").append(linhasIds).append("' "); - query.append("AND r.INDSENTIDOIDA =1 "); - query.append("AND rc.ACTIVO =1 and rs.ACTIVO =1"); - query.append("AND r.ACTIVO =1 "); - query.append("ORDER BY Rs.numsecuencia "); - - List listOrigemDestino = new ArrayList(); - - try { - - Connection conexao = this.relatorio.getConexao(); - PreparedStatement ps= conexao.prepareStatement(query.toString()); - - ResultSet rset = ps.executeQuery(); - - while (rset.next()) { - listOrigemDestino.add(rset.getString("trecho")); - } - - rset.close(); - ps.close(); - - } catch (SQLException e) { - throw new RuntimeException("Erro ao buscar sequencia da linha",e); - } - return listOrigemDestino; - } }); } @@ -174,15 +106,15 @@ public class RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout extends protected void processaParametros() throws Exception { } - private String getSql(String dataDe, String dataAte, String linhasIds, - String empresaId) { + private String getSql(Boolean linhasIds) { StringBuilder sql = new StringBuilder(); - sql.append(" SELECT DISTINCT "); + sql.append(" SELECT DISTINCT "); sql.append(" sum(b.preciopagado + b.importepedagio) as totalReceita, "); sql.append(" tar.precio as tarifa, "); sql.append(" e.nombempresa empresa, "); sql.append(" r.descruta linha, "); + sql.append(" r.NUMRUTA, "); sql.append(" ori.descparada AS origem, "); sql.append(" des.descparada AS destino, "); sql.append(" MAX(tr.CANTKMREAL) as km, "); @@ -209,7 +141,7 @@ public class RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout extends sql.append(" JOIN ruta r ON r.ruta_id = b.ruta_id "); sql.append(" JOIN RUTA_COMBINACION rc ON rc.ruta_id = r.ruta_id and rc.activo = 1 "); sql.append(" INNER JOIN tramo tr ON tr.TRAMO_ID =rc.TRAMO_ID AND tr.ORIGEN_ID = ori.PARADA_ID AND tr.DESTINO_ID = des.PARADA_ID AND tr.ACTIVO = 1 "); - sql.append(" JOIN clase_servicio cs ON (b.claseservicio_id = cs.claseservicio_id ) ") ; + sql.append(" JOIN clase_servicio cs ON (b.claseservicio_id = cs.claseservicio_id ) "); sql.append(" INNER JOIN vigencia_tarifa vt ON b.fechorventa BETWEEN vt.feciniciovigencia AND vt.fecfinvigencia AND vt.activo = 1 "); sql.append(" INNER JOIN tarifa tar ON (tar.ruta_id = b.ruta_id "); sql.append(" AND tar.marca_id = m.marca_id "); @@ -217,29 +149,28 @@ public class RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout extends sql.append(" AND tar.vigenciatarifa_id = vt.vigenciatarifa_id "); sql.append(" AND tar.origen_id = b.origen_id "); sql.append(" AND tar.destino_id = b.destino_id "); - sql.append("AND tar.activo = 1 ) "); - sql.append(" WHERE b.empresacorrida_id IN (").append(empresaId).append(") "); - + sql.append("AND tar.activo = 1 ) "); + sql.append(" WHERE b.empresacorrida_id IN :empresa_id "); + sql.append(" AND b.motivocancelacion_id is null "); - - if (!StringUtils.isBlank(linhasIds)) { - sql.append(" AND r.NUMRUTA = '").append(linhasIds).append("' "); + + if (linhasIds) { + sql.append(" AND r.NUMRUTA = :linhas_id "); } - - sql.append(" AND b.feccorrida BETWEEN To_date('").append(dataDe).append("', 'dd/mm/yyyy') "); - sql.append(" AND To_date('").append(dataAte).append("', 'dd/mm/yyyy') "); - - sql.append(" GROUP BY "); + + sql.append(" AND b.feccorrida BETWEEN :dataIni AND :dataFim "); + + sql.append(" GROUP BY "); sql.append(" tar.precio, "); sql.append(" e.nombempresa, "); - sql.append(" r.numruta, "); sql.append(" r.descruta, "); + sql.append(" r.numruta, "); sql.append(" ori.descparada, "); sql.append(" des.descparada, rc.rutacombinacion_id "); sql.append(" ORDER BY "); sql.append(" r.descruta, "); sql.append(" rc.rutacombinacion_id "); - + return sql.toString(); } }