From c447cce9161de94ce30e544a95d8612d67669e77 Mon Sep 17 00:00:00 2001 From: "fabricio.oliveira" Date: Wed, 12 Sep 2018 20:53:13 +0000 Subject: [PATCH] =?UTF-8?q?0010932:=20Espec03=20-=20Relat=C3=B3rio=20Baixa?= =?UTF-8?q?=20Vendas=20Internet=20fixes=20bug#10932=20dev:Daniel=20Zauli?= =?UTF-8?q?=20qua:Wallysson?= 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@85303 d1611594-4594-4d17-8e1d-87c2c4800839 --- .../impl/RelatorioBaixasVendasInternet.java | 62 ++++--- ...elatorioBaixasVendasInternetSintetico.java | 85 ++++++++++ ...aixasVendasInternetSintetico_es.properties | 24 +++ ...asVendasInternetSintetico_pt_BR.properties | 26 +++ ...elatorioBaixasVendasInternet_es.properties | 4 +- ...torioBaixasVendasInternet_pt_BR.properties | 4 +- .../RelatorioBaixasVendasInternet.jasper | Bin 30980 -> 34652 bytes .../RelatorioBaixasVendasInternet.jrxml | 92 +++++++---- ...atorioBaixasVendasInternetSintetico.jasper | Bin 0 -> 30104 bytes ...latorioBaixasVendasInternetSintetico.jrxml | 152 ++++++++++++++++++ .../RelatorioBaixasVendasInternetBean.java | 11 ++ ...orioBaixasVendasInternetSinteticoBean.java | 44 +++++ ...latorioBaixasVendasInternetController.java | 22 ++- web/WEB-INF/i3-label_es_MX.label | 8 + web/WEB-INF/i3-label_pt_BR.label | 2 + 15 files changed, 472 insertions(+), 64 deletions(-) create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioBaixasVendasInternetSintetico.java create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioBaixasVendasInternetSintetico_es.properties create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioBaixasVendasInternetSintetico_pt_BR.properties create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioBaixasVendasInternetSintetico.jasper create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioBaixasVendasInternetSintetico.jrxml create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioBaixasVendasInternetSinteticoBean.java diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioBaixasVendasInternet.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioBaixasVendasInternet.java index 4a36ff0aa..271ae09aa 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioBaixasVendasInternet.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioBaixasVendasInternet.java @@ -17,7 +17,7 @@ import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement; import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; public class RelatorioBaixasVendasInternet extends Relatorio { - + private Date fecInicio; private Date fecFinal; private PuntoVenta puntoVenta; @@ -33,22 +33,24 @@ public class RelatorioBaixasVendasInternet extends Relatorio { protected void processaParametros() throws Exception { NamedParameterStatement namedParameterStatement = new NamedParameterStatement(getConexao(), getSql()); - - namedParameterStatement.setInt("puntoVentaId", puntoVenta.getPuntoventaId()); - this.parametros.put("nombPuntoVenta", puntoVenta.getNombpuntoventa()); - + + if (puntoVenta != null && puntoVenta.getPuntoventaId() != null && puntoVenta.getPuntoventaId() != -1) { + namedParameterStatement.setInt("puntoVentaId", puntoVenta.getPuntoventaId()); + this.parametros.put("nombPuntoVenta", puntoVenta.getNombpuntoventa()); + } + SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); this.parametros.put("fecInicio", dateFormat.format(fecInicio)); this.parametros.put("fecFinal", dateFormat.format(fecFinal)); namedParameterStatement.setDate("fecInicio", new java.sql.Date(fecInicio.getTime())); namedParameterStatement.setDate("fecFinal", new java.sql.Date(fecFinal.getTime())); - + ResultSet resultSet = namedParameterStatement.executeQuery(); List resultBean = transformResultSet(resultSet); setCollectionDataSource(new JRBeanCollectionDataSource(resultBean)); - + } - + private List transformResultSet(ResultSet resultSet) throws SQLException { List resultBean = new ArrayList(); while (resultSet.next()) { @@ -60,27 +62,45 @@ public class RelatorioBaixasVendasInternet extends Relatorio { bean.setValor(resultSet.getBigDecimal("VALOR")); bean.setUsuarioId(resultSet.getInt("USUARIO_ID")); bean.setNombUsuario(resultSet.getString("NOMBUSUARIO")); + bean.setValorPago(resultSet.getBigDecimal("VALOR_PAGO")); resultBean.add(bean); } return resultBean; } private String getSql() { - - String sql = "SELECT DISTINCT B.FECCREACION, B.NUMFOLIOSISTEMA, " - + "U.USUARIO_ID, U.NOMBUSUARIO, O.DESCPARADA ORIGEN, D.DESCPARADA DESTINO, " - + "COALESCE((B.PRECIOPAGADO + B.IMPORTETAXAEMBARQUE + B.IMPORTESEGURO + B.IMPORTEPEDAGIO + B.IMPORTEOUTROS), 0) AS VALOR " - + "FROM BOLETO B " - + "JOIN PARADA O ON B.ORIGEN_ID = O.PARADA_ID " - + "JOIN PARADA D ON B.DESTINO_ID = D.PARADA_ID " - + "JOIN USUARIO U ON B.USUARIO_ID = U.USUARIO_ID " - + "WHERE B.INDSTATUSBOLETO = 'E' " - + "AND B.FECCREACION BETWEEN :fecInicio AND :fecFinal " - + "AND PUNTOVENTA_ID = :puntoVentaId " - + "ORDER BY U.USUARIO_ID "; + + String sql = ""; + + if (puntoVenta != null && puntoVenta.getPuntoventaId() != null && puntoVenta.getPuntoventaId() != -1) { + sql = "SELECT DISTINCT B.FECCREACION, B.NUMFOLIOSISTEMA, " + + "U.USUARIO_ID, U.NOMBUSUARIO, O.DESCPARADA ORIGEN, D.DESCPARADA DESTINO, " + + "COALESCE(COALESCE(B.PRECIOPAGADO, 0) + COALESCE(B.IMPORTETAXAEMBARQUE, 0) + COALESCE(B.IMPORTESEGURO, 0) + COALESCE(B.IMPORTEPEDAGIO, 0) + COALESCE(B.IMPORTEOUTROS, 0), 0) AS VALOR, " + + "B.PRECIOPAGADO as VALOR_PAGO " + + "FROM BOLETO B " + + "JOIN PARADA O ON B.ORIGEN_ID = O.PARADA_ID " + + "JOIN PARADA D ON B.DESTINO_ID = D.PARADA_ID " + + "JOIN USUARIO U ON B.USUARIO_ID = U.USUARIO_ID " + + "WHERE B.INDSTATUSBOLETO = 'E' " + + "AND B.FECCREACION BETWEEN :fecInicio AND :fecFinal " + + "AND PUNTOVENTA_ID = :puntoVentaId " + + "ORDER BY U.USUARIO_ID "; + } else { + sql = "SELECT DISTINCT B.FECCREACION, B.NUMFOLIOSISTEMA, " + + "U.USUARIO_ID, U.NOMBUSUARIO, O.DESCPARADA ORIGEN, D.DESCPARADA DESTINO, " + + "COALESCE(COALESCE(B.PRECIOPAGADO, 0) + COALESCE(B.IMPORTETAXAEMBARQUE, 0) + COALESCE(B.IMPORTESEGURO, 0) + COALESCE(B.IMPORTEPEDAGIO, 0) + COALESCE(B.IMPORTEOUTROS, 0), 0) AS VALOR, " + + "B.PRECIOPAGADO as VALOR_PAGO " + + "FROM BOLETO B " + + "JOIN PARADA O ON B.ORIGEN_ID = O.PARADA_ID " + + "JOIN PARADA D ON B.DESTINO_ID = D.PARADA_ID " + + "JOIN USUARIO U ON B.USUARIO_ID = U.USUARIO_ID " + + "WHERE B.INDSTATUSBOLETO = 'E' " + + "AND B.FECCREACION BETWEEN :fecInicio AND :fecFinal " + + "ORDER BY U.USUARIO_ID "; + } return sql; - + } } \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioBaixasVendasInternetSintetico.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioBaixasVendasInternetSintetico.java new file mode 100644 index 000000000..bb8c9ee3b --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioBaixasVendasInternetSintetico.java @@ -0,0 +1,85 @@ +package com.rjconsultores.ventaboletos.relatorios.impl; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; + +import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.RelatorioBaixasVendasInternetSinteticoBean; +import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement; + +import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; + +public class RelatorioBaixasVendasInternetSintetico extends Relatorio { + + private Date fecInicio; + private Date fecFinal; + + public RelatorioBaixasVendasInternetSintetico(Connection conexao, Date fecInicio, Date fecFinal) { + super(new HashMap(), conexao); + this.fecInicio = fecInicio; + this.fecFinal = fecFinal; + } + + @Override + protected void processaParametros() throws Exception { + + NamedParameterStatement namedParameterStatement = new NamedParameterStatement(getConexao(), getSql()); + + SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); + this.parametros.put("fecInicio", dateFormat.format(fecInicio)); + this.parametros.put("fecFinal", dateFormat.format(fecFinal)); + namedParameterStatement.setDate("fecInicio", new java.sql.Date(fecInicio.getTime())); + namedParameterStatement.setDate("fecFinal", new java.sql.Date(fecFinal.getTime())); + + ResultSet resultSet = namedParameterStatement.executeQuery(); + List resultBean = transformResultSet(resultSet); + setCollectionDataSource(new JRBeanCollectionDataSource(resultBean)); + + } + + private List transformResultSet(ResultSet resultSet) throws SQLException { + List resultBean = new ArrayList(); + while (resultSet.next()) { + RelatorioBaixasVendasInternetSinteticoBean bean = new RelatorioBaixasVendasInternetSinteticoBean(); + bean.setPuntoventaId(resultSet.getInt("PUNTOVENTA_ID")); + bean.setQtdPassagens(resultSet.getInt("QTD_PASSAGENS")); + bean.setNombPuntoventa(resultSet.getString("NOMBPUNTOVENTA")); + bean.setValor(resultSet.getBigDecimal("VALOR")); + bean.setValorPago(resultSet.getBigDecimal("VALOR_PAGO")); + resultBean.add(bean); + } + return resultBean; + } + + private String getSql() { + + String sql = ""; + + sql = "SELECT DISTINCT B.PUNTOVENTA_ID, PV.NOMBPUNTOVENTA, " + + "COUNT(*) as QTD_PASSAGENS, " + + "SUM(B.PRECIOPAGADO) AS VALOR_PAGO, " + + "SUM(COALESCE((COALESCE(B.PRECIOPAGADO, 0) + COALESCE(B.IMPORTETAXAEMBARQUE, 0) + COALESCE(B.IMPORTESEGURO, 0) + COALESCE(B.IMPORTEPEDAGIO, 0) + COALESCE(B.IMPORTEOUTROS, 0)), 0)) AS VALOR " + + "FROM BOLETO B " + + "JOIN PARADA O " + + "ON B.ORIGEN_ID = O.PARADA_ID " + + "JOIN PARADA D " + + "ON B.DESTINO_ID = D.PARADA_ID " + + "JOIN USUARIO U " + + "ON B.USUARIO_ID = U.USUARIO_ID " + + "JOIN PUNTO_VENTA PV " + + "ON B.PUNTOVENTA_ID = PV.PUNTOVENTA_ID " + + "WHERE B.INDSTATUSBOLETO = 'E' " + + "AND B.FECCREACION BETWEEN :fecInicio AND :fecFinal " + + "GROUP BY B.PUNTOVENTA_ID, PV.NOMBPUNTOVENTA "; + + return sql; + + } + +} \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioBaixasVendasInternetSintetico_es.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioBaixasVendasInternetSintetico_es.properties new file mode 100644 index 000000000..134963e75 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioBaixasVendasInternetSintetico_es.properties @@ -0,0 +1,24 @@ +#geral +msg.noData=Não foi possivel obter dados com os parâmetros informados. + +#Labels cabeçalho +cabecalho.nome=Relatório Vendas para Comissão +cabecalho.relatorio=Relatório: +cabecalho.periodo=Período: +cabecalho.periodoA=à +cabecalho.dataHora=Data/Hora: +cabecalho.impressorPor=Impressor por: +cabecalho.pagina=Página +cabecalho.de=de +cabecalho.filtros=Filtros: +cabecalho.usuario=Usuário: + +label.nombPuntoVenta=Punto Venta +label.fecImpresion=Data da Impressão +label.numFolioSistema=Número Folio +label.origen=Origen +label.destino=Destino +label.valor=Valor del Folio +label.total=Total +label.valorPago=Precios +label.totalPassagens=Total Pasajes \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioBaixasVendasInternetSintetico_pt_BR.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioBaixasVendasInternetSintetico_pt_BR.properties new file mode 100644 index 000000000..00b980e2c --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioBaixasVendasInternetSintetico_pt_BR.properties @@ -0,0 +1,26 @@ +#geral +msg.noData=Não foi possivel obter dados com os parâmetros informados. + +#Labels cabeçalho +cabecalho.nome=Relatório de Baixas Vendas Internet Sintético +cabecalho.relatorio=Relatório: +cabecalho.periodo=Período: +cabecalho.periodoA=à +cabecalho.dataHora=Data/Hora: +cabecalho.impressorPor=Impressor por: +cabecalho.pagina=Página +cabecalho.de=de +cabecalho.filtros=Filtros: +cabecalho.nombPuntoventa=Ponto de Venda: + +label.puntoventaId=ID +label.nombPuntoVenta=Nome Ponto de Venda +label.fecImpresion=Data da Impressão +label.numFolioSistema=Número da Passagem +label.origen=Origem +label.destino=Destino +label.valor=Valor da Passagem +label.total=Total +label.valorPago=Valor Tarifa +label.totalPassagens=Total Passagens +label.qtdPassagens=Quantidade Passagens \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioBaixasVendasInternet_es.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioBaixasVendasInternet_es.properties index 51bff3371..134963e75 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioBaixasVendasInternet_es.properties +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioBaixasVendasInternet_es.properties @@ -19,4 +19,6 @@ label.numFolioSistema=N label.origen=Origen label.destino=Destino label.valor=Valor del Folio -label.total=Total \ No newline at end of file +label.total=Total +label.valorPago=Precios +label.totalPassagens=Total Pasajes \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioBaixasVendasInternet_pt_BR.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioBaixasVendasInternet_pt_BR.properties index c14d9b1ea..431b5999e 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioBaixasVendasInternet_pt_BR.properties +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioBaixasVendasInternet_pt_BR.properties @@ -19,4 +19,6 @@ label.numFolioSistema=N label.origen=Origem label.destino=Destino label.valor=Valor da Passagem -label.total=Total \ No newline at end of file +label.total=Total +label.valorPago=Valor Tarifa +label.totalPassagens=Total Passagens \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioBaixasVendasInternet.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioBaixasVendasInternet.jasper index cb5724907af559d7c52c1ea3512909c1271a2c0a..7437517732b13142174e933f03b07a6a9e8abc8d 100644 GIT binary patch literal 34652 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

