diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout.java new file mode 100644 index 000000000..e43abb66e --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout.java @@ -0,0 +1,245 @@ +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.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; + +public class RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout extends Relatorio { + + public RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout(Map parametros, Connection conexao) throws Exception { + super(parametros, conexao); + + this.setCustomDataSource(new ArrayDataSource(this) { + + 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 linhasIds = (String) parametros.get("LINHAS"); + String empresaId = (String) parametros.get("EMPRESA_IDS"); + + String sql = getSql(dataDe, dataAte, linhasIds, empresaId); + + PreparedStatement ps = conexao.prepareStatement(sql.toString()); + + ResultSet rset = ps.executeQuery(); + BigDecimal lugaresOfertados = BigDecimal.ZERO; + + + while (rset.next()) { + boolean agrupar = false; + Map dataResult = new HashMap(); + + dataResult.put("tarifa", rset.getBigDecimal("tarifa")); + dataResult.put("origem", rset.getString("origem")); + dataResult.put("destino", rset.getString("destino")); + dataResult.put("km", rset.getFloat("km")); + dataResult.put("totalida", rset.getLong("totalida")); + dataResult.put("totalvolta", rset.getLong("totalvolta")); + dataResult.put("totalReceita", rset.getBigDecimal("totalReceita")); + + for (Iterator iterator = dados.iterator(); iterator.hasNext();) { + + Map map = (Map) iterator.next(); + String origem = map.get("origem").toString(); + String destino = map.get("destino").toString(); + Long ida = (Long) map.get("totalida"); + Long volta = (Long) map.get("totalvolta"); + + + if (origem.equals(rset.getString("destino")) && destino.equals(rset.getString("origem"))) { + agrupar = true; + if (ida == 0) { + map.put("totalida", rset.getLong("totalida")); + } + if (volta == 0) { + map.put("totalvolta", rset.getLong("totalvolta")); + } + + } + + } + + if (!agrupar) { + this.dados.add(dataResult); + } + + } + + 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; + } + }); + } + + @Override + protected void processaParametros() throws Exception { + } + + private String getSql(String dataDe, String dataAte, String linhasIds, + String empresaId) { + StringBuilder sql = new StringBuilder(); + + 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(" ori.descparada AS origem, "); + sql.append(" des.descparada AS destino, "); + sql.append(" MAX(tr.CANTKMREAL) as km, "); + sql.append(" COUNT( DISTINCT "); + sql.append(" CASE "); + sql.append(" WHEN(r.indsentidoida = 1) THEN b.boleto_id "); + sql.append(" ELSE NULL "); + sql.append(" END "); + sql.append(" ) AS totalida, "); + sql.append(" COUNT( DISTINCT "); + sql.append(" CASE "); + sql.append(" WHEN(r.indsentidoida = 0) THEN b.boleto_id "); + sql.append(" ELSE NULL "); + sql.append(" END "); + sql.append(" ) AS totalvolta, "); + sql.append(" rc.rutacombinacion_id rutaCombinacionId "); + sql.append(" FROM "); + sql.append(" boleto b "); + sql.append(" JOIN empresa e ON e.empresa_id = b.empresacorrida_id "); + sql.append(" JOIN marca m ON m.empresa_id = b.empresacorrida_id "); + sql.append(" JOIN categoria ca ON b.categoria_id = ca.categoria_id "); + sql.append(" JOIN parada ori ON ori.parada_id = b.origen_id "); + sql.append(" JOIN parada des ON des.parada_id = b.destino_id "); + 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(" 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 "); + sql.append(" AND tar.claseservicio_id = b.claseservicio_id "); + 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 b.motivocancelacion_id is null "); + + if (!StringUtils.isBlank(linhasIds)) { + sql.append(" AND r.NUMRUTA = '").append(linhasIds).append("' "); + } + + 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(" tar.precio, "); + sql.append(" e.nombempresa, "); + sql.append(" r.numruta, "); + sql.append(" r.descruta, "); + 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(); + } +} diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout_es.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout_es.properties new file mode 100644 index 000000000..730b33d62 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout_es.properties @@ -0,0 +1,4 @@ +#geral +msg.noData=No se pudo obtener datos con los parámetros reportados. +msg.a=a +linhas=Linhas \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout_pt_BR.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout_pt_BR.properties new file mode 100644 index 000000000..730b33d62 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout_pt_BR.properties @@ -0,0 +1,4 @@ +#geral +msg.noData=No se pudo obtener datos con los parámetros reportados. +msg.a=a +linhas=Linhas \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout.jasper new file mode 100644 index 000000000..b131a64e3 Binary files /dev/null and b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout.jasper differ diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout.jrxml b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout.jrxml new file mode 100644 index 000000000..3eb0094c9 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout.jrxml @@ -0,0 +1,291 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <band height="176" splitType="Stretch"> + <staticText> + <reportElement mode="Transparent" x="0" y="0" width="570" height="41" forecolor="#000000" backcolor="#FFFFFF"/> + <textElement textAlignment="Left" verticalAlignment="Top" rotation="None" lineSpacing="Single" markup="none"> + <font fontName="SansSerif" size="16" isBold="true" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfEncoding="Cp1252" isPdfEmbedded="false"/> + </textElement> + <text><![CDATA[QUADRO DEMONSTRATIVO DO MOVIMENTO DE PASSAGEIROS]]></text> + </staticText> + <textField pattern="dd/MM/yyyy HH:mm" isBlankWhenNull="false"> + <reportElement mode="Transparent" x="654" y="0" width="95" height="25" forecolor="#000000" backcolor="#FFFFFF"/> + <textElement textAlignment="Left" verticalAlignment="Top" rotation="None" lineSpacing="Single" markup="none"> + <font fontName="SansSerif" size="9" isBold="true" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfEncoding="Cp1252" isPdfEmbedded="false"/> + </textElement> + <textFieldExpression class="java.lang.String"><![CDATA[new java.util.Date()]]></textFieldExpression> + </textField> + <textField pattern="" isBlankWhenNull="false"> + <reportElement mode="Transparent" x="570" y="25" width="84" height="16" forecolor="#000000" backcolor="#FFFFFF"/> + <textElement textAlignment="Right" verticalAlignment="Top" rotation="None" lineSpacing="Single" markup="none"> + <font fontName="SansSerif" size="9" isBold="true" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfEncoding="Cp1252" isPdfEmbedded="false"/> + </textElement> + <textFieldExpression class="java.lang.String"><![CDATA["Página " + $V{PAGE_NUMBER}+ " de " + $V{PAGE_NUMBER}]]></textFieldExpression> + </textField> + <line> + <reportElement x="-1" y="48" width="750" height="1"/> + </line> + <line> + <reportElement positionType="Float" x="-1" y="160" width="750" height="1"/> + </line> + <staticText> + <reportElement x="-1" y="49" width="63" height="22"/> + <textElement lineSpacing="Single"> + <font isBold="true"/> + </textElement> + <text><![CDATA[Empresa:]]></text> + </staticText> + <textField> + <reportElement x="62" y="49" width="509" height="22"/> + <textElement lineSpacing="Single"/> + <textFieldExpression class="java.lang.String"><![CDATA[$P{EMPRESA}]]></textFieldExpression> + </textField> + <textField> + <reportElement x="0" y="71" width="251" height="20"/> + <textElement lineSpacing="Single"> + <font isBold="true"/> + </textElement> + <textFieldExpression class="java.lang.String"><![CDATA["Período: " + $P{DATA_DE} + " a " + $P{DATA_ATE}]]></textFieldExpression> + </textField> + <staticText> + <reportElement x="0" y="133" width="50" height="20"/> + <textElement lineSpacing="Single"> + <font isBold="true"/> + </textElement> + <text><![CDATA[Linha:]]></text> + </staticText> + <textField> + <reportElement x="150" y="133" width="425" height="20"/> + <textElement lineSpacing="Single"/> + <textFieldExpression class="java.lang.String"><![CDATA[$P{DESC_LINHAS_SELECIONADAS}]]></textFieldExpression> + </textField> + <staticText> + <reportElement x="0" y="91" width="77" height="20"/> + <textElement lineSpacing="Single"> + <font isBold="true"/> + </textElement> + <text><![CDATA[Tipo de Data:]]></text> + </staticText> + <staticText> + <reportElement x="77" y="91" width="73" height="20"/> + <textElement lineSpacing="Single"> + <font isBold="false"/> + </textElement> + <text><![CDATA[SERVIÇO]]></text> + </staticText> + <staticText> + <reportElement x="0" y="111" width="77" height="20"/> + <textElement lineSpacing="Single"> + <font isBold="true"/> + </textElement> + <text><![CDATA[Lugar Ofer:]]></text> + </staticText> + <textField isBlankWhenNull="true"> + <reportElement x="77" y="113" width="498" height="20"/> + <textElement lineSpacing="Single"/> + <textFieldExpression class="java.lang.String"><![CDATA[$P{CANTASIENTOS}]]></textFieldExpression> + </textField> + <textField isBlankWhenNull="true"> + <reportElement x="50" y="133" width="100" height="20"/> + <textElement lineSpacing="Single"/> + <textFieldExpression class="java.lang.String"><![CDATA[$P{LINHAS}]]></textFieldExpression> + </textField> + </band> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioQuadroDemonstrativoMovimentoPassageirosController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioQuadroDemonstrativoMovimentoPassageirosController.java index 390ab1da7..0ce7a659b 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioQuadroDemonstrativoMovimentoPassageirosController.java +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioQuadroDemonstrativoMovimentoPassageirosController.java @@ -1,5 +1,6 @@ package com.rjconsultores.ventaboletos.web.gui.controladores.relatorios; +import java.sql.SQLException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; @@ -21,6 +22,7 @@ import org.zkoss.zul.Datebox; import com.rjconsultores.ventaboletos.entidad.Empresa; import com.rjconsultores.ventaboletos.entidad.Ruta; import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioQuadroDemonstrativoMovimentoPassageiros; +import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout; import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; import com.rjconsultores.ventaboletos.service.EmpresaService; import com.rjconsultores.ventaboletos.service.RutaService; @@ -53,9 +55,15 @@ public class RelatorioQuadroDemonstrativoMovimentoPassageirosController extends super.doAfterCompose(comp); } - @SuppressWarnings({ "unchecked", "rawtypes" }) public void onClick$btnExecutarRelatorio(Event ev) throws InterruptedException, Exception { - + executarRelatorio(1); + } + public void onClick$btnExecutarRelatorioNovoLayout(Event ev) throws InterruptedException, Exception { + executarRelatorio(2); + } + + private void executarRelatorio(int tipo) throws SQLException, Exception { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); Date dataDe = datInicial.getValue(); Date dataAte = datFinal.getValue(); @@ -71,6 +79,8 @@ public class RelatorioQuadroDemonstrativoMovimentoPassageirosController extends parametros.put("LINHAS", (ruta.getNumRuta())); parametros.put("DESC_LINHAS_SELECIONADAS", (ruta.getDescruta())); parametros.put("CANTASIENTOS", (ruta.getCantAsientos() != null ? ruta.getCantAsientos().toString() : "")); + }else { + parametros.put("DESC_LINHAS_SELECIONADAS", "Todas"); } } @@ -90,14 +100,18 @@ public class RelatorioQuadroDemonstrativoMovimentoPassageirosController extends } parametros.put("EMPRESA", empresaDesc); parametros.put("EMPRESA_IDS", empresaId); - - Relatorio relatorio = new RelatorioQuadroDemonstrativoMovimentoPassageiros(parametros, dataSourceRead.getConnection()); - + Relatorio relatorio = null; Map args = new HashMap(); - args.put("relatorio", relatorio); - - openWindow("/component/reportView.zul", - Labels.getLabel("indexController.mniRelatorioQuadroDemonstrativoMovimentoPassageiros.label"), args, MODAL); + + if(tipo == 1) { + relatorio = new RelatorioQuadroDemonstrativoMovimentoPassageiros(parametros, dataSourceRead.getConnection()); + args.put("relatorio", relatorio); + openWindow("/component/reportView.zul", Labels.getLabel("indexController.mniRelatorioQuadroDemonstrativoMovimentoPassageiros.label"), args, MODAL); + }else { + relatorio = new RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout(parametros, dataSourceRead.getConnection()); + args.put("relatorio", relatorio); + openWindow("/component/reportView.zul", Labels.getLabel("indexController.mniRelatorioQuadroDemonstrativoMovimentoPassageiros.label"), args, MODAL); + } } public DataSource getDataSourceRead() { diff --git a/web/gui/relatorios/filtroQuadroDemonstrativoDoMovimentoPassageiro.zul b/web/gui/relatorios/filtroQuadroDemonstrativoDoMovimentoPassageiro.zul index 1e07bd2ad..eff6e0dfb 100644 --- a/web/gui/relatorios/filtroQuadroDemonstrativoDoMovimentoPassageiro.zul +++ b/web/gui/relatorios/filtroQuadroDemonstrativoDoMovimentoPassageiro.zul @@ -52,6 +52,8 @@