From 0be3dff92f15a3ed2954cc74414bdee1e0bb94cc Mon Sep 17 00:00:00 2001 From: "alexandre.lima" Date: Fri, 18 Aug 2017 17:28:21 +0000 Subject: [PATCH] Fixes Bug #0009446 git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Web/trunk/ventaboletos@72722 d1611594-4594-4d17-8e1d-87c2c4800839 --- .../relatorios/impl/RelatorioGratuidade.java | 73 ++++-- .../RelatorioGratuidade_pt_BR.properties | 11 + .../templates/RelatorioGratuidade.jasper | Bin 47199 -> 57038 bytes .../templates/RelatorioGratuidade.jrxml | 220 +++++++++++++----- .../utilitarios/RelatorioGratuidadeBean.java | 56 +++++ .../RelatorioGratuidadeController.java | 112 +++++++-- .../relatorios/filtroRelatorioGratuidade.zul | 91 ++++++-- 7 files changed, 457 insertions(+), 106 deletions(-) diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioGratuidade.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioGratuidade.java index e881b9ffa..fd11b766e 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioGratuidade.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioGratuidade.java @@ -17,7 +17,6 @@ import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; public class RelatorioGratuidade extends Relatorio { private Integer orgaoConcedenteId; - private String orgaoConcedenteDesc; private List lsDadosRelatorio; @@ -32,8 +31,22 @@ public class RelatorioGratuidade extends Relatorio { Map parametros = this.relatorio.getParametros(); - String fecInicio = parametros.get("fecInicio").toString() + " 00:00:00"; - String fecFinal = parametros.get("fecFinal").toString() + " 23:59:59"; + String fecInicioViagem = null; + if (parametros.get("fecInicioViagem") != null) { + fecInicioViagem = parametros.get("fecInicioViagem").toString() + " 00:00:00"; + } + String fecFinalViagem = null; + if (parametros.get("fecFinalViagem") != null) { + fecFinalViagem = parametros.get("fecFinalViagem").toString() + " 23:59:59"; + } + String fecInicioVenda = null; + if (parametros.get("fecInicioVenda") != null) { + fecInicioVenda = parametros.get("fecInicioVenda").toString() + " 00:00:00"; + } + String fecFinalVenda = null; + if (parametros.get("fecFinalVenda") != null) { + fecFinalVenda = parametros.get("fecFinalVenda").toString() + " 23:59:59"; + } String empresa = parametros.get("empresa") != null ? parametros.get("empresa").toString() : ""; String agencia = parametros.get("agencia") != null ? parametros.get("agencia").toString() : ""; String ruta = parametros.get("ruta") != null && !parametros.get("ruta").equals(-1) ? parametros.get("ruta").toString() : ""; @@ -41,16 +54,25 @@ public class RelatorioGratuidade extends Relatorio { String destino = parametros.get("destino") != null ? parametros.get("destino").toString() : ""; String categoria = parametros.get("categoria") != null ? parametros.get("categoria").toString() : ""; orgaoConcedenteId = parametros.get("orgao_concedente_id") != null ? (Integer) parametros.get("orgao_concedente_id") : null; - orgaoConcedenteDesc = parametros.get("orgao_concedente_desc") != null ? parametros.get("orgao_concedente_desc").toString() : null; - String sql = getSql(empresa, agencia, ruta, fecInicio, fecFinal, origem, destino, categoria); + String sql = getSql(empresa, agencia, ruta, fecInicioViagem, fecFinalViagem, fecInicioVenda, fecFinalVenda, origem, destino, categoria); System.out.println(sql); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss"); NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql); - stmt.setTimestamp("fecInicio", new java.sql.Timestamp(sdf.parse(fecInicio).getTime())); - stmt.setTimestamp("fecFinal", new java.sql.Timestamp(sdf.parse(fecFinal).getTime())); + if (fecInicioViagem != null) { + stmt.setTimestamp("fecInicioViagem", new java.sql.Timestamp(sdf.parse(fecInicioViagem).getTime())); + } + if (fecFinalViagem != null) { + stmt.setTimestamp("fecFinalViagem", new java.sql.Timestamp(sdf.parse(fecFinalViagem).getTime())); + } + if (fecInicioVenda != null) { + stmt.setTimestamp("fecInicioVenda", new java.sql.Timestamp(sdf.parse(fecInicioVenda).getTime())); + } + if (fecFinalVenda != null) { + stmt.setTimestamp("fecFinalVenda", new java.sql.Timestamp(sdf.parse(fecFinalVenda).getTime())); + } if(empresa != null && !empresa.equals("")){ stmt.setInt("empresa_id", Integer.parseInt(empresa)); } @@ -102,9 +124,19 @@ public class RelatorioGratuidade extends Relatorio { gratuidadeBean.setDescorigen(rset.getString("descorigen")); gratuidadeBean.setDescdestino(rset.getString("descdestino")); gratuidadeBean.setNumfoliosistema(rset.getString("numfoliosistema")); + + gratuidadeBean.setTipoDoc(rset.getString("desctipo")); + gratuidadeBean.setTipo(rset.getString("desccategoria")); + gratuidadeBean.setSeguro(rset.getBigDecimal("importeseguro")); + gratuidadeBean.setPedagio(rset.getBigDecimal("importepedagio")); + gratuidadeBean.setUtr(rset.getBigDecimal("importetaxaembarque")); + gratuidadeBean.setRg(rset.getString("DESCNUMDOC")); + gratuidadeBean.setStatus(rset.getString("INDSTATUSBOLETO")); + //gratuidadeBean.setDataMd(rset.getDate("")); + lsDadosRelatorio.add(gratuidadeBean); } - + if (lsDadosRelatorio.size() > 0) { setLsDadosRelatorio(lsDadosRelatorio); } @@ -121,12 +153,12 @@ public class RelatorioGratuidade extends Relatorio { protected void processaParametros() throws Exception { } - private String getSql(String empresa, String agencia, String ruta, String fecInicio, String fecFinal, String origem, String destino, String categoria) { + private String getSql(String empresa, String agencia, String ruta, String fecInicioViagem, String fecFinalViagem, String fecInicioVenda, String fecFinalVenda, String origem, String destino, String categoria) { StringBuffer sql = new StringBuffer(); - sql.append("SELECT b.feccorrida, ori.cveparada origen, des.cveparada destino, ori.descparada descorigen, des.descparada descdestino, "); - sql.append("b.numkmviaje, r.descruta, b.corrida_id, b.fechorviaje, b.numasiento, b.numfoliosistema, "); - sql.append("tv.desctipoventa, b.nombpasajero, b.descnumdoc, tar.preciooriginal, "); - sql.append("b.porccategoria, b.preciopagado, u.cveusuario, ag.nombpuntoventa, e.nombempresa, cat.cvecategoria "); + sql.append("SELECT DISTINCT b.feccorrida, ori.cveparada origen, des.cveparada destino, ori.descparada descorigen, des.descparada descdestino, b.numkmviaje, "); + sql.append("r.descruta, b.corrida_id, b.fechorviaje, b.numasiento, b.numfoliosistema, tv.desctipoventa, b.nombpasajero, b.descnumdoc, tar.preciooriginal, "); + sql.append("b.porccategoria, b.preciopagado, u.cveusuario, ag.nombpuntoventa, e.nombempresa, C.cvecategoria, ti.DESCTIPO, "); + sql.append("c.DESCCATEGORIA, tar.IMPORTEPEDAGIO, tar.IMPORTESEGURO, tar.IMPORTETAXAEMBARQUE, b.DESCNUMDOC, b.INDSTATUSBOLETO "); sql.append("FROM boleto b "); sql.append("JOIN categoria c ON b.categoria_id = c.categoria_id "); sql.append("JOIN parada ori ON ori.parada_id = b.origen_id "); @@ -143,9 +175,14 @@ public class RelatorioGratuidade extends Relatorio { sql.append(" AND tar.origen_id = b.origen_id "); sql.append(" AND tar.destino_id = b.destino_id) "); sql.append("JOIN empresa e ON e.empresa_id = b.empresacorrida_id "); - sql.append("JOIN categoria cat ON cat.categoria_id = b.categoria_id "); - sql.append("WHERE "); - sql.append(" b.feccorrida BETWEEN :fecInicio AND :fecFinal "); + sql.append("LEFT JOIN TIPO_IDENTIFICACION ti ON ti.TIPOIDENTIFICACION_ID = b.TIPOIDENTIFICACIONDOC_ID "); + sql.append("WHERE 1=1 "); + if (fecInicioViagem != null && fecFinalViagem != null) { + sql.append(" AND b.feccorrida BETWEEN :fecInicioViagem AND :fecFinalViagem "); + } + if (fecInicioVenda != null && fecFinalVenda != null) { + sql.append(" AND b.b.FECHORVENTA BETWEEN :fecInicioVenda AND :fecFinalVenda "); + } sql.append("AND b.motivocancelacion_id IS NULL "); if (!empresa.isEmpty()){ sql.append("AND b.empresacorrida_id = :empresa_id "); @@ -163,12 +200,12 @@ public class RelatorioGratuidade extends Relatorio { sql.append(" AND des.parada_id = :destino_id "); } if(!categoria.isEmpty()){ - sql.append(" AND c.categoria_id = :categoria_id "); + sql.append(" AND c.categoria_id in(:categoria_id) "); } if(orgaoConcedenteId != null){ sql.append(" AND r.orgaoconcedente_id = :orgao_concedente_id "); } - + return sql.toString(); } } \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioGratuidade_pt_BR.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioGratuidade_pt_BR.properties index 4ae484a77..bf52c562e 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioGratuidade_pt_BR.properties +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioGratuidade_pt_BR.properties @@ -11,6 +11,8 @@ header.filtro.servico=Servi header.filtro.linha=Linha\: header.filtro.grupo=Grupo de Linhas\: header.empresa=Empresa\: +header.periodo.viagem=Período Viagem +header.periodo.venda=Período Venda #Labels detail @@ -30,6 +32,15 @@ detail.desconto=Desc.(%) detail.tarifadesconto=Tarifa detail.bilheteiro=Bilheteiro detail.agencia=Agência +detail.dataMD=Data MD +detail.tipo=Tipo +detail.tipoDoc=Tipo Doc. +detail.tarifa=Tarifa +detail.seguro=Seguro +detail.utr=UTR +detail.pedagio=Pedágio +detail.rg=RG +detail.status=Status detail.total=Total Quantidade: diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioGratuidade.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioGratuidade.jasper index ac807f567779710b854403c99e169085b849a892..6592be383eab7cd652e9bf7a446cdd531afab3fd 100644 GIT binary patch literal 57038 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 literal 47199 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 - - - - + + + + + - + + + @@ -36,7 +39,14 @@ - + + + + + + + + @@ -51,86 +61,86 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -138,27 +148,67 @@ - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -168,9 +218,9 @@ - + - + @@ -188,12 +238,12 @@ - + - + - + @@ -207,139 +257,205 @@ + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -355,12 +471,12 @@ - + - + diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioGratuidadeBean.java b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioGratuidadeBean.java index 87bfdfe0b..d5fe8211c 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioGratuidadeBean.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioGratuidadeBean.java @@ -25,7 +25,63 @@ public class RelatorioGratuidadeBean { private String cvecategoria; private String numasiento; private String numfoliosistema; + private String tipoDoc; + private String tipo; + private BigDecimal seguro; + private BigDecimal pedagio; + private BigDecimal utr; + private String rg; + private String status; + private Date dataMd; + public Date getDataMd() { + return dataMd; + } + public void setDataMd(Date dataMd) { + this.dataMd = dataMd; + } + public String getStatus() { + return status; + } + public void setStatus(String status) { + this.status = status; + } + public String getRg() { + return rg; + } + public void setRg(String rg) { + this.rg = rg; + } + public String getTipoDoc() { + return tipoDoc; + } + public void setTipoDoc(String tipoDoc) { + this.tipoDoc = tipoDoc; + } + public String getTipo() { + return tipo; + } + public void setTipo(String tipo) { + this.tipo = tipo; + } + public BigDecimal getSeguro() { + return seguro; + } + public void setSeguro(BigDecimal seguro) { + this.seguro = seguro; + } + public BigDecimal getPedagio() { + return pedagio; + } + public void setPedagio(BigDecimal pedagio) { + this.pedagio = pedagio; + } + public BigDecimal getUtr() { + return utr; + } + public void setUtr(BigDecimal utr) { + this.utr = utr; + } public Date getFeccorrida() { return feccorrida; } diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioGratuidadeController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioGratuidadeController.java index e003c901a..aa2bdc677 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioGratuidadeController.java +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioGratuidadeController.java @@ -1,17 +1,18 @@ package com.rjconsultores.ventaboletos.web.gui.controladores.relatorios; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; 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; import org.zkoss.util.resource.Labels; +import org.zkoss.zhtml.Messagebox; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.Event; import org.zkoss.zul.Datebox; @@ -27,34 +28,33 @@ import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; import com.rjconsultores.ventaboletos.service.CategoriaService; import com.rjconsultores.ventaboletos.service.EmpresaService; import com.rjconsultores.ventaboletos.service.OrgaoConcedenteService; -import com.rjconsultores.ventaboletos.service.PuntoVentaService; import com.rjconsultores.ventaboletos.service.RutaService; import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEstandar; import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxParada; import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxPuntoVenta; import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer; +import com.rjconsultores.ventaboletos.web.utilerias.MyListbox; @Controller("relatorioGratuidadeController") @Scope("prototype") public class RelatorioGratuidadeController extends MyGenericForwardComposer { private static final long serialVersionUID = 1L; - private static Logger log = Logger.getLogger(RelatorioGratuidadeController.class); @Autowired private DataSource dataSourceRead; @Autowired private EmpresaService empresaService; @Autowired - private PuntoVentaService puntoVentaService; - @Autowired private RutaService rutaService; @Autowired private CategoriaService categoriaService; @Autowired private OrgaoConcedenteService orgaocConcedenteService; - private Datebox datInicial; - private Datebox datFinal; + private Datebox datInicialViagem; + private Datebox datFinalViagem; + private Datebox datInicialVenda; + private Datebox datFinalVenda; private MyComboboxEstandar cmbTeste; private MyComboboxPuntoVenta cmbAgencia; private MyComboboxEstandar cmbLinha; @@ -66,16 +66,69 @@ public class RelatorioGratuidadeController extends MyGenericForwardComposer { private List lsEmpresas; private List lsLinhas; private List lsCategorias; + + private MyListbox selectedTipoGratuidadeList; + private List listSelectedTipoGratuidade; + private List lsOrgaoConcedente; + + public void onClick$btnRemoveTipoGratuidade(Event ev) throws InterruptedException { + Categoria categoria = (Categoria) selectedTipoGratuidadeList.getSelectedItem().getValue(); + listSelectedTipoGratuidade.remove(categoria); + selectedTipoGratuidadeList.setData(listSelectedTipoGratuidade); + } + + public void onClick$btnAddTipoTipoGratuidade(Event ev) throws InterruptedException { + if (cmbTipoGratuidade.getSelectedItem() != null) { + listSelectedTipoGratuidade.add((Categoria) cmbTipoGratuidade.getSelectedItem().getValue()); + selectedTipoGratuidadeList.setData(listSelectedTipoGratuidade); + selectedTipoGratuidadeList.setSelectedItem(null); + } + } + + public MyListbox getSelectedTipoGratuidadeList() { + return selectedTipoGratuidadeList; + } + + public void setSelectedTipoGratuidadeList(MyListbox selectedTipoGratuidadeList) { + this.selectedTipoGratuidadeList = selectedTipoGratuidadeList; + } + + public List getListSelectedTipoGratuidade() { + return listSelectedTipoGratuidade; + } + + public void setListSelectedTipoGratuidade(List listSelectedTipoGratuidade) { + this.listSelectedTipoGratuidade = listSelectedTipoGratuidade; + } private void executarRelatorio() throws Exception { Map parametros = new HashMap(); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); - parametros.put("fecInicio", sdf.format(this.datInicial.getValue())); - parametros.put("fecFinal", sdf.format(this.datFinal.getValue())); + if (this.datInicialViagem.getValue() != null) { + parametros.put("fecInicioViagem", sdf.format(this.datInicialViagem.getValue())); + } + if (this.datFinalViagem.getValue() != null) { + parametros.put("fecFinalViagem", sdf.format(this.datFinalViagem.getValue())); + } + + if (this.datInicialVenda.getValue() != null) { + parametros.put("fecInicioVenda", sdf.format(this.datInicialVenda.getValue())); + } + if (this.datFinalVenda.getValue() != null) { + parametros.put("fecFinalVenda", sdf.format(this.datFinalVenda.getValue())); + } + if ((parametros.get("fecInicioViagem") == null && parametros.get("datFinalViagem") == null) || + (parametros.get("fecInicioVenda") == null && parametros.get("datFinalVenda") == null)) { + Messagebox.show(Labels.getLabel("relatorioGratuidadeController.data.obrigatoria"), + Labels.getLabel("relatorioGratuidadeController.window.title"), + Messagebox.OK, Messagebox.INFORMATION); + return; + } + if (cmbTeste.getSelectedIndex() != -1) { parametros.put("empresa", ((Empresa) cmbTeste.getSelectedItem().getValue()).getEmpresaId()); } @@ -91,8 +144,12 @@ public class RelatorioGratuidadeController extends MyGenericForwardComposer { if(cmbDestino.getSelectedIndex() != -1){ parametros.put("destino", ((Parada) cmbDestino.getSelectedItem().getValue()).getParadaId()); } - if(cmbTipoGratuidade.getSelectedIndex() != -1){ - parametros.put("categoria", ((Categoria) cmbTipoGratuidade.getSelectedItem().getValue()).getCategoriaId()); + if(listSelectedTipoGratuidade.size() > 0){ + String categoriaId = ""; + for (Categoria categoria : listSelectedTipoGratuidade) { + categoriaId = categoria.getCategoriaId() + ","; + } + parametros.put("categoria", categoriaId.substring(0, categoriaId.length()-1)); } if (cmbOrgaoConcedente.getSelectedItem() != null) { OrgaoConcedente orgaoConcedente = (OrgaoConcedente) cmbOrgaoConcedente.getSelectedItem().getValue(); @@ -123,6 +180,7 @@ public class RelatorioGratuidadeController extends MyGenericForwardComposer { lsEmpresas = empresaService.obtenerTodos(); lsCategorias = categoriaService.obtenerTodos(); lsOrgaoConcedente = orgaocConcedenteService.obtenerTodos(); + listSelectedTipoGratuidade = new ArrayList(); super.doAfterCompose(comp); } @@ -151,20 +209,36 @@ public class RelatorioGratuidadeController extends MyGenericForwardComposer { this.lsCategorias = lsCategorias; } - public Datebox getDatInicial() { - return datInicial; + public Datebox getDatInicialViagem() { + return datInicialViagem; } - public void setDatInicial(Datebox datInicial) { - this.datInicial = datInicial; + public void setDatInicialViagem(Datebox datInicialViagem) { + this.datInicialViagem = datInicialViagem; } - public Datebox getDatFinal() { - return datFinal; + public Datebox getDatFinalViagem() { + return datFinalViagem; } - public void setDatFinal(Datebox datFinal) { - this.datFinal = datFinal; + public void setDatFinalViagem(Datebox datFinalViagem) { + this.datFinalViagem = datFinalViagem; + } + + public Datebox getDatInicialVenda() { + return datInicialVenda; + } + + public void setDatInicialVenda(Datebox datInicialVenda) { + this.datInicialVenda = datInicialVenda; + } + + public Datebox getDatFinalVenda() { + return datFinalVenda; + } + + public void setDatFinalVenda(Datebox datFinalVenda) { + this.datFinalVenda = datFinalVenda; } public MyComboboxPuntoVenta getCmbAgencia() { diff --git a/web/gui/relatorios/filtroRelatorioGratuidade.zul b/web/gui/relatorios/filtroRelatorioGratuidade.zul index 20f819f9c..d9ab5d694 100644 --- a/web/gui/relatorios/filtroRelatorioGratuidade.zul +++ b/web/gui/relatorios/filtroRelatorioGratuidade.zul @@ -10,6 +10,52 @@ contentStyle="overflow:auto" height="320px" width="550px" border="normal"> + + + + + + + + + + + + + + + + + + @@ -68,28 +114,39 @@ - + + + + + + + + + +