From 70cbf4f83c1b0df1c08a8e6eadb26fa4d3665aa9 Mon Sep 17 00:00:00 2001 From: valdir Date: Tue, 9 Nov 2021 17:30:47 +0000 Subject: [PATCH] =?UTF-8?q?0023454:=20Relat=C3=B3rio=20Vendas=20com=20Desc?= =?UTF-8?q?onto.=20bug#23454=20dev:valdevir=20qua:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Web/trunk/ventaboletos@109527 d1611594-4594-4d17-8e1d-87c2c4800839 --- .../relatorios/impl/RelatorioDescontos.java | 29 +- .../impl/RelatorioDescontosTipo2.java | 177 +++++ .../RelatorioDescontosTipo2_es.properties | 29 + .../RelatorioDescontosTipo2_pt_BR.properties | 29 + .../templates/RelatorioDescontosTipo2.jasper | Bin 0 -> 56764 bytes .../templates/RelatorioDescontosTipo2.jrxml | 617 ++++++++++++++++++ .../RelatorioDescontosController.java | 46 +- web/WEB-INF/i3-label_es_MX.label | 3 + web/WEB-INF/i3-label_pt_BR.label | 3 + .../relatorios/filtroRelatorioDescontos.zul | 15 +- 10 files changed, 933 insertions(+), 15 deletions(-) create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDescontosTipo2.java create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioDescontosTipo2_es.properties create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioDescontosTipo2_pt_BR.properties create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDescontosTipo2.jasper create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDescontosTipo2.jrxml diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDescontos.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDescontos.java index 1ef37064e..269a5098c 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDescontos.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDescontos.java @@ -35,7 +35,9 @@ public class RelatorioDescontos extends Relatorio { Timestamp fecVentaFinal = new Timestamp((DateUtil.fimFecha((Date) parametros.get("fecVentaFinal"))).getTime()); String codconvenio = (String) parametros.get("codconvenio"); - String query = getQuery(idPuntoVenta, codconvenio); + Integer tipoPuntoVenta = (Integer) parametros.get("tipoPuntoVenta"); + + String query = getQuery(idPuntoVenta, codconvenio, tipoPuntoVenta); System.out.println(query); NamedParameterStatement statement = new NamedParameterStatement(coneConnection, query); @@ -47,7 +49,11 @@ public class RelatorioDescontos extends Relatorio { } if(codconvenio != null && !codconvenio.isEmpty()) { statement.setString("codconvenio", codconvenio); - } + } + + if (tipoPuntoVenta != null && tipoPuntoVenta != -1) { + statement.setInt("tipoPuntoVenta", tipoPuntoVenta); + } ResultSet resultSet = statement.executeQuery(); @@ -84,7 +90,7 @@ public class RelatorioDescontos extends Relatorio { } } - private String getQuery(Integer idPuntoVenta, String codconvenio) { + private String getQuery(Integer idPuntoVenta, String codconvenio, Integer tipoPuntoVenta) { String query = " SELECT " @@ -127,6 +133,8 @@ public class RelatorioDescontos extends Relatorio { + " JOIN CONVENIO_DET CONV_D ON CONV_D.CONVENIODET_ID = BOL.CONVENIODET_ID " + " JOIN CONVENIO CONV ON CONV.CONVENIO_ID = CONV_D.CONVENIO_ID " + " JOIN PUNTO_VENTA PUNT_V ON PUNT_V.PUNTOVENTA_ID = BOL.PUNTOVENTA_ID " + + " JOIN TIPO_PTOVTA TPVTA ON PUNT_V.TIPOPTOVTA_ID = TPVTA.TIPOPTOVTA_ID " + + " JOIN PARADA ORIG ON ORIG.PARADA_ID = BOL.ORIGEN_ID " + " JOIN PARADA DEST ON DEST.PARADA_ID = BOL.DESTINO_ID " + " INNER JOIN USUARIO U ON U.USUARIO_ID = BOL.USUARIO_ID " @@ -146,16 +154,13 @@ public class RelatorioDescontos extends Relatorio { if (codconvenio != null && !codconvenio.isEmpty()) { query += " AND (CONV.CVECONVENIO = :codconvenio)"; } -// -// query += " GROUP BY (CONV.CVECONVENIO || ' - ' || CONV.DESCCONVENIO), BOL.EMPRESACORRIDA_ID, PUNT_V.NOMBPUNTOVENTA, "; -// query += " BOL.FECHORVENTA, BOL.FECHORVIAJE, BOL.CORRIDA_ID, ORIG.CVEPARADA, DEST.CVEPARADA, BOL.PRECIOPAGADO, " ; -// query += " BOL.IMPORTETAXAEMBARQUE, BOL.IMPORTEPEDAGIO, BOL.NOMBPASAJERO, BOL.NUMIDENTIFICACION, U.CVEUSUARIO " ; - query += " ORDER BY BOL.EMPRESACORRIDA_ID, (CONV.CVECONVENIO || ' - ' || CONV.DESCCONVENIO)"; -// " BOL.EMPRESACORRIDA_ID, PUNT_V.NOMBPUNTOVENTA, "; -// query += " BOL.FECHORVENTA, BOL.FECHORVIAJE, BOL.CORRIDA_ID, ORIG.CVEPARADA, DEST.CVEPARADA, BOL.PRECIOPAGADO, " ; -// query += " BOL.IMPORTETAXAEMBARQUE, BOL.IMPORTEPEDAGIO, BOL.NOMBPASAJERO, BOL.NUMIDENTIFICACION, U.CVEUSUARIO " ; + + if (tipoPuntoVenta != null && tipoPuntoVenta != -1) { + query += " AND (PUNT_V.TIPOPTOVTA_ID = :tipoPuntoVenta)"; + } + + query += " ORDER BY BOL.EMPRESACORRIDA_ID, (CONV.CVECONVENIO || ' - ' || CONV.DESCCONVENIO)"; - return query; } diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDescontosTipo2.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDescontosTipo2.java new file mode 100644 index 000000000..6e20d62eb --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDescontosTipo2.java @@ -0,0 +1,177 @@ +package com.rjconsultores.ventaboletos.relatorios.impl; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; + +import com.rjconsultores.ventaboletos.relatorios.utilitarios.DataSource; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; +import com.rjconsultores.ventaboletos.utilerias.DateUtil; +import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement; + +public class RelatorioDescontosTipo2 extends Relatorio { + + List> dadosRelatorio = new ArrayList>(); + + public RelatorioDescontosTipo2(Map parametros, Connection conexao) throws Exception { + super(parametros, conexao); + + setCustomDataSource(new DataSource(this){ + @Override + public void initDados() throws Exception { + Connection coneConnection = relatorio.getConexao(); + Map parametros = relatorio.getParametros(); + + Integer idPuntoVenta = (Integer) parametros.get("idPuntoVenta"); + Timestamp fecVentaInicial = new Timestamp((DateUtil.inicioFecha((Date) parametros.get("fecVentaInicial"))).getTime()); + Timestamp fecVentaFinal = new Timestamp((DateUtil.fimFecha((Date) parametros.get("fecVentaFinal"))).getTime()); + String codconvenio = (String) parametros.get("codconvenio"); + + Integer tipoPuntoVenta = (Integer) parametros.get("tipoPuntoVenta"); + + String query = getQuery(idPuntoVenta, codconvenio, tipoPuntoVenta); + System.out.println(query); + + NamedParameterStatement statement = new NamedParameterStatement(coneConnection, query); + statement.setTimestamp("fecVentaInicial", fecVentaInicial); + statement.setTimestamp("fecVentaFinal", fecVentaFinal); + + if(idPuntoVenta != null && idPuntoVenta != -1) { + statement.setInt("idPuntoVenta", idPuntoVenta); + } + if(codconvenio != null && !codconvenio.isEmpty()) { + statement.setString("codconvenio", codconvenio); + } + + if (tipoPuntoVenta != null && tipoPuntoVenta != -1) { + statement.setInt("tipoPuntoVenta", tipoPuntoVenta); + } + + ResultSet resultSet = statement.executeQuery(); + + preencherDadosRelatorio(resultSet); + } + + + }); + } + + private void preencherDadosRelatorio(ResultSet resultSet) throws SQLException { + while (resultSet.next()) { + HashMap singleData = new HashMap(); + singleData.put("codConvenio", resultSet.getString("codConvenio")); + singleData.put("nomeAgencia", resultSet.getString("nomeAgencia")); + singleData.put("dataEmissao", resultSet.getDate("dataEmissao")); + singleData.put("dataViagem", resultSet.getTimestamp("dataViagem")); + singleData.put("codServico", resultSet.getString("codServico")); + singleData.put("codOrigem", resultSet.getString("codOrigem")); + singleData.put("codDestino", resultSet.getString("codDestino")); + singleData.put("tarifaComDesconto", resultSet.getDouble("tarifaComDesconto")); + singleData.put("tut", resultSet.getDouble("tut")); + singleData.put("pedagio", resultSet.getDouble("pedagio")); + singleData.put("nomepassageiro", resultSet.getString("nomepassageiro")); + singleData.put("documento", resultSet.getString("documento")); + singleData.put("bilheteiro", resultSet.getString("bilheteiro")); + singleData.put("empresacorrida", resultSet.getInt("empresacorrida")); + singleData.put("empresa", resultSet.getString("empresa")); + singleData.put("CANAL_DE_VENDA", resultSet.getString("CANAL_DE_VENDA")); + singleData.put("email", resultSet.getString("email")); + singleData.put("telefone", resultSet.getString("telefone")); + dadosRelatorio.add(singleData); + } + + if(!dadosRelatorio.isEmpty()) { + setCollectionDataSource(new JRBeanCollectionDataSource(dadosRelatorio)); + } + } + + private String getQuery(Integer idPuntoVenta, String codconvenio, Integer tipoPuntoVenta) { + + String query = " SELECT " + + + " (CONV.CVECONVENIO || ' - ' || CONV.DESCCONVENIO) AS codConvenio, " + + " PUNT_V.NOMBPUNTOVENTA AS nomeAgencia, " + + " BOL.FECHORVENTA AS dataEmissao, " + + " BOL.FECHORVIAJE AS dataViagem, " + + " BOL.CORRIDA_ID AS codServico, " + + " ORIG.CVEPARADA AS codOrigem, " + + " DEST.CVEPARADA AS codDestino, " + + + " (case " + + " when ( bol.indcancelacion = 1 ) " + + " then (-1 *(Abs( BOL.PRECIOPAGADO ) )) " + + " else " + + " BOL.PRECIOPAGADO " + + " END) AS tarifaComDesconto, " + + + + " (case " + + " when ( bol.indcancelacion = 1 ) " + + " then (-1 *(Abs( BOL.IMPORTETAXAEMBARQUE ) )) " + + " else " + + " BOL.IMPORTETAXAEMBARQUE " + + " END) AS tut, " + + + " (case " + + " when ( bol.indcancelacion = 1 ) " + + " then (-1 *(Abs( BOL.IMPORTEPEDAGIO ) )) " + + " else " + + " BOL.IMPORTEPEDAGIO " + + " END) AS pedagio, " + + + " BOL.NOMBPASAJERO AS nomepassageiro, " + + " BOL.DESCNUMDOC AS documento," + + " U.CVEUSUARIO AS bilheteiro, " + + " BOL.EMPRESACORRIDA_ID AS empresacorrida, " + + " EMP.NOMBEMPRESA AS empresa, " + + + " TPVTA.desctipo AS CANAL_DE_VENDA, " + + " BOL.DESCCORREO AS email, " + + " BOL.DESCTELEFONO AS telefone " + + + " FROM BOLETO BOL " + + " JOIN CONVENIO_DET CONV_D ON CONV_D.CONVENIODET_ID = BOL.CONVENIODET_ID " + + " JOIN CONVENIO CONV ON CONV.CONVENIO_ID = CONV_D.CONVENIO_ID " + + " JOIN PUNTO_VENTA PUNT_V ON PUNT_V.PUNTOVENTA_ID = BOL.PUNTOVENTA_ID " + + " JOIN TIPO_PTOVTA TPVTA ON PUNT_V.TIPOPTOVTA_ID = TPVTA.TIPOPTOVTA_ID " + + + " JOIN PARADA ORIG ON ORIG.PARADA_ID = BOL.ORIGEN_ID " + + " JOIN PARADA DEST ON DEST.PARADA_ID = BOL.DESTINO_ID " + + " INNER JOIN USUARIO U ON U.USUARIO_ID = BOL.USUARIO_ID " + + " JOIN EMPRESA EMP ON EMP.EMPRESA_ID = BOL.EMPRESACORRIDA_ID " + + " WHERE " + + " BOL.INDSTATUSOPERACION = 'F' " + + " AND BOL.ACTIVO = 1 " + + " AND BOL.FECHORVENTA BETWEEN :fecVentaInicial AND :fecVentaFinal "; + + if(!((String)parametros.get("EMPRESAIDS")).equals("")){ + query +=" AND BOL.EMPRESACORRIDA_ID IN ( " + (String)parametros.get("EMPRESAIDS") + ")" ; + } + + if(idPuntoVenta != null && idPuntoVenta != -1) { + query += " AND (BOL.PUNTOVENTA_ID = :idPuntoVenta) "; + } + if (codconvenio != null && !codconvenio.isEmpty()) { + query += " AND (CONV.CVECONVENIO = :codconvenio)"; + } + + if (tipoPuntoVenta != null && tipoPuntoVenta != -1) { + query += " AND (PUNT_V.TIPOPTOVTA_ID = :tipoPuntoVenta)"; + } + + query += " ORDER BY BOL.EMPRESACORRIDA_ID, (CONV.CVECONVENIO || ' - ' || CONV.DESCCONVENIO)"; + + return query; + } + + @Override + protected void processaParametros() throws Exception {} +} \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioDescontosTipo2_es.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioDescontosTipo2_es.properties new file mode 100644 index 000000000..7221b71de --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioDescontosTipo2_es.properties @@ -0,0 +1,29 @@ +label.codConvenio = Convênio +label.fecVentaInicial = Data da Venda Inicial: +label.fecVentaFinal = Data da Venda Final: +label.puntoVenta = Agência: +cabecalho.dataHora = Data/Hora: +cabecalho.impressorPor = Impresso por: +cabecalho.pagina = Página +cabecalho.de = de +label.empresa = Empresa +label.codigo = Código: +label.nomeAgencia = Agc. Emissora +label.dataEmissao = Data Emissão +label.dataViagem = Data Viagem +label.codServico = Serviço +label.codOrigem = Origem +label.codDestino = Destino +label.tarifaComDesconto = Tarifa c/ des +label.tut = TUT +label.pedagio = Pedágio +label.totalPorConvenio = Total deste Convênio +label.totalGeral = Total Geral +label.total = Total +msg.noData = Não foi possivel obter dados com os parâmetros informados. +label.bilheteiro = Bilheteiro +label.nomepassageiro = Passageiro +label.documentopassageiro = Doc. P. +label.canalDeVenda = Canal Venda +label.email = e-mail +label.telefone = Telefone \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioDescontosTipo2_pt_BR.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioDescontosTipo2_pt_BR.properties new file mode 100644 index 000000000..7221b71de --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioDescontosTipo2_pt_BR.properties @@ -0,0 +1,29 @@ +label.codConvenio = Convênio +label.fecVentaInicial = Data da Venda Inicial: +label.fecVentaFinal = Data da Venda Final: +label.puntoVenta = Agência: +cabecalho.dataHora = Data/Hora: +cabecalho.impressorPor = Impresso por: +cabecalho.pagina = Página +cabecalho.de = de +label.empresa = Empresa +label.codigo = Código: +label.nomeAgencia = Agc. Emissora +label.dataEmissao = Data Emissão +label.dataViagem = Data Viagem +label.codServico = Serviço +label.codOrigem = Origem +label.codDestino = Destino +label.tarifaComDesconto = Tarifa c/ des +label.tut = TUT +label.pedagio = Pedágio +label.totalPorConvenio = Total deste Convênio +label.totalGeral = Total Geral +label.total = Total +msg.noData = Não foi possivel obter dados com os parâmetros informados. +label.bilheteiro = Bilheteiro +label.nomepassageiro = Passageiro +label.documentopassageiro = Doc. P. +label.canalDeVenda = Canal Venda +label.email = e-mail +label.telefone = Telefone \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDescontosTipo2.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDescontosTipo2.jasper new file mode 100644 index 0000000000000000000000000000000000000000..da20f8f6f5afd6c753446f9f81ff3ad651683d71 GIT binary patch literal 56764 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <band height="102" splitType="Stretch"> + <textField isStretchWithOverflow="true" pattern="dd/MM/yyyy HH:mm" isBlankWhenNull="false"> + <reportElement uuid="b8a08223-0a24-43a7-8ebe-17a3db2d83fe" mode="Transparent" x="1124" y="59" width="73" height="24" forecolor="#000000" backcolor="#FFFFFF"/> + <textElement textAlignment="Right" verticalAlignment="Middle" rotation="None" markup="none"> + <font fontName="SansSerif" size="8" isBold="true" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfEncoding="Cp1252" isPdfEmbedded="false"/> + <paragraph lineSpacing="Single"/> + </textElement> + <textFieldExpression><![CDATA[new java.util.Date()]]></textFieldExpression> + </textField> + <textField isStretchWithOverflow="true"> + <reportElement uuid="d095c344-00e0-4532-8035-8b93ef192a56" x="1024" y="59" width="100" height="24"/> + <textElement textAlignment="Right" verticalAlignment="Middle"> + <font size="8" isBold="true"/> + </textElement> + <textFieldExpression><![CDATA[$R{cabecalho.dataHora}]]></textFieldExpression> + </textField> + <textField pattern="" isBlankWhenNull="false"> + <reportElement uuid="eceda28e-b177-4d40-a99f-bce905486f71" mode="Transparent" x="0" y="0" width="1200" height="25" forecolor="#000000" backcolor="#FFFFFF"/> + <box> + <pen lineWidth="0.5"/> + <topPen lineWidth="0.5"/> + <leftPen lineWidth="0.5"/> + <bottomPen lineWidth="0.5"/> + <rightPen lineWidth="0.5"/> + </box> + <textElement textAlignment="Center" verticalAlignment="Middle" rotation="None" markup="none"> + <font fontName="SansSerif" size="18" isBold="true" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfFontName="Helvetica-Bold" pdfEncoding="Cp1252" isPdfEmbedded="false"/> + <paragraph lineSpacing="Single"/> + </textElement> + <textFieldExpression><![CDATA[$P{nomeRelatorio}]]></textFieldExpression> + </textField> + <textField isStretchWithOverflow="true" evaluationTime="Report" pattern="" isBlankWhenNull="false"> + <reportElement uuid="17bc8d21-5221-4757-ade1-9b3d1b4c10ce" mode="Transparent" x="1178" y="46" width="19" height="12" forecolor="#000000" backcolor="#FFFFFF"/> + <textElement textAlignment="Center" verticalAlignment="Top" rotation="None" markup="none"> + <font fontName="SansSerif" size="8" isBold="true" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfEncoding="Cp1252" isPdfEmbedded="false"/> + <paragraph lineSpacing="Single"/> + </textElement> + <textFieldExpression><![CDATA[$V{PAGE_NUMBER}]]></textFieldExpression> + </textField> + <textField isStretchWithOverflow="true" pattern="" isBlankWhenNull="false"> + <reportElement uuid="8857ff4c-243b-4073-9466-98722a23eccf" mode="Transparent" x="1024" y="32" width="173" height="12" forecolor="#000000" backcolor="#FFFFFF"/> + <textElement textAlignment="Right" verticalAlignment="Top" rotation="None" markup="none"> + <font fontName="SansSerif" size="8" isBold="true" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfEncoding="Cp1252" isPdfEmbedded="false"/> + <paragraph lineSpacing="Single"/> + </textElement> + <textFieldExpression><![CDATA[$R{cabecalho.pagina} + " " + $V{PAGE_NUMBER} + " " + $R{cabecalho.de}]]></textFieldExpression> + </textField> + <textField isStretchWithOverflow="true" pattern="" isBlankWhenNull="true"> + <reportElement uuid="65e099b5-ddc7-4f45-a453-38ab8cc4cb7c" mode="Transparent" x="1024" y="84" width="173" height="12" isRemoveLineWhenBlank="true" isPrintWhenDetailOverflows="true" forecolor="#000000" backcolor="#FFFFFF"/> + <textElement textAlignment="Right" verticalAlignment="Top" rotation="None" markup="none"> + <font fontName="SansSerif" size="8" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfEncoding="Cp1252" isPdfEmbedded="false"/> + <paragraph lineSpacing="Single"/> + </textElement> + <textFieldExpression><![CDATA[$R{cabecalho.impressorPor} + " " + $P{usuario}]]></textFieldExpression> + </textField> + <textField isStretchWithOverflow="true" pattern="dd/MM/yyyy"> + <reportElement uuid="145289a7-0f0a-4aa0-aab7-2bad8b44292e" x="113" y="49" width="100" height="12" isPrintWhenDetailOverflows="true"/> + <textElement> + <font size="8"/> + </textElement> + <textFieldExpression><![CDATA[$P{fecVentaInicial}]]></textFieldExpression> + </textField> + <textField isStretchWithOverflow="true" pattern="dd/MM/yyyy"> + <reportElement uuid="74a3108b-f2bf-4a05-8a0e-ef3bc6e23e78" x="113" y="61" width="100" height="12" isPrintWhenDetailOverflows="true"/> + <textElement> + <font size="8"/> + </textElement> + <textFieldExpression><![CDATA[$P{fecVentaFinal}]]></textFieldExpression> + </textField> + <textField isStretchWithOverflow="true" isBlankWhenNull="true"> + <reportElement uuid="4ea6cfd8-2183-4d3a-b7fc-51ece4715dd9" x="113" y="37" width="100" height="12" isRemoveLineWhenBlank="true" isPrintWhenDetailOverflows="true"/> + <textElement> + <font size="8"/> + <paragraph lineSpacing="Single"/> + </textElement> + <textFieldExpression><![CDATA[$P{codconvenio}]]></textFieldExpression> + </textField> + <textField isStretchWithOverflow="true" isBlankWhenNull="true"> + <reportElement uuid="c95a7200-7032-4a56-abca-615be605f781" x="113" y="73" width="100" height="12" isRemoveLineWhenBlank="true" isPrintWhenDetailOverflows="true"/> + <textElement> + <font size="8"/> + </textElement> + <textFieldExpression><![CDATA[$P{puntoVenta}]]></textFieldExpression> + </textField> + <textField isStretchWithOverflow="true"> + <reportElement uuid="0fb0788e-1dae-4756-8d2d-076ed62e733c" x="3" y="37" width="110" height="12"> + <printWhenExpression><![CDATA[new Boolean($P{codconvenio} != null && !$P{codconvenio}.isEmpty())]]></printWhenExpression> + </reportElement> + <textElement> + <font size="8" isBold="false" pdfFontName="Helvetica-Bold"/> + </textElement> + <textFieldExpression><![CDATA[$R{label.codConvenio}]]></textFieldExpression> + </textField> + <textField isStretchWithOverflow="true"> + <reportElement uuid="1ffb28ce-353b-45c6-95a3-ba5c40faa4b5" x="3" y="49" width="110" height="12"/> + <textElement> + <font size="8" isBold="false" pdfFontName="Helvetica-Bold"/> + </textElement> + <textFieldExpression><![CDATA[$R{label.fecVentaInicial}]]></textFieldExpression> + </textField> + <textField isStretchWithOverflow="true"> + <reportElement uuid="c52ee81b-b6a0-44cd-b0e0-c61177419f22" x="3" y="61" width="110" height="12"/> + <textElement> + <font size="8" isBold="false" pdfFontName="Helvetica-Bold"/> + </textElement> + <textFieldExpression><![CDATA[$R{label.fecVentaFinal}]]></textFieldExpression> + </textField> + <textField isStretchWithOverflow="true"> + <reportElement uuid="2c80eede-1c35-4bec-8c97-3ea0ea54ed16" x="3" y="73" width="110" height="12"> + <printWhenExpression><![CDATA[new Boolean($P{puntoVenta} != null)]]></printWhenExpression> + </reportElement> + <textElement> + <font size="8" isBold="false" pdfFontName="Helvetica-Bold"/> + </textElement> + <textFieldExpression><![CDATA[$R{label.puntoVenta}]]></textFieldExpression> + </textField> + <line> + <reportElement uuid="d6ec8319-dcf8-42f7-bb0f-64235db1f2da" x="40" y="97" width="1157" height="1"/> + <graphicElement> + <pen lineWidth="0.5"/> + </graphicElement> + </line> + </band> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioDescontosController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioDescontosController.java index e6c8133c7..7c21bc5ac 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioDescontosController.java +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioDescontosController.java @@ -15,14 +15,20 @@ import org.zkoss.util.resource.Labels; import org.zkoss.zhtml.Messagebox; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.Event; +import org.zkoss.zul.Combobox; +import org.zkoss.zul.Comboitem; import org.zkoss.zul.Datebox; import org.zkoss.zul.Paging; +import org.zkoss.zul.Radiogroup; import org.zkoss.zul.Textbox; import com.rjconsultores.ventaboletos.entidad.Empresa; import com.rjconsultores.ventaboletos.entidad.PuntoVenta; +import com.rjconsultores.ventaboletos.entidad.TipoPuntoVenta; import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioDescontos; +import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioDescontosTipo2; import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; +import com.rjconsultores.ventaboletos.service.TipoPuntoVentaService; import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado; import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxPuntoVenta; import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer; @@ -42,6 +48,9 @@ public class RelatorioDescontosController extends MyGenericForwardComposer { @Autowired private transient PagedListWrapper plwEmpresa; + @Autowired + private TipoPuntoVentaService tipoPuntoVentaService; + private MyComboboxPuntoVenta cmbAgencia; private Datebox fecVentaInicial; private Datebox fecVentaFinal; @@ -51,12 +60,16 @@ public class RelatorioDescontosController extends MyGenericForwardComposer { private Paging pagingEmpresaSel; private MyListbox empresaList; private MyListbox empresaSelList; + private Combobox cmbTipoPontoVenta; + private List lsTipoPuntoVenta; + private Radiogroup rdbGroup; @Override public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); empresaList.setItemRenderer(new RenderRelatorioGenericoEmpresasSel()); empresaSelList.setItemRenderer(new RenderRelatorioGenericoEmpresasSel()); + lsTipoPuntoVenta = tipoPuntoVentaService.obtenerTodos(); } public void onClick$btnExecutarRelatorio(Event ev) throws Exception { @@ -84,6 +97,7 @@ public class RelatorioDescontosController extends MyGenericForwardComposer { executarRelatorio(); } + @SuppressWarnings({ "rawtypes", "unchecked"}) private void executarRelatorio() throws Exception { Map parametros = new HashMap(); parametros.put("fecVentaInicial", fecVentaInicial.getValue()); @@ -110,7 +124,20 @@ public class RelatorioDescontosController extends MyGenericForwardComposer { } parametros.put("EMPRESAIDS", empresaIds.toString()); - Relatorio relatorio = new RelatorioDescontos(parametros, dataSourceRead.getConnection()); + Comboitem itemTipoPontoVenta = cmbTipoPontoVenta.getSelectedItem(); + + if (itemTipoPontoVenta != null) { + TipoPuntoVenta tipoPontoVenta = (TipoPuntoVenta) itemTipoPontoVenta.getValue(); + parametros.put("tipoPuntoVenta", tipoPontoVenta == null ? null : tipoPontoVenta.getTipoptovtaId().intValue()); + } + + Relatorio relatorio; + if(rdbGroup.getSelectedItem().getValue().equals("1")) { + relatorio = new RelatorioDescontos(parametros, dataSourceRead.getConnection()); + } else { + relatorio = new RelatorioDescontosTipo2(parametros, dataSourceRead.getConnection()); + } + Map args = new HashMap(); args.put("relatorio", relatorio); @@ -238,5 +265,20 @@ public class RelatorioDescontosController extends MyGenericForwardComposer { public void setEmpresaList(MyListbox empresaList) { this.empresaList = empresaList; } - + + public Combobox getCmbTipoPontoVenta() { + return cmbTipoPontoVenta; + } + + public void setCmbTipoPontoVenta(Combobox cmbTipoPontoVenta) { + this.cmbTipoPontoVenta = cmbTipoPontoVenta; + } + + public List getLsTipoPuntoVenta() { + return lsTipoPuntoVenta; + } + + public void setLsTipoPuntoVenta(List lsTipoPuntoVenta) { + this.lsTipoPuntoVenta = lsTipoPuntoVenta; + } } \ No newline at end of file diff --git a/web/WEB-INF/i3-label_es_MX.label b/web/WEB-INF/i3-label_es_MX.label index 79dd318dd..4b91c00e3 100644 --- a/web/WEB-INF/i3-label_es_MX.label +++ b/web/WEB-INF/i3-label_es_MX.label @@ -7449,6 +7449,9 @@ relatorioDescontosController.lbEmpresa.value = Empresa relatorioDescontosController.btnPesquisa.label = Buscar relatorioDescontosController.btnLimpar.label = Limpar relatorioDescontosController.lbIdEmpresa.value = Id +relatorioDescontosController.lbTipoRelatorio.value= Tipo Relatório: +relatorioDescontosController.lbTipoRelatorioTipo1.value= Tipo 1 +relatorioDescontosController.lbTipoRelatorioTipo2.value= Tipo 2 # Filtro Relatorio de Agências Não Importadas filtroRelatorioAgenciasNaoImportadas.lbDataIni.value = Fecha Inicio diff --git a/web/WEB-INF/i3-label_pt_BR.label b/web/WEB-INF/i3-label_pt_BR.label index 66c27352c..b2c17e686 100644 --- a/web/WEB-INF/i3-label_pt_BR.label +++ b/web/WEB-INF/i3-label_pt_BR.label @@ -7989,6 +7989,9 @@ relatorioDescontosController.lbEmpresa.value = Empresa relatorioDescontosController.btnPesquisa.label = Buscar relatorioDescontosController.btnLimpar.label = Limpar relatorioDescontosController.lbIdEmpresa.value = Id +relatorioDescontosController.lbTipoRelatorio.value= Tipo Relatório: +relatorioDescontosController.lbTipoRelatorioTipo1.value= Tipo 1 +relatorioDescontosController.lbTipoRelatorioTipo2.value= Tipo 2 indexController.mniRelatorioAgenciaFechamento.label= Resumo Venda por Agencia diff --git a/web/gui/relatorios/filtroRelatorioDescontos.zul b/web/gui/relatorios/filtroRelatorioDescontos.zul index 14c5bff11..4226ac2f0 100644 --- a/web/gui/relatorios/filtroRelatorioDescontos.zul +++ b/web/gui/relatorios/filtroRelatorioDescontos.zul @@ -5,7 +5,7 @@ - + @@ -29,6 +29,14 @@ + + + + +