From f2ef5c08aad2ab681d08e6ab75950300fcd4cd2d Mon Sep 17 00:00:00 2001 From: bruno Date: Fri, 21 Jun 2013 14:03:23 +0000 Subject: [PATCH] =?UTF-8?q?-=20Esqueleto=20internacionaliza=C3=A7=C3=A3o?= =?UTF-8?q?=20de=20relat=C3=B3rio=20-=20Ajustes=20relat=C3=B3rio=20de=20re?= =?UTF-8?q?ndimento=20-=20Refactoring?= 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@28084 d1611594-4594-4d17-8e1d-87c2c4800839 --- .../RelatorioAproveitamento_pt_BR.properties | 16 ++ .../parametros/RendimentoParamsImpl.java | 62 ++++--- .../render/RenderRelatorioAbstract.java | 13 +- .../render/RenderRelatorioJasper.java | 22 ++- .../templates/RelatorioAproveitamento.jasper | Bin 45662 -> 47986 bytes .../templates/RelatorioAproveitamento.jrxml | 151 ++++++++++-------- .../relatorios/utilitarios/IParametros.java | 2 +- .../utilitarios/IRenderRelatorio.java | 2 +- .../relatorios/utilitarios/Relatorio.java | 27 ++-- .../web/utilerias/CurrencyUtil.java | 32 ++-- web/WEB-INF/i3-label_pt_BR.label | 11 +- web/component/reportView.zul | 4 +- .../filtroRelatorioAproveitamento.zul | 6 +- 13 files changed, 210 insertions(+), 138 deletions(-) create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioAproveitamento_pt_BR.properties diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioAproveitamento_pt_BR.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioAproveitamento_pt_BR.properties new file mode 100644 index 000000000..813be549a --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioAproveitamento_pt_BR.properties @@ -0,0 +1,16 @@ +#geral +msg.noData=Não foi possivel obter dados com os parâmetros informados. + +#Labels cabeçalho +cabecalho.relatorio=Relatório: +cabecalho.servico=Serviço: +cabecalho.data=Data: + +#Labels header +sumario.totalArrecadado=Total Arrecadado: +sumario.arrecadadoKm=Arrecadado/KM: +sumario.nominalKm=Nominal/KM: +sumario.ocupacao=Ocupação: +sumario.ocupacaoComArrecadacao=Ocupação com Arrecadação: +sumario.ocupacaoSemArrecadacao=Ocupação sem Arrecadação +sumario.totalNominal=Total Nominal: diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/parametros/RendimentoParamsImpl.java b/src/java/com/rjconsultores/ventaboletos/relatorios/parametros/RendimentoParamsImpl.java index ade2fb06b..5bdb2ce1d 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/parametros/RendimentoParamsImpl.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/parametros/RendimentoParamsImpl.java @@ -7,6 +7,7 @@ package com.rjconsultores.ventaboletos.relatorios.parametros; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; +import java.util.Locale; import java.util.Map; import com.rjconsultores.ventaboletos.relatorios.utilitarios.IParametros; import com.rjconsultores.ventaboletos.web.utilerias.CurrencyUtil; @@ -23,7 +24,7 @@ public class RendimentoParamsImpl implements IParametros { * @see com.rjconsultores.ventaboletos.relatorios.utilitarios.IParametros#initParametros() */ @Override - public void initParametros(Map parametros, Connection connection) throws Exception { + public void processaParametros(Map parametros, Connection connection) throws Exception { String sql = this.getSql(); PreparedStatement stmt = null; @@ -35,13 +36,18 @@ public class RendimentoParamsImpl implements IParametros { rset = stmt.executeQuery(); if (rset.next()) { - parametros.put("P_NOMINAL_KM", CurrencyUtil.getCurrencyStrFromStr(rset.getString("NOMINAL_KM"))); - parametros.put("P_TOTAL_ARRECADADO", CurrencyUtil.getCurrencyStrFromStr(rset.getString("TOTAL_ARRECADADO"))); - parametros.put("P_ARRECADO_KM", CurrencyUtil.getCurrencyStrFromStr(rset.getString("ARRECADADO_KM"))); - parametros.put("P_OCUPACAO", rset.getString("OCUPACAO")+" %"); - parametros.put("P_OCUPACAO_ARRECADACAO", rset.getString("OCUPACAO_ARRECADACAO") +" %"); - parametros.put("P_TOTAL_NOMINAL", CurrencyUtil.getCurrencyStrFromStr(rset.getString("TOTAL_NOMINAL"))); - parametros.put("P_OCUPACAO_S_ARRECADACAO", rset.getString("OCUPACAO_S_ARRECADACAO") +" %"); + + // TODO Alterar para injeção de acordo com usuário logado ou outro meio para obter o Locale correto + Locale locale = new Locale("pt", "BR"); + + + 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) ); } } @@ -109,23 +115,29 @@ public class RendimentoParamsImpl implements IParametros { 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(" (SELECT SUM(TF.PRECIO) "); - sql.append(" FROM CORRIDA_TRAMO CT, "); - sql.append(" TRAMO TR, "); - sql.append(" ROL_OPERATIVO RO, "); - sql.append(" DET_DIAGRAMA_AUTOBUS DD, "); - sql.append(" TARIFA TF "); - sql.append(" WHERE "); - 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 TF.TRAMO_ID = CT.TRAMO_ID "); - sql.append(" AND TF.ORIGEN_ID = CT.ORIGEN_ID "); - sql.append(" AND TF.DESTINO_ID = CT.DESTINO_ID "); - sql.append(" AND DD.VENDIBLE = 1 "); - sql.append(" AND CT.ACTIVO = 1) TOTAL_NOMINAL, "); + + 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 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, "); diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/render/RenderRelatorioAbstract.java b/src/java/com/rjconsultores/ventaboletos/relatorios/render/RenderRelatorioAbstract.java index a95901904..5fd231e11 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/render/RenderRelatorioAbstract.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/render/RenderRelatorioAbstract.java @@ -58,7 +58,16 @@ public abstract class RenderRelatorioAbstract implements IRenderRelatorio { public void setParametros(Map parametros) { this.parametros = parametros; - this.parametros.put("NOME_RELATORIO", this.relatorio.getNome()); + } + + public void preRender(){ + this.initParametros(); + } + + public void initParametros(){ + this.parametros.put("NOME_RELATORIO", this.relatorio.getDescricao()); + this.parametros.put("MSG_NO_DATA", this.relatorio.getNome()); + } /* @@ -68,7 +77,7 @@ public abstract class RenderRelatorioAbstract implements IRenderRelatorio { */ @Override public byte[] getConteudo(SaidaRelatorio saida) throws Exception { - + this.preRender(); return this.render(saida); } diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/render/RenderRelatorioJasper.java b/src/java/com/rjconsultores/ventaboletos/relatorios/render/RenderRelatorioJasper.java index d8fd4e8a9..f1f7a3d46 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/render/RenderRelatorioJasper.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/render/RenderRelatorioJasper.java @@ -3,8 +3,11 @@ package com.rjconsultores.ventaboletos.relatorios.render; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.sql.Connection; +import java.util.Locale; +import java.util.ResourceBundle; import net.sf.jasperreports.engine.JRDataSource; +import net.sf.jasperreports.engine.JRParameter; import net.sf.jasperreports.engine.JasperExportManager; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; @@ -53,6 +56,21 @@ public class RenderRelatorioJasper extends RenderRelatorioAbstract { throw new Exception("Este relatório esta configurado para utilizar uma conexão direta com banco de dados, utilize o construtor com a passagem de parametros correta."); } + + @Override + public void preRender(){ + super.preRender(); + this.initBundler(); + + } + + private void initBundler(){ + // TODO Alterar para injeção de acordo com usuário logado ou outro meio para obter o Locale correto + Locale locale = new Locale("pt", "BR"); + ResourceBundle resource = ResourceBundle.getBundle("com.rjconsultores.ventaboletos.relatorios.internacionalizacao."+this.relatorio.getNome(), locale); + + this.parametros.put(JRParameter.REPORT_RESOURCE_BUNDLE, resource); + } /* * (non-Javadoc) @@ -66,9 +84,9 @@ public class RenderRelatorioJasper extends RenderRelatorioAbstract { if (this.jasperPrint == null) { if (this.relatorio.getParametros() != null) - this.relatorio.getParametros().initParametros(this.parametros, this.connection); + this.relatorio.getParametros().processaParametros(this.parametros, this.connection); - InputStream iStemplate = this.getClass().getResourceAsStream("/com/rjconsultores/ventaboletos/relatorios/templates/" + this.relatorio.getTemplate()); + InputStream iStemplate = this.getClass().getResourceAsStream("/com/rjconsultores/ventaboletos/relatorios/templates/" + this.relatorio.getNome()+".jasper"); if (this.relatorio.getDatasource() != null) this.jasperPrint = JasperFillManager.fillReport(iStemplate, this.getParametros(), (JRDataSource) this.datasource); diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamento.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamento.jasper index 2a899db913ca2d265735b748bb116f40aa05eaa1..c566556f63f0cf9a5a76c60c0453b01481992953 100644 GIT binary patch literal 47986 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 literal 45662 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 diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamento.jrxml b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamento.jrxml index 22e6b961f..598ed8583 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamento.jrxml +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamento.jrxml @@ -1,5 +1,5 @@ - + @@ -95,20 +95,13 @@ ORDER BY VT.NUMSECUENCIA, TO_NUMBER(DD.ASIENTO)]]> - <band height="85" splitType="Stretch"> + <band height="84" splitType="Stretch"> <rectangle> <reportElement uuid="8f226d21-ccdb-41b4-a01d-fb0712f0b4d3" x="0" y="0" width="555" height="30"/> </rectangle> <rectangle> <reportElement uuid="b6aa9717-79c4-4f13-91df-9b0255003a16" x="0" y="40" width="555" height="39"/> </rectangle> - <staticText> - <reportElement uuid="2e854857-9e82-43ae-bc7b-232319c1f259" x="12" y="0" width="65" height="15"/> - <textElement> - <font size="11" isBold="true"/> - </textElement> - <text><![CDATA[Relatório: ]]></text> - </staticText> <textField> <reportElement uuid="eb300dc6-1610-409d-8589-72b1539f86d3" x="77" y="0" width="478" height="15"/> <textElement> @@ -116,20 +109,20 @@ ORDER BY VT.NUMSECUENCIA, TO_NUMBER(DD.ASIENTO)]]> </textElement> <textFieldExpression><![CDATA[$P{NOME_RELATORIO}]]></textFieldExpression> </textField> - <staticText> - <reportElement uuid="b76b0e17-99b2-4681-8f60-b5bd5512e897" x="12" y="15" width="65" height="15"/> - <textElement> + <textField> + <reportElement uuid="a125ac5c-e00c-4ac5-bc03-317c514f1ad8" x="12" y="15" width="65" height="15"/> + <textElement markup="none"> <font size="11" isBold="true"/> </textElement> - <text><![CDATA[Serviço: ]]></text> - </staticText> - <staticText> - <reportElement uuid="bd889fb9-30d9-4023-b811-7f55e3213705" x="244" y="15" width="65" height="15"/> - <textElement> + <textFieldExpression><![CDATA[$R{cabecalho.servico}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="88bb80e0-40a4-490c-914a-01a41178168b" x="244" y="15" width="65" height="15"/> + <textElement markup="none"> <font size="11" isBold="true"/> </textElement> - <text><![CDATA[Data:]]></text> - </staticText> + <textFieldExpression><![CDATA[$R{cabecalho.data}]]></textFieldExpression> + </textField> <textField> <reportElement uuid="a3d3c093-a9f4-4b32-823f-b4f548e46c2f" x="77" y="15" width="167" height="15"/> <textElement> @@ -137,55 +130,55 @@ ORDER BY VT.NUMSECUENCIA, TO_NUMBER(DD.ASIENTO)]]> </textElement> <textFieldExpression><![CDATA[$P{CORRIDA_ID}]]></textFieldExpression> </textField> - <staticText> - <reportElement uuid="021e9662-43c5-4054-a0d2-3fc8f6003111" x="12" y="40" width="78" height="11"/> - <textElement> + <textField> + <reportElement uuid="995111bb-4726-421b-a538-db8b53b3f206" x="12" y="40" width="78" height="11"/> + <textElement markup="none"> <font size="8"/> </textElement> - <text><![CDATA[Total Arrecadado:]]></text> - </staticText> - <staticText> - <reportElement uuid="062b6b12-00e3-4389-8359-bf59b8879b4d" x="12" y="51" width="78" height="11"/> - <textElement> + <textFieldExpression><![CDATA[$R{sumario.totalArrecadado}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="3a0c6793-e57f-44c7-8588-1692055bf62a" x="12" y="51" width="78" height="11"/> + <textElement markup="none"> <font size="8"/> </textElement> - <text><![CDATA[Arrecadado/KM:]]></text> - </staticText> - <staticText> - <reportElement uuid="f2b94d48-f3b5-4781-ac11-ff28a41e0d90" x="197" y="40" width="105" height="11"/> - <textElement> + <textFieldExpression><![CDATA[$R{sumario.arrecadadoKm}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="a0ec9db5-a7be-4407-b257-e49dd7fe6811" x="197" y="40" width="105" height="11"/> + <textElement markup="none"> <font size="8"/> </textElement> - <text><![CDATA[Ocupação:]]></text> - </staticText> - <staticText> - <reportElement uuid="58deb635-5e71-4614-b71e-d81d5dad85f0" x="197" y="51" width="105" height="11"/> - <textElement> + <textFieldExpression><![CDATA[$R{sumario.ocupacao}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="0325af45-b23b-45ba-a8c6-dea75a36bb75" x="197" y="51" width="105" height="11"/> + <textElement markup="none"> <font size="8"/> </textElement> - <text><![CDATA[Ocupação com Arrecação:]]></text> - </staticText> - <staticText> - <reportElement uuid="eec1daa6-74c5-49bf-855f-602d5230dfa1" x="12" y="63" width="78" height="11"/> - <textElement> + <textFieldExpression><![CDATA[$R{sumario.ocupacaoComArrecadacao}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="bec7dafe-b775-495d-8233-301b351597ac" x="12" y="63" width="78" height="11"/> + <textElement markup="none"> <font size="8"/> </textElement> - <text><![CDATA[Nominal/KM:]]></text> - </staticText> - <staticText> - <reportElement uuid="ccaffa74-0602-4168-b191-ba02c523221f" x="197" y="63" width="105" height="11"/> - <textElement> + <textFieldExpression><![CDATA[$R{sumario.nominalKm}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="fcaa51c2-2057-4aa4-bb84-adae3ef5c34e" x="197" y="63" width="105" height="11"/> + <textElement markup="none"> <font size="8"/> </textElement> - <text><![CDATA[Ocupação sem Arrecação:]]></text> - </staticText> - <staticText> - <reportElement uuid="12cf983e-3909-4cf6-94d8-dfc008edc47d" x="382" y="40" width="78" height="11"/> - <textElement> + <textFieldExpression><![CDATA[$R{sumario.ocupacaoSemArrecadacao}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="5cc7b439-0a60-4581-a67c-83519a4fd977" x="382" y="40" width="78" height="11"/> + <textElement markup="none"> <font size="8"/> </textElement> - <text><![CDATA[Total Nominal:]]></text> - </staticText> + <textFieldExpression><![CDATA[$R{sumario.totalNominal}]]></textFieldExpression> + </textField> <line> <reportElement uuid="5b56b7a4-1abd-43cc-8071-e949d5575a45" x="185" y="40" width="1" height="39" forecolor="#CCCCCC"/> </line> @@ -193,50 +186,50 @@ ORDER BY VT.NUMSECUENCIA, TO_NUMBER(DD.ASIENTO)]]> <reportElement uuid="98b93926-7900-4445-bbe6-024e456fd45e" x="370" y="40" width="1" height="39" forecolor="#CCCCCC"/> </line> <textField> - <reportElement uuid="bdfd7f9e-e50e-4a8b-bba4-2fc8a909f38b" x="90" y="63" width="78" height="11"/> - <textElement> + <reportElement uuid="bdfd7f9e-e50e-4a8b-bba4-2fc8a909f38b" x="90" y="63" width="85" height="11"/> + <textElement textAlignment="Right"> <font size="8"/> </textElement> <textFieldExpression><![CDATA[$P{P_NOMINAL_KM}]]></textFieldExpression> </textField> <textField> - <reportElement uuid="7eb2d8d3-4a3f-40cd-8117-8e53ab128f34" x="90" y="40" width="96" height="11"/> - <textElement> + <reportElement uuid="7eb2d8d3-4a3f-40cd-8117-8e53ab128f34" x="90" y="40" width="85" height="11"/> + <textElement textAlignment="Right"> <font size="8"/> </textElement> <textFieldExpression><![CDATA[$P{P_TOTAL_ARRECADADO}]]></textFieldExpression> </textField> <textField> - <reportElement uuid="64600377-6028-4c56-b0f1-3acf6ceeb708" x="90" y="51" width="95" height="11"/> - <textElement> + <reportElement uuid="64600377-6028-4c56-b0f1-3acf6ceeb708" x="90" y="51" width="85" height="11"/> + <textElement textAlignment="Right"> <font size="8"/> </textElement> <textFieldExpression><![CDATA[$P{P_ARRECADO_KM}]]></textFieldExpression> </textField> <textField> - <reportElement uuid="6b68d2b4-0fa0-41a4-bdf5-0eaccb7d1f59" x="302" y="40" width="100" height="11"/> - <textElement> + <reportElement uuid="6b68d2b4-0fa0-41a4-bdf5-0eaccb7d1f59" x="302" y="40" width="58" height="11"/> + <textElement textAlignment="Right"> <font size="8"/> </textElement> <textFieldExpression><![CDATA[$P{P_OCUPACAO}]]></textFieldExpression> </textField> <textField> - <reportElement uuid="66317ebd-e503-420c-8886-8385b782770d" x="302" y="51" width="69" height="11"/> - <textElement> + <reportElement uuid="66317ebd-e503-420c-8886-8385b782770d" x="302" y="51" width="58" height="11"/> + <textElement textAlignment="Right"> <font size="8"/> </textElement> <textFieldExpression><![CDATA[$P{P_OCUPACAO_ARRECADACAO}]]></textFieldExpression> </textField> <textField> - <reportElement uuid="a6ff7221-60b5-4d08-b7e8-7b10db0b97a6" x="302" y="63" width="68" height="11"/> - <textElement> + <reportElement uuid="a6ff7221-60b5-4d08-b7e8-7b10db0b97a6" x="302" y="63" width="58" height="11"/> + <textElement textAlignment="Right"> <font size="8"/> </textElement> <textFieldExpression><![CDATA[$P{P_OCUPACAO_S_ARRECADACAO}]]></textFieldExpression> </textField> <textField> - <reportElement uuid="9eebfdd7-504b-4e98-8893-63bdb8c02b54" x="468" y="40" width="87" height="11"/> - <textElement> + <reportElement uuid="9eebfdd7-504b-4e98-8893-63bdb8c02b54" x="468" y="40" width="74" height="11"/> + <textElement textAlignment="Right"> <font size="8"/> </textElement> <textFieldExpression><![CDATA[$P{P_TOTAL_NOMINAL}]]></textFieldExpression> @@ -246,12 +239,19 @@ ORDER BY VT.NUMSECUENCIA, TO_NUMBER(DD.ASIENTO)]]> <textElement/> <textFieldExpression><![CDATA[$P{DATA}]]></textFieldExpression> </textField> + <textField> + <reportElement uuid="11a895de-bf79-45dc-8d47-ea6ef8bf562c" x="12" y="0" width="65" height="15"/> + <textElement> + <font size="11" isBold="true"/> + </textElement> + <textFieldExpression><![CDATA[$R{cabecalho.relatorio}]]></textFieldExpression> + </textField> </band> - + - + @@ -385,4 +385,15 @@ ORDER BY VT.NUMSECUENCIA, TO_NUMBER(DD.ASIENTO)]]> + + + + + + + + + + + diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/IParametros.java b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/IParametros.java index fced7e5f7..91cbea577 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/IParametros.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/IParametros.java @@ -20,6 +20,6 @@ public interface IParametros { * @param connection * @throws Exception */ - void initParametros(Map parametros, Connection connection) throws Exception; + void processaParametros(Map parametros, Connection connection) throws Exception; } diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/IRenderRelatorio.java b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/IRenderRelatorio.java index 1f5b18db1..8902b65ce 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/IRenderRelatorio.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/IRenderRelatorio.java @@ -19,5 +19,5 @@ public interface IRenderRelatorio { */ public byte[] getConteudo(SaidaRelatorio saida) throws Exception; - + } \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/Relatorio.java b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/Relatorio.java index 298b9c892..f56f26e5c 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/Relatorio.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/Relatorio.java @@ -19,13 +19,13 @@ import com.rjconsultores.ventaboletos.relatorios.parametros.*; */ public enum Relatorio { - RELATORIO_APROVEITAMENTO(1, "RelatorioAproveitamento.jasper", "Relatório de Aproveitamento",new RendimentoParamsImpl(), null), - RELATORIO_SERVICOS(2, "Servicos.jasper", "Relatório de Serviços", null, new Vendas2CustomDS()), - RELATORIO_EXEMPLO(3, "ExemploFoo.jrxml", "Relatório Foo", null, null); + RELATORIO_APROVEITAMENTO(1, "RelatorioAproveitamento", "Relatório de Aproveitamento",new RendimentoParamsImpl(), null), + RELATORIO_SERVICOS(2, "Servicosr", "Relatório de Serviços", null, new Vendas2CustomDS()), + RELATORIO_EXEMPLO(3, "ExemploFoo", "Relatório Foo", null, null); private int codigo; - private String template; private String nome; + private String descricao; protected IDataSource datasource; private IParametros parametros; @@ -41,9 +41,9 @@ public enum Relatorio { * @param datasource * Custom Data Source do relátorio, só deve ser informado caso o relátorio não possua acesso direto ao banco */ - private Relatorio(int codigo, String template, String nome, IParametros parametros, IDataSource datasource) { + private Relatorio(int codigo, String nome, String descricao, IParametros parametros, IDataSource datasource) { this.codigo = codigo; - this.setTemplate(template); + this.setDescricao(descricao); this.setNome(nome); this.datasource = datasource; this.parametros = parametros; @@ -63,13 +63,6 @@ public enum Relatorio { } } - public String getTemplate() { - return template; - } - - public void setTemplate(String template) { - this.template = template; - } public String getNome() { return nome; @@ -94,4 +87,12 @@ public enum Relatorio { public void setParametros(IParametros parametros) { this.parametros = parametros; } + + public String getDescricao() { + return descricao; + } + + public void setDescricao(String descricao) { + this.descricao = descricao; + } } \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/CurrencyUtil.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/CurrencyUtil.java index 8cce24545..7b2762fe6 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/utilerias/CurrencyUtil.java +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/CurrencyUtil.java @@ -3,28 +3,30 @@ */ package com.rjconsultores.ventaboletos.web.utilerias; -import java.text.DecimalFormat; -import java.util.Currency; +import java.text.NumberFormat; +import java.util.Locale; /** * @author Bruno H. G. Gouvêa - * + * */ public final class CurrencyUtil { + + public static String getCurrencyStrFromStr(String value, Locale locale) { + + NumberFormat moedaFormat = + NumberFormat.getCurrencyInstance(locale); + return moedaFormat.format(Double.parseDouble(value)); + + } - - public static String getCurrencyStrFromStr(String value){ - - - double doubleValue = Double.parseDouble(value); - Currency currency = Currency.getInstance("BRL"); - DecimalFormat formato = new DecimalFormat(currency.getSymbol() + "#,##0.00"); - - - - - return formato.format(doubleValue); + public static String getPercentStrFromStr(String value, Locale locale) { + + NumberFormat percentFormat = NumberFormat.getPercentInstance(locale); + percentFormat.setMinimumFractionDigits(2); + return percentFormat.format(Double.parseDouble(value)); + } } diff --git a/web/WEB-INF/i3-label_pt_BR.label b/web/WEB-INF/i3-label_pt_BR.label index 7c316a7ef..c606d4b57 100644 --- a/web/WEB-INF/i3-label_pt_BR.label +++ b/web/WEB-INF/i3-label_pt_BR.label @@ -56,10 +56,13 @@ MSG.necesita.formaPago = Forma de Pagamento Obrigatória lb.id = ID lb.dec = Descrição lb.Equivalencia = Equivalencia -lb.btnExecutarRelatorio = Executar Relatório -lb.btnSalvarRelatorio = Salvar Relatório -lb.btnSalvarRelatorioPdf = Salvar Relatório em PDF -lb.btnSalvarRelatorioXls = Salvar Relatório em XLS + +# Relatório +relatorio.lb.btnExecutarRelatorio = Executar Relatório +relatorio.lb.btnSalvarRelatorio = Salvar Relatório +relatorio.lb.btnSalvarRelatorioPdf = Salvar Relatório em PDF +relatorio.lb.btnSalvarRelatorioXls = Salvar Relatório em XLS +relatorio.parametro.msgNoData = Não foi possivel obter dados com os parâmetros informados. # tooltip botões diff --git a/web/component/reportView.zul b/web/component/reportView.zul index f790eeea6..341334c61 100644 --- a/web/component/reportView.zul +++ b/web/component/reportView.zul @@ -11,10 +11,10 @@
+ tooltiptext="${c:l('relatorio.lb.btnSalvarRelatorioPdf')}" /> + tooltiptext="${c:l('relatorio.lb.btnSalvarRelatorioXls')}" /> diff --git a/web/gui/relatorios/filtroRelatorioAproveitamento.zul b/web/gui/relatorios/filtroRelatorioAproveitamento.zul index 403a4b035..a22c450d5 100644 --- a/web/gui/relatorios/filtroRelatorioAproveitamento.zul +++ b/web/gui/relatorios/filtroRelatorioAproveitamento.zul @@ -15,17 +15,17 @@