diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAproveitamento.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAproveitamento.java index 31ba8cc57..0c7383de8 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAproveitamento.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAproveitamento.java @@ -4,8 +4,8 @@ package com.rjconsultores.ventaboletos.relatorios.impl; import java.math.BigDecimal; +import java.math.RoundingMode; import java.sql.Connection; -import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; @@ -14,6 +14,7 @@ import java.util.Map; import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.AproveitamentoBean; import com.rjconsultores.ventaboletos.relatorios.utilitarios.DataSource; import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; import com.rjconsultores.ventaboletos.relatorios.utilitarios.RelatorioAproveitamentoBean; @@ -36,32 +37,83 @@ public class RelatorioAproveitamento extends Relatorio { public void initDados() throws Exception { Connection conexao = this.relatorio.getConexao(); - Map parametros = this.relatorio.getParametros(); - String sql = getSql(); + List aproveitamentoList = new ArrayList(); - PreparedStatement stmt = null; - ResultSet rset = null; - stmt = conexao.prepareStatement(sql); + NamedParameterStatement stmt = new NamedParameterStatement(conexao, getSql()); + stmt.setInt("CORRIDA_ID", Integer.valueOf((String) parametros.get("CORRIDA_ID"))); + stmt.setDate("FECCORRIDA", (java.sql.Date) parametros.get("FECCORRIDA")); - stmt.setInt(1, Integer.valueOf((String) parametros.get("CORRIDA_ID"))); - stmt.setDate(2, (java.sql.Date) parametros.get("FECCORRIDA")); - rset = stmt.executeQuery(); + ResultSet rset = stmt.executeQuery(); + while (rset.next()) { - if (rset.next()) { + AproveitamentoBean ab = new AproveitamentoBean(); + ab.setTrechoArrecadado((BigDecimal) rset.getObject("TOTAL_ARRECADADO")); + ab.setTotalAsientos((BigDecimal) rset.getObject("TOTAL_ASIENTOS")); + ab.setOrigenId((BigDecimal) rset.getObject("ORIGEN_ID") == null ? null : ((BigDecimal) rset.getObject("ORIGEN_ID")).intValue()); + ab.setDestinoId((BigDecimal) rset.getObject("DESTINO_ID") == null ? null : ((BigDecimal) rset.getObject("DESTINO_ID")).intValue()); + ab.setKmNominal((BigDecimal) rset.getObject("KM_NOMINAL")); + ab.setTotalOcupados((String) rset.getObject("TOTAL_OCUPADOS") == null ? null : new BigDecimal((String) rset.getObject("TOTAL_OCUPADOS"))); + ab.setKmCorrida((BigDecimal) rset.getObject("KM_CORRIDA")); + ab.setTarifa((BigDecimal) rset.getObject("TARIFA")); - Locale locale = new Locale("pt", "BR"); + BigDecimal gratuido = (BigDecimal) rset.getObject("GRATUITO") == null ? null : ((BigDecimal) rset.getObject("GRATUITO")); + ab.setGratuito(gratuido == BigDecimal.ZERO ? false : true); + BigDecimal vendidos = (BigDecimal) rset.getObject("VENDIDOS") == null ? null : ((BigDecimal) rset.getObject("VENDIDOS")); + ab.setVendidos(vendidos == BigDecimal.ZERO ? false : true); - parametros.put("P_NOMINAL_KM", CurrencyUtil.getCurrencyStrFromStr(rset.getString("NOMINAL_KM"), locale)); - parametros.put("P_TOTAL_ARRECADADO", CurrencyUtil.getCurrencyStrFromStr(rset.getString("TOTAL_ARRECADADO"), locale)); - parametros.put("P_ARRECADO_KM", CurrencyUtil.getCurrencyStrFromStr(rset.getString("ARRECADADO_KM"), locale)); - parametros.put("P_OCUPACAO", CurrencyUtil.getPercentStrFromStr(rset.getString("OCUPACAO"), locale)); - parametros.put("P_OCUPACAO_ARRECADACAO", CurrencyUtil.getPercentStrFromStr(rset.getString("OCUPACAO_ARRECADACAO"), locale)); - parametros.put("P_TOTAL_NOMINAL", CurrencyUtil.getCurrencyStrFromStr(rset.getString("TOTAL_NOMINAL"), locale)); - parametros.put("P_OCUPACAO_S_ARRECADACAO", CurrencyUtil.getPercentStrFromStr(rset.getString("OCUPACAO_S_ARRECADACAO"), locale)); + aproveitamentoList.add(ab); } + BigDecimal totalArrecadado = BigDecimal.ZERO; + BigDecimal totalNominal = BigDecimal.ZERO; + BigDecimal kmCorrida = BigDecimal.ZERO; + BigDecimal totalOcupados = BigDecimal.ZERO; + + BigDecimal ocupacao = BigDecimal.ONE; + BigDecimal ocupacaoArrecadacao = BigDecimal.ONE; + BigDecimal ocupacaoSemArrecadacao = BigDecimal.ONE; + BigDecimal tarifa = BigDecimal.ONE; + + for (AproveitamentoBean ab : aproveitamentoList) { + + totalOcupados = ab.getTotalOcupados(); + kmCorrida = ab.getKmCorrida(); + tarifa = ab.getTarifa(); + + totalArrecadado = totalArrecadado.add(ab.getTrechoArrecadado()); + ocupacao = ocupacao.add(ab.getTotalAsientos().multiply(ab.getKmNominal())); + + if (ab.getGratuito()) { + ocupacaoSemArrecadacao = ocupacaoSemArrecadacao.add(ab.getTotalAsientos().multiply(ab.getKmNominal())); + } else { + ocupacaoArrecadacao = ocupacaoArrecadacao.add(ab.getTotalAsientos().multiply(ab.getKmNominal())); + } + } + + totalNominal = tarifa.multiply(totalOcupados); + + BigDecimal arrecadadoKm = BigDecimal.ONE; + arrecadadoKm = totalArrecadado.divide(kmCorrida, 4, RoundingMode.HALF_EVEN); + BigDecimal nominalKmFinal = BigDecimal.ONE; + nominalKmFinal = totalNominal.divide(kmCorrida, 4, RoundingMode.HALF_EVEN); + + ocupacao = ocupacao.divide(totalOcupados.multiply(kmCorrida), 4, RoundingMode.HALF_EVEN); + ocupacaoSemArrecadacao = ocupacaoSemArrecadacao.divide(totalOcupados.multiply(kmCorrida), 4, RoundingMode.HALF_EVEN); + ocupacaoArrecadacao = ocupacaoArrecadacao.divide(totalOcupados.multiply(kmCorrida), 4, RoundingMode.HALF_EVEN); + + Locale locale = new Locale("pt", "BR"); + parametros.put("P_TOTAL_ARRECADADO", CurrencyUtil.getCurrencyBigDecimalFromStr(totalArrecadado, locale)); + parametros.put("P_TOTAL_NOMINAL", CurrencyUtil.getCurrencyBigDecimalFromStr(totalNominal, locale)); + + parametros.put("P_ARRECADO_KM", CurrencyUtil.getCurrencyBigDecimalFromStr(arrecadadoKm, locale)); + parametros.put("P_NOMINAL_KM", CurrencyUtil.getCurrencyBigDecimalFromStr(nominalKmFinal, locale)); + + parametros.put("P_OCUPACAO", CurrencyUtil.getPercentBigDecimalFromStr(ocupacao, locale)); + parametros.put("P_OCUPACAO_ARRECADACAO", CurrencyUtil.getPercentBigDecimalFromStr(ocupacaoArrecadacao, locale)); + parametros.put("P_OCUPACAO_S_ARRECADACAO", CurrencyUtil.getPercentBigDecimalFromStr(ocupacaoSemArrecadacao, locale)); + NamedParameterStatement nps = new NamedParameterStatement(conexao, getSqlDetail()); nps.setInt("CORRIDA_ID", Integer.valueOf((String) parametros.get("CORRIDA_ID"))); @@ -200,210 +252,156 @@ public class RelatorioAproveitamento extends Relatorio { private String getSql() { StringBuilder sql = new StringBuilder(); - - sql.append(" SELECT round(NVL(TAB.TOTAL_ARRECADADO, 0), 2) TOTAL_ARRECADADO, "); - sql.append(" round(NVL(TAB.TOTAL_ARRECADADO / TAB.KM_NOMINAL, 0), 2) ARRECADADO_KM, "); - sql.append(" round(NVL(TAB.TOTAL_NOMINAL, 0), 2) TOTAL_NOMINAL, "); - sql.append(" NVL(round(TAB.TOTAL_NOMINAL / TAB.KM_NOMINAL, 2), 0) NOMINAL_KM, "); - sql.append(" ((TAB.TOTAL_OCUPADOS + TAB.TOTAL_OCUPADOS_OPERACAO) / (CASE TAB.TOTAL_ACENTOS WHEN 0 THEN 1 ELSE TAB.TOTAL_ACENTOS END) ) OCUPACAO, "); - sql.append(" ((TAB.TOTAL_OCUPADOS - TAB.TOTAL_OCUPADOS_GRATUIDADE) / (CASE TAB.TOTAL_ACENTOS WHEN 0 THEN 1 ELSE TAB.TOTAL_ACENTOS END) ) OCUPACAO_ARRECADACAO, "); - sql.append(" ((TAB.TOTAL_OCUPADOS_GRATUIDADE + TAB.TOTAL_OCUPADOS_OPERACAO) / (CASE TAB.TOTAL_ACENTOS WHEN 0 THEN 1 ELSE TAB.TOTAL_ACENTOS END) ) OCUPACAO_S_ARRECADACAO "); - sql.append(" FROM (SELECT (SELECT SUM(BO.PRECIOPAGADO) "); - sql.append(" FROM BOLETO BO "); - sql.append(" WHERE BO.CORRIDA_ID = CR.CORRIDA_ID "); - sql.append(" AND BO.FECCORRIDA = CR.FECCORRIDA "); - sql.append(" AND BO.ACTIVO = 1 "); - sql.append(" AND BO.INDSTATUSOPERACION = 'F' "); - sql.append(" AND (BO.MOTIVOCANCELACION_ID IS NULL OR "); - sql.append(" BO.MOTIVOCANCELACION_ID = 0)) TOTAL_ARRECADADO, "); - sql.append(" "); - sql.append(" (SELECT SUM(TR.CANTKMREAL) "); - sql.append(" FROM CORRIDA_TRAMO CT, "); - sql.append(" TRAMO TR, "); - sql.append(" ROL_OPERATIVO RO, "); - sql.append(" DIAGRAMA_AUTOBUS DA "); - sql.append(" WHERE CT.CORRIDA_ID = CR.CORRIDA_ID "); - sql.append(" AND CT.FECCORRIDA = CR.FECCORRIDA "); - sql.append(" AND RO.ROLOPERATIVO_ID = CR.ROLOPERATIVO_ID "); - sql.append(" AND DA.DIAGRAMAAUTOBUS_ID = RO.DIAGRAMAAUTOBUS_ID "); - sql.append(" AND TR.TRAMO_ID = CT.TRAMO_ID "); - sql.append(" AND TR.ACTIVO = 1 "); - sql.append(" AND CT.ACTIVO = 1) KM_NOMINAL, "); - sql.append(" "); - sql.append(" (SELECT SUM((SELECT TR.CANTKMREAL "); - sql.append(" FROM BOLETO BO, "); - sql.append(" CORRIDA_TRAMO CTD, "); - sql.append(" CORRIDA_TRAMO CTO "); - sql.append(" WHERE BO.CORRIDA_ID = CR.CORRIDA_ID "); - sql.append(" AND BO.FECCORRIDA = CR.FECCORRIDA "); - sql.append(" AND BO.NUMASIENTO = DD.ASIENTO "); - sql.append(" AND BO.ORIGEN_ID = CTO.ORIGEN_ID "); - sql.append(" AND BO.DESTINO_ID = CTD.DESTINO_ID "); - sql.append(" AND CTD.CORRIDA_ID = CR.CORRIDA_ID "); - sql.append(" AND CTD.FECCORRIDA = CR.FECCORRIDA "); - sql.append(" AND CTO.CORRIDA_ID = CR.CORRIDA_ID "); - sql.append(" AND CTO.FECCORRIDA = CR.FECCORRIDA "); - sql.append(" AND CTO.ACTIVO = 1 "); - sql.append(" AND CTD.ACTIVO = 1 "); - sql.append(" AND CT.NUMSECUENCIA BETWEEN CTO.NUMSECUENCIA AND "); - sql.append(" CTD.NUMSECUENCIA "); - sql.append(" AND BO.ACTIVO = 1 "); - sql.append(" AND BO.INDSTATUSOPERACION = 'F' "); - sql.append(" AND (BO.MOTIVOCANCELACION_ID IS NULL OR "); - sql.append(" BO.MOTIVOCANCELACION_ID = 0))) "); - sql.append(" FROM CORRIDA_TRAMO CT, "); - sql.append(" TRAMO TR, "); - sql.append(" ROL_OPERATIVO RO, "); - sql.append(" DET_DIAGRAMA_AUTOBUS DD "); - sql.append(" WHERE CR.FECCORRIDA = CT.FECCORRIDA "); - sql.append(" AND CR.CORRIDA_ID = CT.CORRIDA_ID "); - sql.append(" AND CT.TRAMO_ID = TR.TRAMO_ID "); - sql.append(" AND CR.ROLOPERATIVO_ID = RO.ROLOPERATIVO_ID "); - sql.append(" AND RO.DIAGRAMAAUTOBUS_ID = DD.DIAGRAMAAUTOBUS_ID "); - sql.append(" AND DD.VENDIBLE = 1 "); - sql.append(" AND CT.ACTIVO = 1) KM_OCUPADA, "); - sql.append(" "); - sql.append(" (SELECT SUM(TF.PRECIO) "); - sql.append(" FROM TRAMO TR, "); - sql.append(" ROL_OPERATIVO RO, "); - sql.append(" DET_DIAGRAMA_AUTOBUS DD, "); - sql.append(" TARIFA TF, "); - sql.append(" VIGENCIA_TARIFA VT "); - sql.append(" WHERE RO.ROLOPERATIVO_ID = CR.ROLOPERATIVO_ID "); - sql.append(" AND RO.DIAGRAMAAUTOBUS_ID = DD.DIAGRAMAAUTOBUS_ID "); - sql.append(" AND TF.CLASESERVICIO_ID = CR.CLASESERVICIO_ID "); - sql.append(" AND DD.VENDIBLE = 1 "); - sql.append(" AND DD.ACTIVO = 1 "); - 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 TF.VIGENCIATARIFA_ID = VT.VIGENCIATARIFA_ID "); - sql.append(" AND VT.ACTIVO = 1 "); - sql.append(" AND CR.FECCORRIDA BETWEEN VT.FECINICIOVIGENCIA AND "); - sql.append(" VT.FECFINVIGENCIA) TOTAL_NOMINAL, "); - sql.append(" "); - sql.append(" (SELECT COUNT(1) "); - sql.append(" FROM CORRIDA_TRAMO CT, "); - sql.append(" TRAMO TR, "); - sql.append(" ROL_OPERATIVO RO, "); - sql.append(" DET_DIAGRAMA_AUTOBUS DD "); - sql.append(" WHERE "); - sql.append(" "); - sql.append(" CR.FECCORRIDA = CT.FECCORRIDA "); - sql.append(" AND CR.CORRIDA_ID = CT.CORRIDA_ID "); - sql.append(" AND CT.TRAMO_ID = TR.TRAMO_ID "); - sql.append(" AND CR.ROLOPERATIVO_ID = RO.ROLOPERATIVO_ID "); - sql.append(" AND RO.DIAGRAMAAUTOBUS_ID = DD.DIAGRAMAAUTOBUS_ID "); - sql.append(" AND DD.VENDIBLE = 1 "); - sql.append(" AND DD.ACTIVO = 1 "); - sql.append(" AND CT.ACTIVO = 1) TOTAL_ACENTOS, "); - sql.append(" "); - sql.append(" (SELECT COUNT((SELECT 1 "); - sql.append(" FROM BOLETO BO, "); - sql.append(" CORRIDA_TRAMO CTD, "); - sql.append(" CORRIDA_TRAMO CTO "); - sql.append(" WHERE BO.CORRIDA_ID = CR.CORRIDA_ID "); - sql.append(" AND BO.FECCORRIDA = CR.FECCORRIDA "); - sql.append(" AND BO.NUMASIENTO = DD.ASIENTO "); - sql.append(" AND BO.ORIGEN_ID = CTO.ORIGEN_ID "); - sql.append(" AND BO.DESTINO_ID = CTD.DESTINO_ID "); - sql.append(" AND CTD.CORRIDA_ID = CR.CORRIDA_ID "); - sql.append(" AND CTD.FECCORRIDA = CR.FECCORRIDA "); - sql.append(" AND CTO.CORRIDA_ID = CR.CORRIDA_ID "); - sql.append(" AND CTO.FECCORRIDA = CR.FECCORRIDA "); - sql.append(" AND CTO.ACTIVO = 1 "); - sql.append(" AND CTD.ACTIVO = 1 "); - sql.append(" AND CT.NUMSECUENCIA BETWEEN CTO.NUMSECUENCIA AND "); - sql.append(" CTD.NUMSECUENCIA "); - sql.append(" AND BO.ACTIVO = 1 "); - sql.append(" AND BO.INDSTATUSOPERACION = 'F' "); - sql.append(" AND (BO.MOTIVOCANCELACION_ID IS NULL OR "); - sql.append(" BO.MOTIVOCANCELACION_ID = 0))) "); - sql.append(" FROM CORRIDA_TRAMO CT, "); - sql.append(" TRAMO TR, "); - sql.append(" ROL_OPERATIVO RO, "); - sql.append(" DET_DIAGRAMA_AUTOBUS DD "); - sql.append(" WHERE CR.FECCORRIDA = CT.FECCORRIDA "); - sql.append(" AND CR.CORRIDA_ID = CT.CORRIDA_ID "); - sql.append(" AND CT.TRAMO_ID = TR.TRAMO_ID "); - sql.append(" AND CR.ROLOPERATIVO_ID = RO.ROLOPERATIVO_ID "); - sql.append(" AND RO.DIAGRAMAAUTOBUS_ID = DD.DIAGRAMAAUTOBUS_ID "); - sql.append(" AND DD.VENDIBLE = 1 "); - sql.append(" AND DD.ACTIVO = 1 "); - sql.append(" AND CT.ACTIVO = 1) TOTAL_OCUPADOS, "); - sql.append(" (SELECT COUNT((SELECT 1 "); - sql.append(" FROM BOLETO BO, "); - sql.append(" CORRIDA_TRAMO CTD, "); - sql.append(" CORRIDA_TRAMO CTO "); - sql.append(" WHERE BO.CORRIDA_ID = CR.CORRIDA_ID "); - sql.append(" AND BO.FECCORRIDA = CR.FECCORRIDA "); - sql.append(" AND BO.NUMASIENTO = DD.ASIENTO "); - sql.append(" AND BO.ORIGEN_ID = CTO.ORIGEN_ID "); - sql.append(" AND BO.DESTINO_ID = CTD.DESTINO_ID "); - sql.append(" AND CTD.CORRIDA_ID = CR.CORRIDA_ID "); - sql.append(" AND CTD.FECCORRIDA = CR.FECCORRIDA "); - sql.append(" AND CTO.CORRIDA_ID = CR.CORRIDA_ID "); - sql.append(" AND CTO.FECCORRIDA = CR.FECCORRIDA "); - sql.append(" AND BO.PRECIOBASE = 0 "); - sql.append(" AND CTO.ACTIVO = 1 "); - sql.append(" AND CTD.ACTIVO = 1 "); - sql.append(" AND CT.NUMSECUENCIA BETWEEN CTO.NUMSECUENCIA AND "); - sql.append(" CTD.NUMSECUENCIA "); - sql.append(" AND BO.ACTIVO = 1 "); - sql.append(" AND BO.INDSTATUSOPERACION = 'F' "); - sql.append(" AND (BO.MOTIVOCANCELACION_ID IS NULL OR "); - sql.append(" BO.MOTIVOCANCELACION_ID = 0))) "); - sql.append(" FROM CORRIDA_TRAMO CT, "); - sql.append(" TRAMO TR, "); - sql.append(" ROL_OPERATIVO RO, "); - sql.append(" DET_DIAGRAMA_AUTOBUS DD "); - sql.append(" WHERE CR.FECCORRIDA = CT.FECCORRIDA "); - sql.append(" AND CR.CORRIDA_ID = CT.CORRIDA_ID "); - sql.append(" AND CT.TRAMO_ID = TR.TRAMO_ID "); - sql.append(" AND CR.ROLOPERATIVO_ID = RO.ROLOPERATIVO_ID "); - sql.append(" AND RO.DIAGRAMAAUTOBUS_ID = DD.DIAGRAMAAUTOBUS_ID "); - sql.append(" AND DD.VENDIBLE = 1 "); - sql.append(" AND DD.ACTIVO = 1 "); - sql.append(" AND CT.ACTIVO = 1) TOTAL_OCUPADOS_GRATUIDADE, "); - sql.append(" "); - sql.append(" (SELECT COUNT((SELECT 1 "); - sql.append(" FROM ASIENTO_EXCLUSIVO AE, "); - sql.append(" CORRIDA_TRAMO CTD, "); - sql.append(" CORRIDA_TRAMO CTO "); - sql.append(" WHERE AE.CORRIDA_ID = CR.CORRIDA_ID "); - sql.append(" AND AE.FECCORRIDA = CR.FECCORRIDA "); - sql.append(" AND AE.NUMASIENTO = DD.ASIENTO "); - sql.append(" AND AE.PARADA_ID = CTO.ORIGEN_ID "); - sql.append(" AND NVL(AE.DESTINO_ID, CR.DESTINO_ID) = "); - sql.append(" CTD.DESTINO_ID "); - sql.append(" AND CTD.CORRIDA_ID = CR.CORRIDA_ID "); - sql.append(" AND CTD.FECCORRIDA = CR.FECCORRIDA "); - sql.append(" AND CTO.CORRIDA_ID = CR.CORRIDA_ID "); - sql.append(" AND CTO.FECCORRIDA = CR.FECCORRIDA "); - sql.append(" AND CTO.ACTIVO = 1 "); - sql.append(" AND CTD.ACTIVO = 1 "); - sql.append(" AND CT.NUMSECUENCIA BETWEEN CTO.NUMSECUENCIA AND "); - sql.append(" CTD.NUMSECUENCIA "); - sql.append(" AND AE.ACTIVO = 1)) "); - sql.append(" FROM CORRIDA_TRAMO CT, "); - sql.append(" TRAMO TR, "); - sql.append(" ROL_OPERATIVO RO, "); - sql.append(" DET_DIAGRAMA_AUTOBUS DD "); - sql.append(" WHERE CR.FECCORRIDA = CT.FECCORRIDA "); - sql.append(" AND CR.CORRIDA_ID = CT.CORRIDA_ID "); - sql.append(" AND CT.TRAMO_ID = TR.TRAMO_ID "); - sql.append(" AND CR.ROLOPERATIVO_ID = RO.ROLOPERATIVO_ID "); - sql.append(" AND RO.DIAGRAMAAUTOBUS_ID = DD.DIAGRAMAAUTOBUS_ID "); - sql.append(" AND DD.VENDIBLE = 1 "); - sql.append(" AND DD.ACTIVO = 1 "); - sql.append(" AND CT.ACTIVO = 1) TOTAL_OCUPADOS_OPERACAO "); - sql.append(" FROM CORRIDA CR "); - sql.append(" WHERE CR.CORRIDA_ID = ? "); - sql.append(" AND CR.FECCORRIDA = ? ) TAB "); + sql.append("SELECT "); + sql.append(" SUM(TRECHOS_VG.PRECIOPAGADO) AS TOTAL_ARRECADADO, "); + sql.append(" COUNT(TRECHOS_VG.BOLETO_ID) AS TOTAL_ASIENTOS, "); + sql.append(" TRECHOS_VG.ORIGEN_ID AS ORIGEN_ID, "); + sql.append(" TRECHOS_VG.DESTINO_ID AS DESTINO_ID, "); + sql.append(" TRECHOS_VG.GRATUITO AS GRATUITO, "); + sql.append(" TRECHOS_VG.VENDIDOS AS VENDIDOS, "); + sql.append(" TRECHOS_VG.CANTKMREAL AS KM_NOMINAL, "); + sql.append(" TRECHOS_VG.DESCROLOPERATIVO AS TOTAL_OCUPADOS, "); + sql.append(" TRECHOS_VG.KM_CORRIDA AS KM_CORRIDA, "); + sql.append(" TRECHOS_VG.TARIFA AS TARIFA "); + sql.append("FROM "); + sql.append(" ( "); + sql.append(" SELECT "); + sql.append(" BO.PRECIOPAGADO, "); + sql.append(" BO.BOLETO_ID AS BOLETO_ID, "); + sql.append(" BO.ORIGEN_ID AS ORIGEN_ID, "); + sql.append(" BO.DESTINO_ID AS DESTINO_ID, "); + sql.append(" CASE "); + sql.append(" WHEN BO.PRECIOBASE = 0 "); + sql.append(" THEN 1 "); + sql.append(" ELSE 0 "); + sql.append(" END AS GRATUITO, "); + sql.append(" CASE "); + sql.append(" WHEN BO.PRECIOBASE > 0 "); + sql.append(" THEN 1 "); + sql.append(" ELSE 0 "); + sql.append(" END AS VENDIDOS, "); + sql.append(" TR.CANTKMREAL, "); + sql.append(" RO.DESCROLOPERATIVO, "); + sql.append(" ( "); + sql.append(" SELECT "); + sql.append(" SUM(CANTKMREAL) "); + sql.append(" FROM "); + sql.append(" CORRIDA_TRAMO BO "); + sql.append(" INNER JOIN "); + sql.append(" TRAMO T "); + sql.append(" ON "); + sql.append(" T.TRAMO_ID = BO.TRAMO_ID "); + sql.append(" WHERE "); + sql.append(" BO.CORRIDA_ID = :CORRIDA_ID "); + sql.append(" AND BO.FECCORRIDA = :FECCORRIDA "); + sql.append(" AND BO.ACTIVO = 1) AS KM_CORRIDA, "); + sql.append(" ( "); + sql.append(" SELECT "); + sql.append(" TF.PRECIO "); + sql.append(" FROM "); + sql.append(" CORRIDA CR "); + sql.append(" INNER JOIN "); + sql.append(" TRAMO TR "); + sql.append(" ON "); + sql.append(" TR.ORIGEN_ID = CR.ORIGEN_ID "); + sql.append(" AND TR.DESTINO_ID = CR.DESTINO_ID "); + sql.append(" INNER JOIN "); + sql.append(" TARIFA TF "); + sql.append(" ON "); + sql.append(" TF.CLASESERVICIO_ID = CR.CLASESERVICIO_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(" INNER JOIN "); + sql.append(" VIGENCIA_TARIFA VT "); + sql.append(" ON "); + sql.append(" TF.VIGENCIATARIFA_ID = VT.VIGENCIATARIFA_ID "); + sql.append(" WHERE "); + sql.append(" CR.CORRIDA_ID = :CORRIDA_ID "); + sql.append(" AND CR.FECCORRIDA = :FECCORRIDA "); + sql.append(" AND TF.STATUSTARIFA = 'A' "); + sql.append(" AND TF.ACTIVO = 1 "); + sql.append(" AND VT.ACTIVO = 1 "); + sql.append(" AND CR.FECCORRIDA BETWEEN VT.FECINICIOVIGENCIA AND VT.FECFINVIGENCIA) AS TARIFA "); + sql.append(" FROM "); + sql.append(" BOLETO BO "); + sql.append(" INNER JOIN "); + sql.append(" CORRIDA CR "); + sql.append(" ON "); + sql.append(" BO.CORRIDA_ID = CR.CORRIDA_ID "); + sql.append(" AND BO.FECCORRIDA = CR.FECCORRIDA "); + sql.append(" INNER JOIN "); + sql.append(" CORRIDA_TRAMO CT "); + sql.append(" ON "); + sql.append(" BO.ORIGEN_ID = CT.ORIGEN_ID "); + sql.append(" AND BO.DESTINO_ID = CT.DESTINO_ID "); + sql.append(" INNER JOIN "); + sql.append(" TRAMO TR "); + sql.append(" ON "); + sql.append(" TR.TRAMO_ID = CT.TRAMO_ID "); + sql.append(" INNER JOIN "); + sql.append(" TARIFA TF "); + sql.append(" ON "); + sql.append(" TF.CLASESERVICIO_ID = CR.CLASESERVICIO_ID "); + sql.append(" AND TF.MARCA_ID = CR.MARCA_ID "); + sql.append(" AND TF.RUTA_ID = CR.RUTA_ID "); + sql.append(" INNER JOIN "); + sql.append(" VIGENCIA_TARIFA VT "); + sql.append(" ON "); + sql.append(" TF.VIGENCIATARIFA_ID = VT.VIGENCIATARIFA_ID "); + sql.append(" INNER JOIN "); + sql.append(" ROL_OPERATIVO RO "); + sql.append(" ON "); + sql.append(" RO.ROLOPERATIVO_ID = CR.ROLOPERATIVO_ID, "); + sql.append(" DET_DIAGRAMA_AUTOBUS DD "); + sql.append(" WHERE "); + sql.append(" BO.CORRIDA_ID = :CORRIDA_ID "); + sql.append(" AND BO.FECCORRIDA = :FECCORRIDA "); + sql.append(" AND CR.ACTIVO = 1 "); + sql.append(" AND CT.ACTIVO = 1 "); + sql.append(" AND BO.ACTIVO = 1 "); + sql.append(" AND BO.INDSTATUSOPERACION = 'F' "); + sql.append(" AND BO.MOTIVOCANCELACION_ID IS NULL "); + sql.append(" AND TF.TRAMO_ID = TR.TRAMO_ID "); + sql.append(" AND TF.STATUSTARIFA = 'A' "); + sql.append(" AND TF.ACTIVO = 1 "); + sql.append(" AND VT.ACTIVO = 1 "); + sql.append(" AND CR.FECCORRIDA BETWEEN VT.FECINICIOVIGENCIA AND VT.FECFINVIGENCIA "); + sql.append(" AND RO.DIAGRAMAAUTOBUS_ID = DD.DIAGRAMAAUTOBUS_ID "); + sql.append(" AND DD.VENDIBLE = 1 "); + sql.append(" AND DD.ACTIVO = 1 "); + sql.append(" GROUP BY "); + sql.append(" BO.BOLETO_ID, "); + sql.append(" BO.ORIGEN_ID, "); + sql.append(" BO.DESTINO_ID, "); + sql.append(" ( "); + sql.append(" CASE "); + sql.append(" WHEN BO.PRECIOBASE = 0 "); + sql.append(" THEN 1 "); + sql.append(" ELSE 0 "); + sql.append(" END), "); + sql.append(" ( "); + sql.append(" CASE "); + sql.append(" WHEN BO.PRECIOBASE > 0 "); + sql.append(" THEN 1 "); + sql.append(" ELSE 0 "); + sql.append(" END), "); + sql.append(" TR.CANTKMREAL, "); + sql.append(" BO.PRECIOPAGADO, "); + sql.append(" TF.PRECIO, "); + sql.append(" RO.DESCROLOPERATIVO "); + sql.append(" ORDER BY "); + sql.append(" BO.ORIGEN_ID, "); + sql.append(" BO.DESTINO_ID ) TRECHOS_VG "); + sql.append("GROUP BY "); + sql.append(" TRECHOS_VG.ORIGEN_ID, "); + sql.append(" TRECHOS_VG.DESTINO_ID, "); + sql.append(" TRECHOS_VG.GRATUITO, "); + sql.append(" TRECHOS_VG.VENDIDOS, "); + sql.append(" TRECHOS_VG.CANTKMREAL, "); + sql.append(" TRECHOS_VG.DESCROLOPERATIVO, "); + sql.append(" TRECHOS_VG.KM_CORRIDA, "); + sql.append(" TRECHOS_VG.TARIFA"); return sql.toString(); } diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamento.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamento.jasper index da359b823..214e3b634 100644 Binary files a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamento.jasper and b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamento.jasper differ diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamento.jrxml b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamento.jrxml index cebfabbd1..d882edfdf 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamento.jrxml +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamento.jrxml @@ -340,7 +340,11 @@ - + diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/AproveitamentoBean.java b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/AproveitamentoBean.java new file mode 100644 index 000000000..251666aa9 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/AproveitamentoBean.java @@ -0,0 +1,98 @@ +package com.rjconsultores.ventaboletos.relatorios.utilitarios; + +import java.math.BigDecimal; + +public class AproveitamentoBean { + + private BigDecimal trechoArrecadado; + private BigDecimal totalAsientos; + private Integer origenId; + private Integer destinoId; + private Boolean gratuito; + private Boolean vendidos; + private BigDecimal kmNominal; + private BigDecimal kmCorrida; + private BigDecimal totalOcupados; + private BigDecimal tarifa; + + public BigDecimal getTotalAsientos() { + return totalAsientos; + } + + public void setTotalAsientos(BigDecimal totalAsientos) { + this.totalAsientos = totalAsientos; + } + + public Integer getOrigenId() { + return origenId; + } + + public void setOrigenId(Integer origenId) { + this.origenId = origenId; + } + + public Integer getDestinoId() { + return destinoId; + } + + public void setDestinoId(Integer destinoId) { + this.destinoId = destinoId; + } + + public Boolean getGratuito() { + return gratuito; + } + + public void setGratuito(Boolean gratuito) { + this.gratuito = gratuito; + } + + public Boolean getVendidos() { + return vendidos; + } + + public void setVendidos(Boolean vendidos) { + this.vendidos = vendidos; + } + + public BigDecimal getKmNominal() { + return kmNominal; + } + + public void setKmNominal(BigDecimal kmNominal) { + this.kmNominal = kmNominal; + } + + public BigDecimal getTotalOcupados() { + return totalOcupados; + } + + public void setTotalOcupados(BigDecimal totalOcupados) { + this.totalOcupados = totalOcupados; + } + + public BigDecimal getTrechoArrecadado() { + return trechoArrecadado; + } + + public void setTrechoArrecadado(BigDecimal trechoArrecadado) { + this.trechoArrecadado = trechoArrecadado; + } + + public BigDecimal getKmCorrida() { + return kmCorrida; + } + + public void setKmCorrida(BigDecimal kmCorrida) { + this.kmCorrida = kmCorrida; + } + + public BigDecimal getTarifa() { + return tarifa; + } + + public void setTarifa(BigDecimal tarifa) { + this.tarifa = tarifa; + } + +} diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioResumoLinhasController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioResumoLinhasController.java index 4cc4d493a..c409fd89e 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioResumoLinhasController.java +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioResumoLinhasController.java @@ -41,6 +41,8 @@ import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer; @Scope("prototype") public class RelatorioResumoLinhasController extends MyGenericForwardComposer { + private static final long serialVersionUID = 1L; + @Autowired private DataSource dataSourceRead; @Autowired @@ -69,6 +71,7 @@ public class RelatorioResumoLinhasController extends MyGenericForwardComposer { * @throws Exception * */ + @SuppressWarnings({ "rawtypes", "unchecked" }) private void executarRelatorio() throws Exception { Relatorio relatorio; @@ -86,12 +89,11 @@ public class RelatorioResumoLinhasController extends MyGenericForwardComposer { if (itemRuta != null) { Ruta ruta = (Ruta) itemRuta.getValue(); parametros.put("RUTA_ID", ruta.getRutaId()); - filtro.append(ruta.getDescruta()+";"); + filtro.append(ruta.getDescruta() + ";"); } else filtro.append("Todas;"); - - + Comboitem itemGrupoRuta = cmbGrupoRuta.getSelectedItem(); filtro.append("Grupo de Linha: "); @@ -102,7 +104,6 @@ public class RelatorioResumoLinhasController extends MyGenericForwardComposer { } else filtro.append("Todos;"); - Comboitem itemEmpresa = cmbEmpresa.getSelectedItem(); if (itemEmpresa != null) { @@ -110,7 +111,7 @@ public class RelatorioResumoLinhasController extends MyGenericForwardComposer { parametros.put("EMPRESA_ID", empresa.getEmpresaId()); parametros.put("EMPRESA", empresa.getNombempresa()); } - + parametros.put("FILTROS", filtro.toString()); if (rd1.isChecked()) diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/CurrencyUtil.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/CurrencyUtil.java index 7b2762fe6..92fa7668b 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/utilerias/CurrencyUtil.java +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/CurrencyUtil.java @@ -3,6 +3,7 @@ */ package com.rjconsultores.ventaboletos.web.utilerias; +import java.math.BigDecimal; import java.text.NumberFormat; import java.util.Locale; @@ -13,19 +14,25 @@ import java.util.Locale; public final class CurrencyUtil { public static String getCurrencyStrFromStr(String value, Locale locale) { - - NumberFormat moedaFormat = - NumberFormat.getCurrencyInstance(locale); + NumberFormat moedaFormat = NumberFormat.getCurrencyInstance(locale); return moedaFormat.format(Double.parseDouble(value)); - } - - public static String getPercentStrFromStr(String value, Locale locale) { + public static String getCurrencyBigDecimalFromStr(BigDecimal value, Locale locale) { + NumberFormat moedaFormat = NumberFormat.getCurrencyInstance(locale); + return moedaFormat.format(value.doubleValue()); + } + + public static String getPercentStrFromStr(String value, Locale locale) { NumberFormat percentFormat = NumberFormat.getPercentInstance(locale); percentFormat.setMinimumFractionDigits(2); - return percentFormat.format(Double.parseDouble(value)); + } + + public static String getPercentBigDecimalFromStr(BigDecimal value, Locale locale) { + NumberFormat percentFormat = NumberFormat.getPercentInstance(locale); + percentFormat.setMinimumFractionDigits(2); + return percentFormat.format(value.doubleValue()); } diff --git a/web/gui/relatorios/filtroRelatorioAproveitamento.zul b/web/gui/relatorios/filtroRelatorioAproveitamento.zul index 566abde40..5f1978204 100644 --- a/web/gui/relatorios/filtroRelatorioAproveitamento.zul +++ b/web/gui/relatorios/filtroRelatorioAproveitamento.zul @@ -7,7 +7,7 @@ diff --git a/web/gui/relatorios/filtroRelatorioResumoLinhas.zul b/web/gui/relatorios/filtroRelatorioResumoLinhas.zul index 26feb651a..01d86654a 100644 --- a/web/gui/relatorios/filtroRelatorioResumoLinhas.zul +++ b/web/gui/relatorios/filtroRelatorioResumoLinhas.zul @@ -7,7 +7,7 @@