From fbb97e74f5011d7d800d5cce49669f56e527b1ae Mon Sep 17 00:00:00 2001 From: fabio Date: Thu, 27 Jun 2019 20:12:55 +0000 Subject: [PATCH] fixes bug#14527 dev: qua: git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Web/trunk/ventaboletos@95145 d1611594-4594-4d17-8e1d-87c2c4800839 --- .../relatorios/impl/RelatorioDepositos.java | 50 +- .../impl/RelatorioDepositosNovo.java | 171 ++++++ .../RelatorioDepositosNovo_es.properties | 29 + .../RelatorioDepositosNovo_pt_BR.properties | 29 + .../relatorios/templates/Modelo.jrxml | 150 +++++ .../RelatorioAgenciaFechamento.jrxml | 15 +- .../templates/RelatorioDepositos.jrxml | 49 +- .../templates/RelatorioDepositosNovo.jasper | Bin 0 -> 48146 bytes .../templates/RelatorioDepositosNovo.jrxml | 562 ++++++++++++++++++ .../RelatorioDepositosController.java | 50 +- .../relatorios/filtroRelatorioDepositos.zul | 2 +- 11 files changed, 1024 insertions(+), 83 deletions(-) create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDepositosNovo.java create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioDepositosNovo_es.properties create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioDepositosNovo_pt_BR.properties create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/Modelo.jrxml create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDepositosNovo.jasper create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDepositosNovo.jrxml diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDepositos.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDepositos.java index 7ff1dfc55..8fd2b0886 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDepositos.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDepositos.java @@ -163,39 +163,30 @@ public class RelatorioDepositos extends Relatorio { sql.append(" SUM(NVL(fd.valor_pago,0)) AS vrfechamento , "); sql.append(" f.total AS vrdeposito, "); sql.append(" f.FECHAMENTOCNTCORRENTE_ID, "); -// sql.append(" fdp.NUMDEPOSITO as numdeposito, "); - sql.append(" null as numdeposito, "); -// sql.append(" ifin.CODIGO as codinstfin, "); - sql.append(" null as codinstfin, "); -// sql.append(" ifin.NOME as nomeinstfin "); - sql.append(" null as nomeinstfin "); + sql.append(" fdp.NUMDEPOSITO as numdeposito, "); + sql.append(" ifin.CODIGO as codinstfin, "); + sql.append(" ifin.NOME as nomeinstfin "); sql.append(" FROM fechamento_cntcorrente f "); - // Join com PuntoVenta sql.append(" LEFT JOIN punto_venta p "); - sql.append(" ON p.puntoventa_id = f.puntoventa_id "); - // Join com empresa + sql.append(" ON p.puntoventa_id = f.puntoventa_id "); sql.append(" LEFT JOIN empresa e "); - sql.append(" ON e.empresa_id = f.empresa_id "); - // Join com fechamento_cct_deposito + sql.append(" ON e.empresa_id = f.empresa_id "); sql.append(" LEFT JOIN fechamento_cct_deposito fd "); - sql.append(" ON fd.fechamentocntcorrente_id = f.fechamentocntcorrente_id "); - sql.append(" AND fd.activo = 1 "); - // Join com FECHAMENTO_DEPOSITO + sql.append(" ON fd.fechamentocntcorrente_id = f.fechamentocntcorrente_id "); + sql.append(" AND fd.activo = 1 "); sql.append(" LEFT JOIN FECHAMENTO_DEPOSITO fdp "); - sql.append(" ON fdp.FECHAMENTODEPOSITO_ID = fd.FECHAMENTODEPOSITO_ID "); - sql.append(" AND fdp.activo = 1 "); - // Join com empresa_contabancaria + sql.append(" ON fdp.FECHAMENTODEPOSITO_ID = fd.FECHAMENTODEPOSITO_ID "); + sql.append(" AND fdp.activo = 1 "); sql.append(" LEFT JOIN empresa_contabancaria ecb "); - sql.append(" ON ecb.EMPRESACONTABANCARIA_ID = fdp.EMPRESACONTABANCARIA_ID "); - sql.append(" AND ecb.activo = 1 "); - // Join com INSTI_FINANCEIRA + sql.append(" ON ecb.EMPRESACONTABANCARIA_ID = fdp.EMPRESACONTABANCARIA_ID "); + sql.append(" AND ecb.activo = 1 "); sql.append(" LEFT JOIN INSTI_FINANCEIRA ifin "); - sql.append(" ON ifin.INSTIFINANCEIRA_ID = ecb.INSTIFINANCEIRA_ID "); - sql.append(" AND ifin.activo = 1 "); + sql.append(" ON ifin.INSTIFINANCEIRA_ID = ecb.INSTIFINANCEIRA_ID "); + sql.append(" AND ifin.activo = 1 "); sql.append(" WHERE f.fecfechamento BETWEEN ? AND ? "); - sql.append(" AND f.activo = 1 "); - sql.append(" AND e.activo = 1 "); - sql.append(" AND p.activo = 1 "); + sql.append(" AND f.activo = 1 "); + sql.append(" AND e.activo = 1 "); + sql.append(" AND p.activo = 1 "); if (puntoVentaId != null && puntoVentaId != -1){ sql.append(" and f.puntoventa_id = " + puntoVentaId); @@ -209,12 +200,9 @@ public class RelatorioDepositos extends Relatorio { sql.append(" f.fecfechamento, "); sql.append(" f.FECHAMENTOCNTCORRENTE_ID, "); sql.append(" f.total, "); -// sql.append(" fdp.NUMDEPOSITO, "); - sql.append(" null, "); -// sql.append(" ifin.CODIGO, "); - sql.append(" null, "); -// sql.append(" ifin.NOME ) tmp "); - sql.append(" null ) tmp "); + sql.append(" fdp.NUMDEPOSITO, "); + sql.append(" ifin.CODIGO, "); + sql.append(" ifin.NOME ) tmp "); if (filtrarPendentes){ sql.append(" where "); sql.append(" tmp.saldo < tmp.vrdeposito and tmp.saldo <> 0"); diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDepositosNovo.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDepositosNovo.java new file mode 100644 index 000000000..3cb8cdefe --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDepositosNovo.java @@ -0,0 +1,171 @@ +package com.rjconsultores.ventaboletos.relatorios.impl; + +import java.math.BigDecimal; +import java.sql.Connection; +import java.sql.PreparedStatement; +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.RelatorioDepositoBean; + +import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; + +public class RelatorioDepositosNovo extends Relatorio { + + private static Logger log = Logger.getLogger(RelatorioDepositosNovo.class); + + private List lsDadosRelatorio; + + public RelatorioDepositosNovo(Map parametros, Connection conexao) { + super(parametros, conexao); + + try { + this.setCustomDataSource(new DataSource(this) { + @Override + public void initDados() throws Exception { + + Connection conexao = this.relatorio.getConexao(); + + Map parametros = this.relatorio.getParametros(); + + Integer puntoventaId = parametros.get("puntoventaId") != null ? Integer.parseInt(parametros.get("puntoventaId").toString()) : null; + Integer empresaId = parametros.get("empresaId") != null ? Integer.parseInt(parametros.get("empresaId").toString()) : null; + Boolean filtrarPendentes = parametros.get("filtrarPendentes") != null ? Boolean.parseBoolean(parametros.get("filtrarPendentes").toString()) : false; + String fecInicio = parametros.get("fecInicio").toString() + " 00:00:00"; + String fecFinal = parametros.get("fecFinal").toString() + " 23:59:59"; + + String sql = getSQL(puntoventaId, empresaId, filtrarPendentes); + + PreparedStatement stmt = conexao.prepareStatement(sql); + + ResultSet rs = null; + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss"); + + stmt.setTimestamp(1, new java.sql.Timestamp(sdf.parse(fecInicio).getTime())); + stmt.setTimestamp(2, new java.sql.Timestamp(sdf.parse(fecFinal).getTime())); + + rs = stmt.executeQuery(); + + lsDadosRelatorio = new ArrayList(); + + while (rs.next()) { + + RelatorioDepositoBean deposito = new RelatorioDepositoBean(); + deposito.setNombempresa(rs.getString(1)); + deposito.setNombpuntoventa(rs.getString(2)); + deposito.setNumpuntoventa(rs.getString(3)); + deposito.setDtmotivo(rs.getDate(4)); + deposito.setSaldo(rs.getBigDecimal(5).multiply(BigDecimal.valueOf(-1))); + deposito.setVrdeposito(rs.getBigDecimal(6)); + deposito.setVrfechamento(rs.getBigDecimal(7)); + deposito.setNumdeposito(rs.getString(8)); + deposito.setCodigoInstFinanceira(rs.getString(9)); + deposito.setNomeInstFinanceira(rs.getString(10)); + + lsDadosRelatorio.add(deposito); + } + + if (lsDadosRelatorio.size() > 0) { + setLsDadosRelatorio(lsDadosRelatorio); + } + } + + }); + } catch (Exception e) { + log.error("", e); + } + } + + public void setLsDadosRelatorio(List lsDadosRelatorio) { + this.setCollectionDataSource(new JRBeanCollectionDataSource(lsDadosRelatorio)); + this.lsDadosRelatorio = lsDadosRelatorio; + } + + @Override + protected void processaParametros() throws Exception { + } + + private String getSQL(Integer puntoVentaId, Integer empresaId, boolean filtrarPendentes) { + + StringBuilder sql = new StringBuilder(); + + sql.append(" SELECT DISTINCT tmp.nombempresa, "); + sql.append(" tmp.nombpuntoventa, "); + sql.append(" tmp.numpuntoventa, "); + sql.append(" tmp.dtmotivo, "); + sql.append(" tmp.saldo, "); + sql.append(" tmp.vrfechamento, "); + sql.append(" tmp.vrdeposito, "); + sql.append(" tmp.numdeposito, "); + sql.append(" tmp.codinstfin, "); + sql.append(" tmp.nomeinstfin "); + sql.append(" FROM "); + sql.append(" ( SELECT DISTINCT e.nombempresa, "); + sql.append(" p.nombpuntoventa, "); + sql.append(" p.numpuntoventa, "); + sql.append(" f.fecfechamento AS dtmotivo, "); + sql.append(" ( SUM(NVL(fd.valor_pago,0)) - f.total ) AS saldo, "); + sql.append(" SUM(NVL(fd.valor_pago,0)) AS vrfechamento , "); + sql.append(" f.total AS vrdeposito, "); + sql.append(" f.FECHAMENTOCNTCORRENTE_ID, "); + sql.append(" fdp.NUMDEPOSITO as numdeposito, "); + sql.append(" ifin.CODIGO as codinstfin, "); + sql.append(" NVL(ifin.NOME,'') as nomeinstfin "); + sql.append(" FROM fechamento_cntcorrente f "); + sql.append(" LEFT JOIN punto_venta p "); + sql.append(" ON p.puntoventa_id = f.puntoventa_id "); + sql.append(" LEFT JOIN empresa e "); + sql.append(" ON e.empresa_id = f.empresa_id "); + sql.append(" LEFT JOIN fechamento_cct_deposito fd "); + sql.append(" ON fd.fechamentocntcorrente_id = f.fechamentocntcorrente_id "); + sql.append(" AND fd.activo = 1 "); + sql.append(" LEFT JOIN FECHAMENTO_DEPOSITO fdp "); + sql.append(" ON fdp.FECHAMENTODEPOSITO_ID = fd.FECHAMENTODEPOSITO_ID "); + sql.append(" AND fdp.activo = 1 "); + sql.append(" LEFT JOIN empresa_contabancaria ecb "); + sql.append(" ON ecb.EMPRESACONTABANCARIA_ID = fdp.EMPRESACONTABANCARIA_ID "); + sql.append(" AND ecb.activo = 1 "); + sql.append(" LEFT JOIN INSTI_FINANCEIRA ifin "); + sql.append(" ON ifin.INSTIFINANCEIRA_ID = ecb.INSTIFINANCEIRA_ID "); + sql.append(" AND ifin.activo = 1 "); + sql.append(" WHERE f.fecfechamento BETWEEN ? AND ? "); + sql.append(" AND f.activo = 1 "); + sql.append(" AND e.activo = 1 "); + sql.append(" AND p.activo = 1 "); + + if (puntoVentaId != null && puntoVentaId != -1){ + sql.append(" and f.puntoventa_id = " + puntoVentaId); + } + if (empresaId != null && empresaId != -1){ + sql.append(" and e.empresa_id = " + empresaId); + } + sql.append(" GROUP BY e.nombempresa, "); + sql.append(" p.nombpuntoventa, "); + sql.append(" p.numpuntoventa, "); + sql.append(" f.fecfechamento, "); + sql.append(" f.FECHAMENTOCNTCORRENTE_ID, "); + sql.append(" f.total, "); + sql.append(" fdp.NUMDEPOSITO, "); + sql.append(" ifin.CODIGO, "); + sql.append(" ifin.NOME ) tmp "); + + if (filtrarPendentes){ + sql.append(" where "); + sql.append(" tmp.saldo < tmp.vrdeposito and tmp.saldo <> 0 "); + } + sql.append(" ORDER BY tmp.nombempresa, "); + sql.append(" tmp.nomeinstfin, "); + sql.append(" tmp.nombpuntoventa, "); + sql.append(" tmp.dtmotivo, "); + sql.append(" tmp.vrdeposito "); + + return sql.toString(); + } +} diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioDepositosNovo_es.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioDepositosNovo_es.properties new file mode 100644 index 000000000..4bfe7f5f7 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioDepositosNovo_es.properties @@ -0,0 +1,29 @@ +#geral +msg.noData=No se pudo obtener datos con los parámetros reportados. +msg.a=a + +#Labels header +header.data.hora=Data/Hora +header.pagina=Página +header.de= de +header.filtros=Filtros +header.banco=Banco +header.numdeposito=Nº Depósito +header.dataDeposito=Data +header.valorDeposito=Valor +header.empresa=Empresa: +header.data=Período: +header.agencia=Agência +header.dtmotivo=Data Fechamento +header.fechamento=Fechamento +header.saldo=Pendente +header.vrdeposito=Vr. Depósito +header.vrfechamento=Vr. Fechamento +header.usuario=Usuário +header.numdeposito=Num. Depósito +header.numeroAgencia=Número + +#Labels Footer +footer.totalBanco=Total por Banco +footer.totalEmpresa=Total por Empresa +footer.total=Total Geral \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioDepositosNovo_pt_BR.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioDepositosNovo_pt_BR.properties new file mode 100644 index 000000000..deff2f084 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioDepositosNovo_pt_BR.properties @@ -0,0 +1,29 @@ +#geral +msg.noData=Não foi possivel obter dados com os parâmetros informados. +msg.a=a + +#Labels header +header.data.hora=Data/Hora +header.pagina=Página +header.de= de +header.filtros=Filtros +header.banco=Banco +header.numdeposito=Nº Depósito +header.dataDeposito=Data +header.valorDeposito=Valor +header.empresa=Empresa: +header.data=Período: +header.agencia=Agência +header.dtmotivo=Data Fechamento +header.fechamento=Fechamento +header.saldo=Pendente +header.vrdeposito=Vr. Depósito +header.vrfechamento=Vr. Fechamento +header.usuario=Usuário +header.numdeposito=Num. Depósito +header.numeroAgencia=Número + +#Labels Footer +footer.totalBanco=Total por Banco +footer.totalEmpresa=Total por Empresa +footer.total=Total Geral \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/Modelo.jrxml b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/Modelo.jrxml new file mode 100644 index 000000000..19dd166a7 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/Modelo.jrxml @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <band height="56"> + <frame> + <reportElement mode="Opaque" x="-10" y="-12" width="595" height="40" backcolor="#006699" uuid="0054fd73-707a-4615-8bae-2c2a29f606b3"/> + <textField> + <reportElement x="10" y="10" width="575" height="24" forecolor="#FFFFFF" uuid="558af18f-0344-4d19-b3c8-3ae165b7c91d"/> + <textElement textAlignment="Justified" verticalAlignment="Middle" markup="styled"> + <font fontName="SansSerif" size="18" isBold="true" isPdfEmbedded="true"/> + </textElement> + <textFieldExpression><![CDATA[$P{TITULO}]]></textFieldExpression> + </textField> + </frame> + <textField isStretchWithOverflow="true" isBlankWhenNull="true"> + <reportElement stretchType="RelativeToTallestObject" x="65" y="42" width="510" height="14" forecolor="#333333" uuid="5dd823a7-3377-42a1-8e6f-977270e9bd79"/> + <textFieldExpression><![CDATA[$P{FILTROS}]]></textFieldExpression> + </textField> + <textField> + <reportElement x="65" y="28" width="510" height="14" forecolor="#000000" uuid="0840bea7-0cea-4e77-bb5d-969baeaf8a92"/> + <textElement> + <font size="10" isBold="true"/> + <paragraph lineSpacing="Single"/> + </textElement> + <textFieldExpression><![CDATA[$P{fecInicio} + " à " + $P{fecFinal}]]></textFieldExpression> + </textField> + <textField> + <reportElement x="0" y="28" width="65" height="14" forecolor="#000000" uuid="8fe00f0a-6663-4f7e-9324-666a3dc60f77"/> + <textElement> + <font size="10" isBold="true"/> + <paragraph lineSpacing="Single"/> + </textElement> + <textFieldExpression><![CDATA[$R{header.data}]]></textFieldExpression> + </textField> + <textField> + <reportElement x="0" y="42" width="65" height="14" forecolor="#000000" uuid="a448c17f-6960-4fb3-8a96-c964c5baabf1"/> + <textElement> + <font size="10" isBold="false"/> + <paragraph lineSpacing="Single"/> + </textElement> + <textFieldExpression><![CDATA[$R{header.filtros}]]></textFieldExpression> + </textField> + </band> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAgenciaFechamento.jrxml b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAgenciaFechamento.jrxml index 383f58c75..fe2003bd3 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAgenciaFechamento.jrxml +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAgenciaFechamento.jrxml @@ -80,14 +80,14 @@ - + - + @@ -96,15 +96,18 @@ - + - + - + + + + @@ -125,7 +128,7 @@ - + diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDepositos.jrxml b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDepositos.jrxml index 687835403..54f6162be 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDepositos.jrxml +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDepositos.jrxml @@ -2,7 +2,12 @@ - + + + + + + @@ -75,9 +80,9 @@ - + - + @@ -91,7 +96,7 @@ - + @@ -105,7 +110,7 @@ - + @@ -119,7 +124,7 @@ - + @@ -133,7 +138,7 @@ - + @@ -147,7 +152,7 @@ - + @@ -161,7 +166,7 @@ - + @@ -175,7 +180,7 @@ - + @@ -210,7 +215,7 @@ - + @@ -226,9 +231,9 @@ - + - + @@ -244,7 +249,7 @@ - + @@ -252,7 +257,7 @@ - + @@ -260,7 +265,7 @@ - + @@ -268,15 +273,15 @@ - + - + - + @@ -311,7 +316,7 @@ - + @@ -366,7 +371,7 @@ - + @@ -395,7 +400,7 @@ - + diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDepositosNovo.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDepositosNovo.jasper new file mode 100644 index 0000000000000000000000000000000000000000..db8e371cf0667b2c9ffd025bac4baa6077c46c16 GIT binary patch literal 48146 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 literal 0 HcmV?d00001 diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDepositosNovo.jrxml b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDepositosNovo.jrxml new file mode 100644 index 000000000..87cacb362 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDepositosNovo.jrxml @@ -0,0 +1,562 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <band height="56"> + <frame> + <reportElement mode="Opaque" x="-10" y="-12" width="595" height="40" backcolor="#006699" uuid="0054fd73-707a-4615-8bae-2c2a29f606b3"/> + <textField> + <reportElement x="10" y="10" width="575" height="24" forecolor="#FFFFFF" uuid="558af18f-0344-4d19-b3c8-3ae165b7c91d"/> + <textElement textAlignment="Justified" verticalAlignment="Middle" markup="styled"> + <font fontName="SansSerif" size="18" isBold="true" isPdfEmbedded="true"/> + </textElement> + <textFieldExpression><![CDATA[$P{TITULO}]]></textFieldExpression> + </textField> + </frame> + <textField isStretchWithOverflow="true" isBlankWhenNull="true"> + <reportElement stretchType="RelativeToTallestObject" x="52" y="42" width="523" height="14" forecolor="#333333" uuid="5dd823a7-3377-42a1-8e6f-977270e9bd79"/> + <textFieldExpression><![CDATA[$P{FILTROS}]]></textFieldExpression> + </textField> + <textField> + <reportElement x="52" y="28" width="523" height="14" forecolor="#000000" uuid="0840bea7-0cea-4e77-bb5d-969baeaf8a92"/> + <textElement> + <font size="10" isBold="true"/> + <paragraph lineSpacing="Single"/> + </textElement> + <textFieldExpression><![CDATA[$P{fecInicio} + " à " + $P{fecFinal}]]></textFieldExpression> + </textField> + <textField> + <reportElement x="0" y="28" width="52" height="14" forecolor="#000000" uuid="8fe00f0a-6663-4f7e-9324-666a3dc60f77"/> + <textElement> + <font size="10" isBold="true"/> + <paragraph lineSpacing="Single"/> + </textElement> + <textFieldExpression><![CDATA[$R{header.data}]]></textFieldExpression> + </textField> + <textField> + <reportElement x="0" y="42" width="52" height="14" forecolor="#000000" uuid="a448c17f-6960-4fb3-8a96-c964c5baabf1"/> + <textElement> + <font size="10" isBold="false"/> + <paragraph lineSpacing="Single"/> + </textElement> + <textFieldExpression><![CDATA[$R{header.filtros}]]></textFieldExpression> + </textField> + </band> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/contacorrente/RelatorioDepositosController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/contacorrente/RelatorioDepositosController.java index 7366047ac..450869cbe 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/contacorrente/RelatorioDepositosController.java +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/contacorrente/RelatorioDepositosController.java @@ -6,7 +6,6 @@ import java.util.Map; import javax.sql.DataSource; -import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; @@ -20,6 +19,7 @@ import org.zkoss.zul.api.Datebox; import com.rjconsultores.ventaboletos.entidad.Empresa; import com.rjconsultores.ventaboletos.entidad.PuntoVenta; import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioDepositos; +import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioDepositosNovo; import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; import com.rjconsultores.ventaboletos.utilerias.DateUtil; import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer; @@ -29,7 +29,6 @@ import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer; public class RelatorioDepositosController extends MyGenericForwardComposer { private static final long serialVersionUID = 1L; - private static Logger log = Logger.getLogger(RelatorioDepositosController.class); @Autowired private DataSource dataSourceRead; @@ -44,26 +43,30 @@ public class RelatorioDepositosController extends MyGenericForwardComposer { private void executarRelatorio() throws Exception { Map parametros = new HashMap(); - + StringBuilder filtro = new StringBuilder(); - if (cmbPuntoventa.getSelectedIndex() != -1){ - parametros.put("puntoventaId", ((PuntoVenta)cmbPuntoventa.getSelectedItem().getValue()).getPuntoventaId()); + filtro.append("Empresa: "); + if (cmbEmpresa.getSelectedIndex() != -1){ + Empresa empresa = ((Empresa)cmbEmpresa.getSelectedItem().getValue()); + parametros.put("empresaId", empresa.getEmpresaId()); + filtro.append(empresa.getNombempresa() + ";"); + }else { + filtro.append(" Todas; "); } - if (cmbEmpresa.getSelectedIndex() != -1){ - parametros.put("empresaId", ((Empresa)cmbEmpresa.getSelectedItem().getValue()).getEmpresaId()); + filtro.append("Ponto de Venda: "); + if (cmbPuntoventa.getSelectedIndex() != -1){ + PuntoVenta puntoVenta = ((PuntoVenta)cmbPuntoventa.getSelectedItem().getValue()); + parametros.put("puntoventaId", puntoVenta.getPuntoventaId()); + filtro.append(puntoVenta.getNombpuntoventa() + ";"); + }else { + filtro.append(" Todos; "); } if (chkFiltrarPendentes.isChecked()){ parametros.put("filtrarPendentes", true); } - if (chkClassificarBanco.isChecked()) { - parametros.put("isClassificaPorBanco", true); - }else { - parametros.put("isClassificaPorBanco", false); - } - int dias = DateUtil.diferencaEntreDatasEmdias(this.datInicial.getValue(), this.datFinal.getValue()); // Período maior que 360 dias (1 ano), para não deixar um range de daods muito grande e não "travar" o relatório. if (dias > 360) { @@ -76,9 +79,18 @@ public class RelatorioDepositosController extends MyGenericForwardComposer { parametros.put("fecFinal", sdf.format(this.datFinal.getValue())); parametros.put("TITULO", Labels.getLabel("indexController.mniRelatorioDepositos.label")); + parametros.put("FILTROS", filtro.toString()); - Relatorio relatorio = new RelatorioDepositos(parametros, dataSourceRead.getConnection(), "RelatorioDepositos_subreport"); - + Relatorio relatorio = null; + if (chkClassificarBanco.isChecked()) { + parametros.put("isClassificaPorBanco", true); + relatorio = new RelatorioDepositosNovo(parametros, dataSourceRead.getConnection()); + }else { + parametros.put("isClassificaPorBanco", false); + relatorio = new RelatorioDepositos(parametros, dataSourceRead.getConnection(), "RelatorioDepositos_subreport"); + + } + Map args = new HashMap(); args.put("relatorio", relatorio); @@ -87,14 +99,6 @@ public class RelatorioDepositosController extends MyGenericForwardComposer { } - public void onClick$chkFiltrarPendentes() { - if (chkFiltrarPendentes.isChecked()) { - chkClassificarBanco.setDisabled(false); - } else { - chkClassificarBanco.setChecked(false); - chkClassificarBanco.setDisabled(true); - } - } public void onClick$btnExecutarRelatorio(Event ev) throws Exception { executarRelatorio(); diff --git a/web/gui/relatorios/filtroRelatorioDepositos.zul b/web/gui/relatorios/filtroRelatorioDepositos.zul index 9d2129812..f6c589a90 100644 --- a/web/gui/relatorios/filtroRelatorioDepositos.zul +++ b/web/gui/relatorios/filtroRelatorioDepositos.zul @@ -47,7 +47,7 @@