From e0c95bbdde97b92fbb9c135c08b12c1ca001e232 Mon Sep 17 00:00:00 2001 From: "bruno.neves" Date: Fri, 27 Oct 2017 18:24:03 +0000 Subject: [PATCH] =?UTF-8?q?fixes=20bug=200010007=20-commit=20das=20altera?= =?UTF-8?q?=C3=A7=C3=B5es=20do=20relatorio=20na=20trunk?= 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@75784 d1611594-4594-4d17-8e1d-87c2c4800839 --- .../RelatorioAgenciaFechamentoAntigo.java | 272 ++++++++++ ...torioAgenciaFechamentoAntigo_es.properties | 23 + ...ioAgenciaFechamentoAntigo_pt_BR.properties | 23 + .../RelatorioAgenciaFechamentoAntigo.jasper | Bin 0 -> 51466 bytes .../RelatorioAgenciaFechamentoAntigo.jrxml | 490 ++++++++++++++++++ .../RelatorioAgenciaFechamentoAntigoBean.java | 123 +++++ .../RelatorioAgenciaFechamentoBean.java | 1 + .../RelatorioAgenciaFechamentoController.java | 41 +- web/WEB-INF/i3-label_es_MX.label | 2 +- web/WEB-INF/i3-label_pt_BR.label | 6 +- .../filtroRelatorioAgenciaFechamento.zul | 10 +- 11 files changed, 981 insertions(+), 10 deletions(-) create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAgenciaFechamentoAntigo.java create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioAgenciaFechamentoAntigo_es.properties create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioAgenciaFechamentoAntigo_pt_BR.properties create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAgenciaFechamentoAntigo.jasper create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAgenciaFechamentoAntigo.jrxml create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioAgenciaFechamentoAntigoBean.java diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAgenciaFechamentoAntigo.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAgenciaFechamentoAntigo.java new file mode 100644 index 000000000..43f39192f --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAgenciaFechamentoAntigo.java @@ -0,0 +1,272 @@ +package com.rjconsultores.ventaboletos.relatorios.impl; + +import java.math.BigDecimal; +import java.sql.Connection; +import java.sql.ResultSet; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; + +import org.apache.commons.lang.math.NumberUtils; + +import com.rjconsultores.ventaboletos.relatorios.utilitarios.DataSource; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.RelatorioAgenciaFechamentoAntigoBean; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.RelatorioAgenciaFechamentoBean; +import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement; + +public class RelatorioAgenciaFechamentoAntigo extends Relatorio { + + private List lsDadosRelatorio; + + public RelatorioAgenciaFechamentoAntigo(Map parametros, Connection conexao) throws Exception { + super(parametros, conexao); + + this.setCustomDataSource(new DataSource(this) { + @Override + public void initDados() throws Exception { + + Connection conexao = this.relatorio.getConexao(); + + Map parametros = this.relatorio.getParametros(); + + String fecInicio = parametros.get("fecInicio").toString() + " 00:00:00"; + String fecFinal = parametros.get("fecFinal").toString() + " 23:59:59"; + String empresa = parametros.get("empresa") != null ? parametros.get("empresa").toString() : ""; + String empresaNome = parametros.get("empresaNome") != null ? parametros.get("empresaNome").toString() : ""; + String puntoVenta = parametros.get("NUMPUNTOVENTA") != null ? parametros.get("NUMPUNTOVENTA").toString() : null; + + lsDadosRelatorio = new ArrayList(); + + String sql = carregarDadosTotaisdeVenda(puntoVenta); + + System.out.println(sql); + + NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql); + ResultSet rset1 = null; + ResultSet rset2 = null; + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss"); + + stmt.setTimestamp("de", new java.sql.Timestamp(sdf.parse(fecInicio).getTime())); + stmt.setTimestamp("ate", new java.sql.Timestamp(sdf.parse(fecFinal).getTime())); + + if (empresa != null && !empresa.equals("")) { + stmt.setInt("empresaId", Integer.parseInt(empresa)); + } + + rset1= stmt.executeQuery(); + + while (rset1.next()) { + + RelatorioAgenciaFechamentoAntigoBean agenciaFechamento = new RelatorioAgenciaFechamentoAntigoBean(); + BigDecimal total = BigDecimal.ZERO; + BigDecimal vendido = BigDecimal.ZERO; + + String puntoVentaId = rset1.getString("codigo"); + + Integer qtdevendido = rset1.getInt("qtdevendido"); + Integer qtdedigitado = rset1.getInt("qtdedigitado"); + Integer qtdeAnulado = rset1.getInt("qtdeAnulado"); + Integer qtdeDevolvido = rset1.getInt("qtdeDevolvido"); + Integer qtdeTotal = null; + + vendido = rset1.getBigDecimal("vendido"); + BigDecimal digitado = rset1.getBigDecimal("digitado"); + BigDecimal anulado = rset1.getBigDecimal("anulado"); + BigDecimal devolvido = rset1.getBigDecimal("devolvido"); + + agenciaFechamento.setEmpresa(empresaNome); + + agenciaFechamento.setCodigo(rset1.getString("codigo")); + agenciaFechamento.setDescricao(rset1.getString("descricao")); + + agenciaFechamento.setQtdeVendido(qtdevendido != null ? qtdevendido : NumberUtils.INTEGER_ZERO); + agenciaFechamento.setQtdeDigitado(qtdedigitado != null ? qtdedigitado : NumberUtils.INTEGER_ZERO); + agenciaFechamento.setQtdeAnulado(qtdeAnulado != null ? qtdeAnulado : NumberUtils.INTEGER_ZERO); + agenciaFechamento.setQtdeDevolvido(qtdeDevolvido != null ? qtdeDevolvido : NumberUtils.INTEGER_ZERO); + + qtdeTotal = ((qtdevendido != null ? qtdevendido : NumberUtils.INTEGER_ZERO) + (qtdedigitado != null ? qtdedigitado : NumberUtils.INTEGER_ZERO)) + - ((qtdeAnulado != null ? qtdeAnulado : NumberUtils.INTEGER_ZERO) + (qtdeDevolvido != null ? qtdeDevolvido : NumberUtils.INTEGER_ZERO)); + + if (qtdeTotal < 0) { + qtdeTotal = NumberUtils.INTEGER_ZERO; + } + + agenciaFechamento.setQtdeTotal(qtdeTotal); + + agenciaFechamento.setDigitado(digitado != null ? digitado : BigDecimal.ZERO); + agenciaFechamento.setAnulado(anulado != null ? anulado : BigDecimal.ZERO); + agenciaFechamento.setDevolvido(devolvido != null ? devolvido : BigDecimal.ZERO); + + total = total.add(vendido != null ? vendido : BigDecimal.ZERO); + total = total.add(digitado != null ? digitado : BigDecimal.ZERO); + total = total.subtract(anulado != null ? anulado : BigDecimal.ZERO); + total = total.subtract(devolvido != null ? devolvido : BigDecimal.ZERO); + + stmt = new NamedParameterStatement(conexao, carregarDadosReceitaDespesa(puntoVentaId)); + + System.out.println(carregarDadosReceitaDespesa(puntoVentaId)); + + stmt.setTimestamp("de", new java.sql.Timestamp(sdf.parse(fecInicio).getTime())); + stmt.setTimestamp("ate", new java.sql.Timestamp(sdf.parse(fecFinal).getTime())); + + if (empresa != null && !empresa.equals("")) { + stmt.setInt("empresaId", Integer.parseInt(empresa)); + } + + if (puntoVentaId != null ) { + stmt.setString("puntoVentaId", puntoVentaId); + } + + rset2 = stmt.executeQuery(); + + if (rset2.next()) { + + Integer qtdedespesa = rset2.getInt("qtdedespesa"); + BigDecimal receita = rset2.getBigDecimal("receita"); + BigDecimal despesa = rset2.getBigDecimal("despesa"); + + agenciaFechamento.setQtdeDespesa(qtdedespesa != null ? qtdedespesa : NumberUtils.INTEGER_ZERO); + agenciaFechamento.setReceita(receita != null ? receita : BigDecimal.ZERO); + agenciaFechamento.setDespesa(despesa != null ? despesa : BigDecimal.ZERO); + + total = total.add(receita != null ? receita : BigDecimal.ZERO); + total = total.subtract(despesa != null ? despesa : BigDecimal.ZERO); + + agenciaFechamento.setVendido(vendido != null ? vendido : BigDecimal.ZERO); + agenciaFechamento.setTotal(total.abs()); + + } else { + agenciaFechamento.setQtdeDespesa(NumberUtils.INTEGER_ZERO); + agenciaFechamento.setReceita(BigDecimal.ZERO); + agenciaFechamento.setDespesa(BigDecimal.ZERO); + agenciaFechamento.setVendido(vendido != null ? vendido : BigDecimal.ZERO); + agenciaFechamento.setTotal(total.abs()); + } + + lsDadosRelatorio.add(agenciaFechamento); + //Estava dando um erro de "máximo de cursores abertos excedido" + //Colocado isso o erro parou de ocorrer + rset2.getStatement().close(); + rset2.close(); + } + + if (lsDadosRelatorio.size() > 0) { + + setLsDadosRelatorio(lsDadosRelatorio); + } + + } + }); + } + + public void setLsDadosRelatorio(List lsDadosRelatorio) { + this.setCollectionDataSource(new JRBeanCollectionDataSource(lsDadosRelatorio)); + this.lsDadosRelatorio = lsDadosRelatorio; + } + + @Override + protected void processaParametros() throws Exception { + } + + private String carregarDadosTotaisdeVenda(String puntoVenta) { + + StringBuilder sql = new StringBuilder(); + sql.append(" SELECT "); + sql.append(" pv.PUNTOVENTA_ID AS codigo, "); + sql.append(" pv.nombpuntoventa AS descricao, "); + sql.append(" "); + sql.append(" COALESCE(COUNT(CASE WHEN c.MOTIVOCANCELACION_ID IS NULL and (c.INDREMOTOINVERSO is null or c.INDREMOTOINVERSO =0) THEN c.caja_id ELSE NULL END),0) AS qtdevendido, "); + sql.append(" "); + sql.append(" COALESCE(COUNT(CASE WHEN c.INDREMOTOINVERSO = 1 THEN 1 ELSE NULL END),0) AS qtdedigitado, "); + sql.append(" "); + sql.append(" COALESCE(COUNT(CASE WHEN c.MOTIVOCANCELACION_ID = 31 THEN 1 ELSE NULL END),0) AS qtdeAnulado, "); + sql.append(" COALESCE(COUNT(CASE WHEN c.MOTIVOCANCELACION_ID is not null and c.MOTIVOCANCELACION_ID <> 31 THEN 1 ELSE NULL END),0) AS qtdeDevolvido, "); + sql.append(" "); + sql.append(" COALESCE(SUM(CASE WHEN c.MOTIVOCANCELACION_ID IS NULL and (c.INDREMOTOINVERSO is null or c.INDREMOTOINVERSO =0) THEN ( "); + sql.append(" coalesce(c.IMPORTEOUTROS,0) + coalesce(c.IMPORTEPEDAGIO,0) + coalesce(c.IMPORTESEGURO,0) "); + sql.append(" +coalesce(IMPORTETAXAEMBARQUE ,0)+coalesce(c.preciopagado,0)) ELSE NULL END),0) AS vendido, "); + sql.append(" "); + sql.append(" COALESCE(SUM(CASE WHEN c.MOTIVOCANCELACION_ID IS NULL and c.INDREMOTOINVERSO = 1 THEN ( "); + sql.append(" coalesce(c.IMPORTEOUTROS,0) + coalesce(c.IMPORTEPEDAGIO,0) + coalesce(c.IMPORTESEGURO,0) "); + sql.append(" +coalesce(IMPORTETAXAEMBARQUE ,0)+coalesce(c.preciopagado,0)) ELSE NULL END),0) AS digitado, "); + sql.append(" "); + sql.append(" COALESCE(SUM(CASE WHEN c.MOTIVOCANCELACION_ID = 31 THEN ( "); + sql.append(" coalesce(c.IMPORTEOUTROS,0) + coalesce(c.IMPORTEPEDAGIO,0) + coalesce(c.IMPORTESEGURO,0) "); + sql.append(" +coalesce(IMPORTETAXAEMBARQUE ,0)+coalesce(c.preciopagado,0)) ELSE NULL END),0) AS anulado, "); + sql.append(" "); + sql.append(" COALESCE(SUM(CASE WHEN c.MOTIVOCANCELACION_ID is not null and c.MOTIVOCANCELACION_ID <> 31 THEN ( "); + sql.append(" coalesce(c.IMPORTEOUTROS,0) + coalesce(c.IMPORTEPEDAGIO,0) + coalesce(c.IMPORTESEGURO,0) "); + sql.append(" +coalesce(IMPORTETAXAEMBARQUE ,0)+coalesce(c.preciopagado,0)) ELSE NULL END),0) AS devolvido "); + sql.append(" "); + sql.append(" "); + sql.append(" FROM CAJA c "); + sql.append(" INNER JOIN PUNTO_VENTA pv ON c.PUNTOVENTA_ID = pv.PUNTOVENTA_ID "); + sql.append(" inner join marca m on m.marca_id = c.marca_id "); + sql.append(" WHERE c.TURNO_ID IS NOT NULL "); + sql.append(" AND c.FECCORTE BETWEEN :de AND :ate "); + if (puntoVenta != null && !puntoVenta.equals("-1")) { + sql.append(" AND c.PUNTOVENTA_ID in (" + puntoVenta + ") "); + } + sql.append(" AND c.TIPOVENTA_ID <> 6 "); + sql.append(" AND c.INDREIMPRESION = 0 "); + sql.append(" AND m.empresa_id = :empresaId "); + sql.append(" GROUP BY pv.PUNTOVENTA_ID , pv.nombpuntoventa "); + sql.append(" ORDER BY pv.PUNTOVENTA_ID , pv.nombpuntoventa "); + + return sql.toString(); + + } + + private String carregaAgenciasComVenda() { + + StringBuilder sql = new StringBuilder(); + sql.append(" SELECT DISTINCT cc.PUNTOVENTA_ID "); + sql.append(" FROM CONTA_CORRENTE_PTOVTA cc "); + sql.append(" WHERE cc.FECHOROPERACION BETWEEN :de AND :ate "); + sql.append(" and cc.EMPRESA_ID = :empresaId "); + + return sql.toString(); + + } + + private String carregarDadosReceitaDespesa(String puntoVenta) { + + StringBuilder sql = new StringBuilder(); + sql.append(" SELECT "); + sql.append(" COALESCE(COUNT(CASE WHEN cdp.IMPORTE < 0 THEN 1 ELSE NULL END),0) as qtdedespesa, "); + sql.append(" COALESCE(SUM(CASE WHEN cdp.IMPORTE > 0 THEN cdp.IMPORTE ELSE NULL END),0) AS receita, "); + sql.append(" COALESCE(ABS(SUM(CASE WHEN cdp.IMPORTE < 0 THEN cdp.IMPORTE ELSE NULL END)),0) AS despesa "); + sql.append(" FROM CAJA_DIVERSOS cd, "); + sql.append(" CAJA_DIVERSOS_PAGO cdp, "); + sql.append(" EVENTO_EXTRA ee "); + sql.append(" WHERE cd.MOTIVOCANCELACION_ID IS NULL "); + sql.append(" AND ee.EVENTOEXTRA_ID = cd.EVENTOEXTRA_ID "); + sql.append(" AND cdp.CAJADIVERSOS_ID = cd.CAJADIVERSOS_ID "); + sql.append(" AND ee.activo = 1 "); + sql.append(" AND cd.TURNO_ID IS NOT NULL "); + sql.append(" AND cd.FECCORTE BETWEEN :de AND :ate "); + if (puntoVenta != null && !puntoVenta.equals("-1")) { + sql.append(" AND cd.PUNTOVENTA_ID = :puntoVentaId "); + } + sql.append(" AND ee.EMPRESA_ID=:empresaId "); + + return sql.toString(); + + } + + private String carregarNomeEmpresa() { + + StringBuilder sql = new StringBuilder(); + sql.append(" SELECT "); + sql.append(" NOMBEMPRESA "); + sql.append(" FROM EMPRESA "); + sql.append(" WHERE EMPRESA_ID=:empresaId "); + + return sql.toString(); + + } +} diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioAgenciaFechamentoAntigo_es.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioAgenciaFechamentoAntigo_es.properties new file mode 100644 index 000000000..d57b22ac6 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioAgenciaFechamentoAntigo_es.properties @@ -0,0 +1,23 @@ +#geral +msg.noData=No se pudo obtener datos con los parámetros reportados. +msg.a=a + +#Labels header +header.data=Data : +header.empresa=Empresa : +header.codigo=Código +header.descricao=Descrição +header.vendido=Vendido +header.digitado=Digitado +header.anulado=Anulados +header.devolvido=Devolvidos +header.receita=Receita +header.despesa=Despesa +header.total=Total + +detail.agencia=AGÊNCIA +detail.quantidade=QUANTIDADE +detail.valor=VALOR +detail.totalGeral=TOTAL GERAL + +linhas=Linhas \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioAgenciaFechamentoAntigo_pt_BR.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioAgenciaFechamentoAntigo_pt_BR.properties new file mode 100644 index 000000000..3aa97e55b --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioAgenciaFechamentoAntigo_pt_BR.properties @@ -0,0 +1,23 @@ +#geral +msg.noData=No se pudo obtener datos con los parámetros reportados. +msg.a=a + +#Labels header +header.data=Data : +header.empresa=Empresa : +header.codigo=Código +header.descricao=Descrição +header.vendido=Vendido +header.digitado=Digitado +header.anulado=Anulados +header.devolvido=Devolvidos +header.receita=Receita +header.despesa=Despesa +header.total=Total + +detail.agencia=AGÊNCIA +detail.quantidade=QUANTIDADE +detail.valor=VALOR +detail.totalGeral=TOTAL GERAL + +linhas=Linhas \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAgenciaFechamentoAntigo.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAgenciaFechamentoAntigo.jasper new file mode 100644 index 0000000000000000000000000000000000000000..ecfc27dfc652907376b728160fe5cf88021b3411 GIT binary patch literal 51466 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioAgenciaFechamentoAntigoBean.java b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioAgenciaFechamentoAntigoBean.java new file mode 100644 index 000000000..eb1983c99 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioAgenciaFechamentoAntigoBean.java @@ -0,0 +1,123 @@ +package com.rjconsultores.ventaboletos.relatorios.utilitarios; + +import java.math.BigDecimal; + +public class RelatorioAgenciaFechamentoAntigoBean { + protected String empresa; + protected String codigo; + protected String descricao; + protected Integer qtdeVendido; + protected Integer qtdeDigitado; + protected Integer qtdeAnulado; + protected Integer qtdeDevolvido; + protected Integer qtdeDespesa; + protected Integer qtdeTotal; + + protected BigDecimal vendido; + protected BigDecimal digitado; + protected BigDecimal anulado; + protected BigDecimal devolvido; + protected BigDecimal receita; + protected BigDecimal despesa; + protected BigDecimal total; + + public String getEmpresa() { + return empresa; + } + public void setEmpresa(String empresa) { + this.empresa = empresa; + } + + public String getCodigo() { + return codigo; + } + public void setCodigo(String codigo) { + this.codigo = codigo; + } + public String getDescricao() { + return descricao; + } + public void setDescricao(String descricao) { + this.descricao = descricao; + } + public Integer getQtdeVendido() { + return qtdeVendido; + } + public void setQtdeVendido(Integer qtdeVendido) { + this.qtdeVendido = qtdeVendido; + } + + public Integer getQtdeDigitado() { + return qtdeDigitado; + } + public void setQtdeDigitado(Integer qtdeDigitado) { + this.qtdeDigitado = qtdeDigitado; + } + public Integer getQtdeAnulado() { + return qtdeAnulado; + } + public void setQtdeAnulado(Integer qtdeAnulado) { + this.qtdeAnulado = qtdeAnulado; + } + public Integer getQtdeDevolvido() { + return qtdeDevolvido; + } + public void setQtdeDevolvido(Integer qtdeDevolvido) { + this.qtdeDevolvido = qtdeDevolvido; + } + public Integer getQtdeDespesa() { + return qtdeDespesa; + } + public void setQtdeDespesa(Integer qtdeDespesa) { + this.qtdeDespesa = qtdeDespesa; + } + public BigDecimal getVendido() { + return vendido; + } + public void setVendido(BigDecimal vendido) { + this.vendido = vendido; + } + public BigDecimal getDigitado() { + return digitado; + } + public void setDigitado(BigDecimal digitado) { + this.digitado = digitado; + } + public BigDecimal getAnulado() { + return anulado; + } + public void setAnulado(BigDecimal anulado) { + this.anulado = anulado; + } + public BigDecimal getDevolvido() { + return devolvido; + } + public void setDevolvido(BigDecimal devolvido) { + this.devolvido = devolvido; + } + public BigDecimal getReceita() { + return receita; + } + public void setReceita(BigDecimal receita) { + this.receita = receita; + } + public BigDecimal getDespesa() { + return despesa; + } + public void setDespesa(BigDecimal despesa) { + this.despesa = despesa; + } + public Integer getQtdeTotal() { + return qtdeTotal; + } + public void setQtdeTotal(Integer qtdeTotal) { + this.qtdeTotal = qtdeTotal; + } + public BigDecimal getTotal() { + return total; + } + public void setTotal(BigDecimal total) { + this.total = total; + } + +} diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioAgenciaFechamentoBean.java b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioAgenciaFechamentoBean.java index aa441b7fa..3301abb1c 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioAgenciaFechamentoBean.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioAgenciaFechamentoBean.java @@ -1,3 +1,4 @@ + package com.rjconsultores.ventaboletos.relatorios.utilitarios; import java.math.BigDecimal; diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioAgenciaFechamentoController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioAgenciaFechamentoController.java index a444a67c4..826e16ebc 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioAgenciaFechamentoController.java +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioAgenciaFechamentoController.java @@ -20,10 +20,12 @@ import org.zkoss.zk.ui.event.Event; import org.zkoss.zul.Bandbox; import org.zkoss.zul.Datebox; import org.zkoss.zul.Paging; +import org.zkoss.zul.Radio; import com.rjconsultores.ventaboletos.entidad.Empresa; import com.rjconsultores.ventaboletos.entidad.PuntoVenta; import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioAgenciaFechamento; +import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioAgenciaFechamentoAntigo; import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; import com.rjconsultores.ventaboletos.service.EmpresaService; import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEstandar; @@ -57,12 +59,15 @@ public class RelatorioAgenciaFechamentoController extends MyGenericForwardCompos private MyListbox puntoVentaSelList; private Paging pagingPuntoVenta; + private Radio radLayoutNovo; + private Radio radLayoutAntigo; + private List lsEmpresas; private void executarRelatorio() throws Exception { Map parametros = new HashMap(); - + Boolean booleanLayout = false; Empresa empresa = cmbEmpresa.getSelectedItem() != null ? (Empresa)cmbEmpresa.getSelectedItem().getValue() : null; SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); @@ -92,12 +97,21 @@ public class RelatorioAgenciaFechamentoController extends MyGenericForwardCompos puntoVentas = puntoVentas.substring(0, puntoVentas.length() - 1); parametros.put("NUMPUNTOVENTA", puntoVentaIds); } - - Relatorio relatorio = new RelatorioAgenciaFechamento(parametros, dataSourceRead.getConnection()); - + Relatorio relatorio; Map args = new HashMap(); - args.put("relatorio", relatorio); + if (radLayoutNovo.isChecked()) { + booleanLayout = true; + } + if(booleanLayout) { + relatorio = new RelatorioAgenciaFechamento(parametros, dataSourceRead.getConnection()); + args.put("relatorio", relatorio); + }else { + relatorio = new RelatorioAgenciaFechamentoAntigo(parametros, dataSourceRead.getConnection()); + args.put("relatorio", relatorio); + + } + openWindow("/component/reportView.zul", Labels.getLabel("indexController.mniRelatorioAgenciaFechamento.label"), args, MODAL); @@ -175,4 +189,21 @@ public class RelatorioAgenciaFechamentoController extends MyGenericForwardCompos this.lsEmpresas = lsEmpresas; } + public Radio getRadLayoutNovo() { + return radLayoutNovo; + } + + public void setRadLayoutNovo(Radio radLayoutNovo) { + this.radLayoutNovo = radLayoutNovo; + } + + public Radio getRadLayoutAntigo() { + return radLayoutAntigo; + } + + public void setRadLayoutAntigo(Radio radLayoutAntigo) { + this.radLayoutAntigo = radLayoutAntigo; + } + + } diff --git a/web/WEB-INF/i3-label_es_MX.label b/web/WEB-INF/i3-label_es_MX.label index ed31ddfe8..8aa0d297d 100644 --- a/web/WEB-INF/i3-label_es_MX.label +++ b/web/WEB-INF/i3-label_es_MX.label @@ -1155,7 +1155,7 @@ editarEmpresaController.indgapcancelado.label = Gaps Canceladas editarEmpresaController.indgapdevolvido.label = Gaps Devueltas editarEmpresaController.indeventosfinanceiros.label = Eventos Financieros editarEmpresaController.indocd.label = OCDs -editarEmpresaController.indEmiteCupomFiscalRemarcacao.label = Emite Cupom Fiscal Remarcação +editarEmpresaController.indRemarcacaoTrocaPassagem.label = Utiliza Troca de Passagens para Remarcação #Empresa impuesto editarEmpresaImpostoController.window.title = Configuración de impuesto por empresa/estado diff --git a/web/WEB-INF/i3-label_pt_BR.label b/web/WEB-INF/i3-label_pt_BR.label index 66e317598..c266babfb 100644 --- a/web/WEB-INF/i3-label_pt_BR.label +++ b/web/WEB-INF/i3-label_pt_BR.label @@ -290,7 +290,7 @@ indexController.mniRelatorioEstornoCartao.label=Estorno Cartão indexController.mniRelatorioCancelamentoTransacao.label = Cancelamento J3 indexController.mniRelatorioTabelaPreco.label = Tabela de Preços indexController.mniRelatorioAIDF.label = AIDF -indexController.mniRelatorioAIDFDetalhado.label = Relatório Estoque +indexController.mniRelatorioAIDFDetalhado.label = AIDF Detalhado indexController.mniRelatorioConsultaAntt.label= Consulta ANTT indexController.mniRelatorioSegundaVia.label = Segunda Via indexController.mniPrecoApanhe.label = Preço Apanhe @@ -785,7 +785,7 @@ relatorioAidfController.lbEmpresa.value = Empresa relatorioAidfController.lbSerie.value = Série #Relatorio Aidf Detalhado -relatorioAidfDetalhadoController.window.title = Relatório Estoque +relatorioAidfDetalhadoController.window.title = Relatório Aidf Detalhado relatorioAidfDetalhadoController.datainicial.value = Data Inicial relatorioAidfDetalhadoController.dataFinal.value = Data Final relatorioAidfDetalhadoController.lbEmpresa.value = Empresa @@ -1276,7 +1276,7 @@ editarEmpresaController.indgapcancelado.label = Gaps Canceladas editarEmpresaController.indgapdevolvido.label = Gaps Devolvidas editarEmpresaController.indeventosfinanceiros.label = Eventos Financeiros editarEmpresaController.indocd.label = OCDs -editarEmpresaController.indEmiteCupomFiscalRemarcacao.label = Emite Cupom Fiscal Remarcação +editarEmpresaController.indRemarcacaoTrocaPassagem.label = Utiliza Troca de Passagens para Remarcação #Empresa Imposto editarEmpresaImpostoController.window.title = Configuração de Imposto por Empresa/Estado diff --git a/web/gui/relatorios/filtroRelatorioAgenciaFechamento.zul b/web/gui/relatorios/filtroRelatorioAgenciaFechamento.zul index 86477287e..2b919414f 100644 --- a/web/gui/relatorios/filtroRelatorioAgenciaFechamento.zul +++ b/web/gui/relatorios/filtroRelatorioAgenciaFechamento.zul @@ -7,7 +7,7 @@ @@ -76,6 +76,14 @@ + +