From 5367897d93df7011e21481a640088707da5a637a Mon Sep 17 00:00:00 2001 From: valdevir Date: Thu, 10 Dec 2020 13:12:45 +0000 Subject: [PATCH] fixes bug#19789 qua: dev:Valdir git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Web/trunk/ventaboletos@104663 d1611594-4594-4d17-8e1d-87c2c4800839 --- .../impl/RelatorioResumoLinhasAnalitico.java | 264 +++++++++++++++++- ...orioResumoLinhasAnaliticoSumarizado.jasper | Bin 104948 -> 105120 bytes 2 files changed, 257 insertions(+), 7 deletions(-) diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioResumoLinhasAnalitico.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioResumoLinhasAnalitico.java index a0cd08365..0267e9ba4 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioResumoLinhasAnalitico.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioResumoLinhasAnalitico.java @@ -4,32 +4,282 @@ package com.rjconsultores.ventaboletos.relatorios.impl; import java.sql.Connection; +import java.sql.ResultSet; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.List; import java.util.Map; +import org.apache.log4j.Logger; + +import com.rjconsultores.ventaboletos.relatorios.utilitarios.DataSource; import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.RelatorioResumoLinhasAnaliticoBean; +import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement; + +import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; /** * @author Bruno H. G. Gouvêa * */ public class RelatorioResumoLinhasAnalitico extends Relatorio { + private static Logger log = Logger.getLogger(RelatorioCaixaOrgaoConcedente.class); + private List lsDadosRelatorio; /** * @param parametros * @param conexao + * @throws Exception */ - public RelatorioResumoLinhasAnalitico(Map parametros, Connection conexao) { + public RelatorioResumoLinhasAnalitico(Map parametros, Connection conexao) throws Exception { super(parametros, conexao); - // TODO Auto-generated constructor stub + this.setCustomDataSource(new DataSource(this) { + + @Override + public void initDados() throws Exception { + try { + Connection conexao = this.relatorio.getConexao(); + + Map parametros = this.relatorio.getParametros(); + + + String fecInicio = null; + if (parametros.get("fecInicio") != null) { + fecInicio = parametros.get("fecInicio").toString() + " 00:00:00"; + } + String fecFinal = null; + if (parametros.get("fecFinal") != null) { + fecFinal = parametros.get("fecFinal").toString() + " 23:59:59"; + } + + String empresaId = parametros.get("EMPRESA_ID") != null ? parametros.get("EMPRESA_ID").toString() : ""; + String rutaId = parametros.get("RUTA_ID") != null ? parametros.get("RUTA_ID").toString() : ""; + String grupoRutaId = parametros.get("GRUPORUTA_ID") != null ? parametros.get("GRUPORUTA_ID").toString() : ""; + + String sql = getSql(); + + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss"); + NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql); + + + if (fecInicio != null) { + stmt.setTimestamp("fecInicio", new java.sql.Timestamp(sdf.parse(fecInicio).getTime())); + } + + if (fecFinal != null) { + stmt.setTimestamp("fecFinal", new java.sql.Timestamp(sdf.parse(fecFinal).getTime())); + } + + if (empresaId != null && !empresaId.equals("")) { + stmt.setInt("empresaId", Integer.parseInt(empresaId)); + } + + if (rutaId != null && !rutaId.equals("")) { + stmt.setInt("rutaId", Integer.parseInt(rutaId)); + } + + if (grupoRutaId != null && !grupoRutaId.equals("")) { + stmt.setInt("grupoRutaId", Integer.parseInt(grupoRutaId)); + } + + + + ResultSet rset = null; + + rset = stmt.executeQuery(); + + lsDadosRelatorio = new ArrayList(); + + while (rset.next()) { + RelatorioResumoLinhasAnaliticoBean bean = new RelatorioResumoLinhasAnaliticoBean(); + lsDadosRelatorio.add(bean); + bean.setIndSentidoIda(rset.getBoolean("INDSENTIDOIDA")); + bean.setRutaId(rset.getInt("RUTA_ID")); + bean.setNumRuta(rset.getInt("NUMRUTA")); + bean.setDescruta(rset.getString("DESCRUTA")); + bean.setTarifa(rset.getBigDecimal("TARIFA")); + bean.setAssentos(rset.getInt("ASSENTOS")); + bean.setRolOperativoId(rset.getInt("ROLOPERATIVO_ID")); + bean.setInterestadual(rset.getString("INTERESTADUAL")); + bean.setGrupoLinha(rset.getString("GRUPO_LINHA")); + bean.setExtensaoKm(rset.getBigDecimal("EXTENSAO_KM")); + bean.setCveClaseServicio(rset.getString("CVE_CLASE_SERVICIO")); + bean.setReceitaSeguro(rset.getBigDecimal("RECEITA_SEGURO")); + bean.setReceitaBagagem(rset.getBigDecimal("RECEITA_BAGAGEM")); + bean.setReceitaSeguroOutros(rset.getBigDecimal("RECEITA_SEGURO_OUTROS")); + bean.setReceitaTarifa(rset.getBigDecimal("RECEITA_TARIFA")); + bean.setReceitaPedagio(rset.getBigDecimal("RECEITA_PEDAGIO")); + bean.setReceitaEmbarque(rset.getBigDecimal("RECEITA_EMBARQUE")); + bean.setPassageiros(rset.getInt("PASSAGEIROS")); + bean.setViagensExtra(rset.getInt("VIAGENS_EXTRA")); + bean.setViagens(rset.getInt("VIAGENS")); + bean.setReceitaTotal(rset.getBigDecimal("RECEITA_TOTAL")); + bean.setViagensTotal(rset.getInt("VIAGENS_TOTAL")); + bean.setKmRodado(rset.getBigDecimal("KM_RODADO")); + bean.setPassageirosEquivalentes(rset.getBigDecimal("PASSAGEIROS_EQUIVALENTE")); + bean.setPassageirosMpa(rset.getBigDecimal("PASSAGEIROS_MPA")); + bean.setPassageirosMpe(rset.getBigDecimal("PASSAGEIROS_MPE")); + bean.setReceitaKm(rset.getBigDecimal("RECEITA_KM")); + bean.setReceitaViagem(rset.getBigDecimal("RECEITA_VIAGEM")); + bean.setPaxKm(rset.getBigDecimal("PAX_KM")); + bean.setPaxOfertado(rset.getBigDecimal("PAX_OFERTADO")); + bean.setIap(rset.getBigDecimal("IAP")); + lsDadosRelatorio.add(bean); + } + + log.info("TAMANHO == null ? " + lsDadosRelatorio == null); + + if (lsDadosRelatorio.size() > 0) { + log.info("TAMANHO DA LISTA: " + lsDadosRelatorio.size()); + setLsDadosRelatorio(lsDadosRelatorio); + } + + } catch (Exception e) { + log.error("Erro na geração do Relatório de Caixa Orgão Concedente: \n" + e); + e.printStackTrace(); + throw e; + } + } + }); + } + + public void setLsDadosRelatorio(List lsDadosRelatorio) { + log.info("Setando dados do relatorio Operacional Financeiro "); + this.setCollectionDataSource(new JRBeanCollectionDataSource(lsDadosRelatorio)); + this.lsDadosRelatorio = lsDadosRelatorio; + log.info("depois de Setar dados do relatorio Operacional Financeiro "); } - /* - * (non-Javadoc) - * - * @see com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio#processaParametros() - */ + @Override public void processaParametros() throws Exception { } + + private String getSql() { + StringBuilder sql = new StringBuilder(); + sql.append("SELECT SUB.*, "); + sql.append(" (NVL(SUB.PASSAGEIROS,0) / DECODE(NVL(SUB.VIAGENS_TOTAL,0), 0, 1, NVL(SUB.VIAGENS_TOTAL,0))) AS PASSAGEIROS_MPA, "); + sql.append(" ( ROUND(NVL(SUB.PASSAGEIROS_EQUIVALENTE,0), 2) / DECODE(NVL(SUB.VIAGENS_TOTAL,0), 0, 1, NVL(SUB.VIAGENS_TOTAL,0))) AS PASSAGEIROS_MPE, "); + sql.append(" (NVL(SUB.RECEITA_TOTAL,0) / DECODE(NVL(SUB.KM_RODADO,0), 0, 1, NVL(SUB.KM_RODADO,0))) RECEITA_KM, "); + sql.append(" (NVL(SUB.RECEITA_TOTAL,0) / DECODE(NVL(SUB.VIAGENS_TOTAL,0), 0, 1, NVL(SUB.VIAGENS_TOTAL,0))) AS RECEITA_VIAGEM, "); + sql.append(" ROUND(((NVL(SUB.RECEITA_TOTAL,0) / DECODE(NVL(SUB.VIAGENS_TOTAL,0), 0, 1, NVL(SUB.VIAGENS_TOTAL,0))) / DECODE(NVL(SUB.TARIFA,0), 0, 1, NVL(SUB.TARIFA,0))), 2) AS EQ, "); + sql.append(" (ROUND(NVL(SUB.PASSAGEIROS_EQUIVALENTE,0), 2) * NVL(SUB.EXTENSAO_KM,0)) AS PAX_KM, "); + sql.append(" (NVL(SUB.ASSENTOS,0) * NVL(SUB.KM_RODADO,0)) AS PAX_OFERTADO, "); + sql.append(" ((ROUND(NVL(SUB.PASSAGEIROS_EQUIVALENTE,0), 2) * NVL(SUB.EXTENSAO_KM,0)) / (NVL(SUB.ASSENTOS,0) * NVL(SUB.KM_RODADO,0))) * 100 AS IAP "); + sql.append(" "); + sql.append("FROM ( "); + sql.append(" "); + sql.append("SELECT TAB.INDSENTIDOIDA, TAB.RUTA_ID, TAB.NUMRUTA, TAB.DESCRUTA, TAB.TARIFA, TAB.ASSENTOS, TAB.ROLOPERATIVO_ID, "); + sql.append("TAB.INTERESTADUAL, TAB.GRUPO_LINHA, TAB.EXTENSAO_KM, TAB.CVE_CLASE_SERVICIO, "); + sql.append("SUM(NVL(TAB.RECEITA_SEGURO,0)) AS RECEITA_SEGURO, SUM(NVL(TAB.RECEITA_BAGAGEM,0)) AS RECEITA_BAGAGEM, "); + sql.append("SUM(NVL(TAB.RECEITA_SEGURO_OUTROS,0)) AS RECEITA_SEGURO_OUTROS, SUM(NVL(TAB.RECEITA_TARIFA,0)) AS RECEITA_TARIFA, "); + sql.append("SUM(NVL(TAB.RECEITA_PEDAGIO,0)) AS RECEITA_PEDAGIO, SUM(NVL(TAB.RECEITA_EMBARQUE,0)) AS RECEITA_EMBARQUE, SUM(NVL(TAB.PASSAGEIROS,0)) AS PASSAGEIROS, "); + sql.append("SUM(NVL(TAB.VIAGENS_EXTRA,0)) AS VIAGENS_EXTRA, SUM(NVL(TAB.VIAGENS,0)) AS VIAGENS, SUM(NVL(TAB.RECEITA_TOTAL,0)) AS RECEITA_TOTAL, "); + sql.append("SUM(NVL(TAB.VIAGENS_TOTAL,0)) AS VIAGENS_TOTAL, SUM(NVL(TAB.KM_RODADO,0)) AS KM_RODADO, SUM(NVL(TAB.PASSAGEIROS_EQUIVALENTE,0)) AS PASSAGEIROS_EQUIVALENTE "); + sql.append(" "); + sql.append("FROM (SELECT TAB1.*, "); + sql.append(" (TAB1.RECEITA_TARIFA + RECEITA_SEGURO + RECEITA_EMBARQUE + RECEITA_PEDAGIO) RECEITA_TOTAL, "); + sql.append(" (NVL(TAB1.VIAGENS,0) + NVL(TAB1.VIAGENS_EXTRA,0)) VIAGENS_TOTAL, "); + sql.append(" ((NVL(TAB1.VIAGENS,0) + NVL(TAB1.VIAGENS_EXTRA,0)) * NVL(TAB1.EXTENSAO_KM,0)) KM_RODADO, "); + sql.append(" (SELECT SUM(NVL(PE.EQUIVALENTE,0)) "); + sql.append(" FROM (SELECT CO.FECCORRIDA, CO.RUTA_ID, BO.PRECIOBASE, ROUND((BO.NUMKMVIAJE * COUNT(1) / "); + sql.append(" (SELECT SUM(NVL(TR.CANTKMREAL,0)) FROM RUTA_COMBINACION RS, TRAMO TR WHERE RS.RUTA_ID = CO.RUTA_ID AND RS.TRAMO_ID = TR.TRAMO_ID)), 2) EQUIVALENTE "); + sql.append(" FROM CORRIDA CO, BOLETO BO "); + sql.append(" WHERE CO.CORRIDA_ID = BO.CORRIDA_ID "); + sql.append(" AND CO.FECCORRIDA = BO.FECCORRIDA "); + sql.append(" AND BO.ACTIVO = 1 "); + sql.append(" AND (BO.MOTIVOCANCELACION_ID IS NULL OR BO.MOTIVOCANCELACION_ID = 0) "); + sql.append(" GROUP BY CO.FECCORRIDA, CO.RUTA_ID, BO.PRECIOBASE, BO.NUMKMVIAJE) PE "); + sql.append(" WHERE PE.FECCORRIDA = TAB1.FECCORRIDA AND PE.RUTA_ID = TAB1.RUTA_ID) PASSAGEIROS_EQUIVALENTE "); + sql.append(" FROM (SELECT RT.RUTA_ID, "); + sql.append(" RT.INDSENTIDOIDA, "); + sql.append(" RT.NUMRUTA, "); + sql.append(" CR.FECCORRIDA, "); + sql.append(" CONCAT(RT.DESCRUTA, CASE WHEN RT.INDSENTIDOIDA = 0 THEN ' - VOLTA' ELSE ' - IDA' END) DESCRUTA, "); + sql.append(" TF.PRECIO TARIFA, "); + sql.append(" DA.CANTASIENTOS ASSENTOS, "); + sql.append(" RO.ROLOPERATIVO_ID, "); + sql.append(" CASE WHEN CO.ESTADO_ID <> CD.ESTADO_ID THEN 'S' ELSE 'N' END INTERESTADUAL, "); + sql.append(" NVL(GR.DESCGRUPO, 'Não Definido') GRUPO_LINHA, "); + sql.append(" (SELECT SUM(NVL(RS.KMORIGINAL,0)) FROM RUTA_SECUENCIA RS, TRAMO TR WHERE RS.RUTA_ID = RT.RUTA_ID AND RS.TRAMO_ID = TR.TRAMO_ID AND RS.ACTIVO = 1) EXTENSAO_KM, "); + sql.append(" NVL(SUM(NVL(BL.IMPORTESEGURO,0)), 0) RECEITA_SEGURO, "); + sql.append(" 0 RECEITA_BAGAGEM, "); + sql.append(" 0 RECEITA_SEGURO_OUTROS, "); + sql.append(" SUM(NVL(BL.PRECIOPAGADO,0)) RECEITA_TARIFA, "); + sql.append(" SUM(NVL(BL.IMPORTEPEDAGIO,0)) RECEITA_PEDAGIO, "); + sql.append(" SUM(NVL(BL.IMPORTETAXAEMBARQUE,0)) RECEITA_EMBARQUE, "); + sql.append(" COUNT(1) PASSAGEIROS, "); + sql.append(" COUNT(DISTINCT CASE WHEN CR.TIPOSERVICIO_ID = 2 THEN CR.FECCORRIDA || CR.CORRIDA_ID ELSE NULL END) VIAGENS_EXTRA, "); + sql.append(" COUNT(DISTINCT CASE WHEN CR.TIPOSERVICIO_ID <> 2 THEN CR.FECCORRIDA || CR.CORRIDA_ID ELSE NULL END) VIAGENS, "); + sql.append(" NVL(CS.CVECLASE, ' ') CVE_CLASE_SERVICIO "); + sql.append(" FROM RUTA RT, "); + sql.append(" BOLETO BL, "); + sql.append(" CORRIDA CR, "); + sql.append(" TRAMO TR, "); + sql.append(" ROL_OPERATIVO RO, "); + sql.append(" DIAGRAMA_AUTOBUS DA, "); + sql.append(" TARIFA TF, "); + sql.append(" VIGENCIA_TARIFA VT, "); + sql.append(" GRUPO_RUTA GR, "); + sql.append(" PARADA PO, "); + sql.append(" PARADA PD, "); + sql.append(" CIUDAD CO, "); + sql.append(" CIUDAD CD, "); + sql.append(" CLASE_SERVICIO CS "); + sql.append(" WHERE RT.RUTA_ID = CR.RUTA_ID "); + sql.append(" AND CS.CLASESERVICIO_ID = RT.CLASESERVICIO_ID "); + sql.append(" AND CR.FECCORRIDA = BL.FECCORRIDA "); + sql.append(" AND CR.RUTA_ID = NVL(:rutaId, CR.RUTA_ID) "); + sql.append(" AND DECODE(:grupoRutaId, NULL, 1, RT.GRUPORUTA_ID) = DECODE(:grupoRutaId, NULL, 1, :grupoRutaId) "); + sql.append(" AND CR.CORRIDA_ID = BL.CORRIDA_ID "); + sql.append(" AND CR.EMPRESACORRIDA_ID = :empresaId "); + sql.append(" AND CR.ORIGEN_ID = PO.PARADA_ID "); + sql.append(" AND CR.DESTINO_ID = PD.PARADA_ID "); + sql.append(" AND PO.CIUDAD_ID = CO.CIUDAD_ID "); + sql.append(" AND PD.CIUDAD_ID = CD.CIUDAD_ID "); + sql.append(" AND RT.GRUPORUTA_ID = GR.GRUPORUTA_ID(+) "); + sql.append(" AND RO.ROLOPERATIVO_ID = CR.ROLOPERATIVO_ID "); + sql.append(" AND RO.DIAGRAMAAUTOBUS_ID = DA.DIAGRAMAAUTOBUS_ID "); + sql.append(" AND TF.CLASESERVICIO_ID = CR.CLASESERVICIO_ID "); + sql.append(" AND TR.ORIGEN_ID = CR.ORIGEN_ID "); + sql.append(" AND TR.DESTINO_ID = CR.DESTINO_ID "); + sql.append(" AND TF.MARCA_ID = CR.MARCA_ID "); + sql.append(" AND TF.RUTA_ID = CR.RUTA_ID "); + sql.append(" AND TF.TRAMO_ID = TR.TRAMO_ID "); + sql.append(" AND TF.STATUSTARIFA = 'A' "); + sql.append(" AND TF.ACTIVO = 1 "); + sql.append(" AND BL.MOTIVOCANCELACION_ID IS NULL "); + sql.append(" AND BL.INDSTATUSOPERACION = 'F' "); + sql.append(" AND TF.VIGENCIATARIFA_ID = VT.VIGENCIATARIFA_ID "); + sql.append(" AND VT.ACTIVO = 1 "); + sql.append(" AND CR.FECCORRIDA BETWEEN VT.FECINICIOVIGENCIA AND VT.FECFINVIGENCIA "); + sql.append(" AND CR.FECCORRIDA BETWEEN :dataInicial AND :dataFinal "); + sql.append(" AND CR.ACTIVO = 1 "); + sql.append(" GROUP BY CS.CVECLASE, "); + sql.append(" RT.RUTA_ID, "); + sql.append(" RT.NUMRUTA, "); + sql.append(" CR.FECCORRIDA, "); + sql.append(" RT.DESCRUTA, "); + sql.append(" TF.PRECIO, "); + sql.append(" DA.CANTASIENTOS, "); + sql.append(" RO.ROLOPERATIVO_ID, "); + sql.append(" GR.DESCGRUPO, "); + sql.append(" CO.ESTADO_ID, "); + sql.append(" CD.ESTADO_ID, "); + sql.append(" RT.INDSENTIDOIDA) TAB1) TAB "); + sql.append("GROUP BY TAB.RUTA_ID, TAB.NUMRUTA, TAB.DESCRUTA, TAB.TARIFA, TAB.ASSENTOS, TAB.ROLOPERATIVO_ID, "); + sql.append("TAB.INTERESTADUAL, TAB.GRUPO_LINHA, TAB.EXTENSAO_KM, TAB.CVE_CLASE_SERVICIO, TAB.INDSENTIDOIDA) SUB "); + sql.append("WHERE "); + sql.append(" (DECODE(NVL(SUB.VIAGENS_TOTAL,0), 0, 1, NVL(SUB.VIAGENS_TOTAL,0)) != 0) "); + sql.append(" AND DECODE(NVL(SUB.VIAGENS_TOTAL,0), 0, 1, NVL(SUB.VIAGENS_TOTAL,0)) != 0 "); + sql.append(" AND DECODE(NVL(SUB.KM_RODADO,0), 0, 1, NVL(SUB.KM_RODADO,0)) != 0 "); + sql.append(" AND DECODE(NVL(SUB.VIAGENS_TOTAL,0), 0, 1, NVL(SUB.VIAGENS_TOTAL,0)) != 0 "); + sql.append(" AND DECODE(NVL(SUB.VIAGENS_TOTAL,0), 0, 1, NVL(SUB.VIAGENS_TOTAL,0)) != 0 "); + sql.append(" AND DECODE(NVL(SUB.TARIFA,0), 0, 1, NVL(SUB.TARIFA,0)) != 0 "); + sql.append(" AND (NVL(SUB.ASSENTOS,0) * NVL(SUB.KM_RODADO,0)) != 0 "); + sql.append("ORDER BY SUB.DESCRUTA, SUB.INDSENTIDOIDA, SUB.ASSENTOS, SUB.TARIFA "); + return sql.toString(); + } } diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioResumoLinhasAnaliticoSumarizado.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioResumoLinhasAnaliticoSumarizado.jasper index ed472cbf4a311ec65fe2e3889afbf745be7ebcb4..b15a5357364b0c935f4c372b7e76c2714296539b 100644 GIT binary patch delta 28130 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 delta 26907 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