NMn=^}(NLL>B$0ILzY(vA$pIrL& zn<}c8?dj;%@aV|^XYkA(hBQ*pfYI{i#g$EsjGq6GyC9ChX*CwhLd?EbF6AMn#>)*f_U3zf zPRIwb>?&5=5d1jyT8sVW$un;_us&YXS$C;11kATZti0>Fn=&{lfba?$KzKjEAiN)7 z5MBd7VpCF` z*19)i1IZ%~ZSobqx!zRiRjqOUksL+D(ev(0eel-K;+jJ?EOov(QO&o7i;Gj3j};h+m&yR`A| z#zgeGFeshRU^>g-3juUi&;UC70S2A@0E5mN0F+ERf5Agi#|qJTbO4OJ?6D3Zbty>U~`f??SuR`%du&#VvcDTS|O3d`W~017K;0EPVkgTj7*L17KZ zqwwW>MB%Xk6dtK4{15m^6iMP!-`sZZ^y;})28ltwVixY3n9MS`F@Vep z8bD@0z#y|9V31h@^2mJS9+9~sfXsT!yftS-r-f6#UE)qxBVZbhVFGxoZrJV!J`4gp`Zc7;RhJQ;RhJQ zp#d;Smn2h3eGu#J6CO1v!!LyfWxP8m+J6v(GFk~2$@Mv#;l4gsORbbzYL-SCX7McT z(`w_i2(mv_6N?YTGHdK)cPzt4sA*VUaki;E848@*drlVzP~`kMkF4L{Ip5q1CtU@< z5%F1?-C7hsvbniTo;lX1(l{;e?SqHeru-8uoY&~jsifgH@4RM+S8EX>M)D@dNg)C$uYuQituc3t6_+^%d;54R2goN<6P>oS