From 9b65a346528c2a1e6b30ce065a93772655193351 Mon Sep 17 00:00:00 2001 From: rodrigo Date: Fri, 23 Aug 2013 21:10:22 +0000 Subject: [PATCH] git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Web/trunk/ventaboletos@30014 d1611594-4594-4d17-8e1d-87c2c4800839 --- .../impl/RelatorioOrigemDestino.java | 31 +-- .../templates/RelatorioOrigemDestino.jasper | Bin 71187 -> 72105 bytes .../templates/RelatorioOrigemDestino.jrxml | 56 +++--- .../relatorios/RelatorioController.java | 23 ++- .../RelatorioOrigemDestinoController.java | 183 ++++++++++++++---- .../RenderRelatorioOrigemDestinoCorrida.java | 7 +- web/WEB-INF/i3-label_pt_BR.label | 5 +- .../filtroRelatorioOrigemDestino.zul | 69 ++++++- 8 files changed, 271 insertions(+), 103 deletions(-) diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioOrigemDestino.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioOrigemDestino.java index 6ff801f74..d9c943afc 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioOrigemDestino.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioOrigemDestino.java @@ -44,7 +44,7 @@ public class RelatorioOrigemDestino extends Relatorio { sql.append(" SELECT TRAMOS.*, NVL(SOMA.RECEITA, 0) RECEITA "); sql.append(" FROM "); sql.append(" ( "); - sql.append(" SELECT "); + sql.append(" SELECT "); sql.append(" CA.CORRIDA_ID CORRIDA_ID, "); sql.append(" CA.FECCORRIDA FECCORRIDA, "); sql.append(" O.CVEPARADA CVE_ORIGEM, "); @@ -52,11 +52,11 @@ public class RelatorioOrigemDestino extends Relatorio { sql.append(" D.CVEPARADA CVE_DESTINO, "); sql.append(" D.DESCPARADA DESTINO, "); sql.append(" SUM(CA.PRECIOPAGADO) RECEITA "); - sql.append(" FROM CAJA CA "); + sql.append(" FROM BOLETO CA "); sql.append(" INNER JOIN PARADA O ON O.PARADA_ID = CA.ORIGEN_ID "); sql.append(" INNER JOIN PARADA D ON D.PARADA_ID = CA.DESTINO_ID "); sql.append(" WHERE CA.ACTIVO = 1 "); - sql.append(" AND ca.indreimpresion = 0 "); + sql.append(" AND CA.MOTIVOCANCELACION_ID IS NULL "); sql.append(" AND CA.PRECIOBASE IS NOT NULL "); if (bilhetesGratuitos) { sql.append(" AND CA.PRECIOBASE >= 0 "); @@ -109,11 +109,11 @@ public class RelatorioOrigemDestino extends Relatorio { sql.append(" D.CVEPARADA CVE_DESTINO, "); sql.append(" D.DESCPARADA DESTINO, "); sql.append(" SUM(CA.PRECIOPAGADO) RECEITA "); - sql.append(" FROM CAJA CA "); + sql.append(" FROM BOLETO CA "); sql.append(" INNER JOIN PARADA O ON O.PARADA_ID = CA.ORIGEN_ID "); sql.append(" INNER JOIN PARADA D ON D.PARADA_ID = CA.DESTINO_ID "); sql.append(" WHERE CA.ACTIVO = 1 "); - sql.append(" AND ca.indreimpresion = 0 "); + sql.append(" AND CA.MOTIVOCANCELACION_ID IS NULL "); sql.append(" AND CA.PRECIOBASE IS NOT NULL "); if (bilhetesGratuitos) { sql.append(" AND CA.PRECIOBASE >= 0 "); @@ -242,6 +242,12 @@ public class RelatorioOrigemDestino extends Relatorio { StringBuilder sql = new StringBuilder(); sql.append(" SELECT "); sql.append(" resultado.*, "); + sql.append(" ( "); + sql.append(" SELECT COUNT(*) "); + sql.append(" FROM CORRIDA CO "); + sql.append(" WHERE CO.CORRIDA_ID=RESULTADO.CORRIDA_ID "); + sql.append(" AND CO.FECCORRIDA BETWEEN to_date('").append(dataDe).append("','dd/mm/yyyy HH24:mi:ss') AND to_date('").append(dataAte).append("','dd/mm/yyyy HH24:mi:ss') "); + sql.append(" ) VIAGENS, "); sql.append(" SUM(TR.CANTKMREAL) KM_CORRIDA, "); sql.append(" ( "); sql.append(" SELECT MAX(DA.CANTASIENTOS) "); @@ -250,16 +256,16 @@ public class RelatorioOrigemDestino extends Relatorio { sql.append(" INNER JOIN DIAGRAMA_AUTOBUS DA ON DA.DIAGRAMAAUTOBUS_ID = ROL.DIAGRAMAAUTOBUS_ID "); sql.append(" WHERE CO.CORRIDA_ID=RESULTADO.CORRIDA_ID "); sql.append(" AND CO.FECCORRIDA BETWEEN to_date('").append(dataDe).append("','dd/mm/yyyy HH24:mi:ss') AND to_date('").append(dataAte).append("','dd/mm/yyyy HH24:mi:ss') "); - sql.append(" GROUP BY DA.DIAGRAMAAUTOBUS_ID "); + sql.append(" GROUP BY CO.CORRIDA_ID "); sql.append(" ) DISPONIBILIDADE, "); sql.append(" ( SELECT COUNT(*) "); - sql.append(" FROM caja ca "); + sql.append(" FROM BOLETO ca "); sql.append(" INNER JOIN CORRIDA CO ON (CO.CORRIDA_ID = CA.CORRIDA_ID AND CO.FECCORRIDA = CA.FECCORRIDA) "); sql.append(" WHERE CA.ACTIVO = 1 "); sql.append(" AND CO.EMPRESACORRIDA_ID IN (").append(empresaIds).append(") "); sql.append(" AND CA.CORRIDA_ID = RESULTADO.CORRIDA_ID "); sql.append(" AND CA.FECCORRIDA BETWEEN to_date('").append(dataDe).append("','dd/mm/yyyy HH24:mi:ss') AND to_date('").append(dataAte).append("','dd/mm/yyyy HH24:mi:ss') "); - sql.append(" AND ca.indreimpresion = 0 "); + sql.append(" AND CA.MOTIVOCANCELACION_ID IS NULL "); sql.append(" AND CA.PRECIOBASE IS NOT NULL "); if (bilhetesGratuitos) { sql.append(" AND CA.PRECIOBASE >= 0 "); @@ -267,16 +273,15 @@ public class RelatorioOrigemDestino extends Relatorio { sql.append(" AND CA.PRECIOBASE > 0 "); } sql.append(" ) ABSOLUTO_TOTAL_CORRIDA, "); - sql.append(" (RESULTADO.KM_TRAMO/SUM(TR.CANTKMREAL))*"); sql.append(" ( SELECT COUNT(*) "); - sql.append(" FROM caja ca "); + sql.append(" FROM BOLETO ca "); sql.append(" INNER JOIN CORRIDA CO ON (CO.CORRIDA_ID = CA.CORRIDA_ID AND CO.FECCORRIDA = CA.FECCORRIDA) "); sql.append(" WHERE CA.ACTIVO = 1 "); sql.append(" AND CO.EMPRESACORRIDA_ID IN (").append(empresaIds).append(") "); sql.append(" AND CA.CORRIDA_ID = RESULTADO.CORRIDA_ID "); sql.append(" AND CA.FECCORRIDA BETWEEN to_date('").append(dataDe).append("','dd/mm/yyyy HH24:mi:ss') AND to_date('").append(dataAte).append("','dd/mm/yyyy HH24:mi:ss') "); - sql.append(" AND ca.indreimpresion = 0 "); + sql.append(" AND CA.MOTIVOCANCELACION_ID IS NULL "); sql.append(" AND CA.PRECIOBASE IS NOT NULL "); if (bilhetesGratuitos) { sql.append(" AND CA.PRECIOBASE >= 0 "); @@ -300,7 +305,7 @@ public class RelatorioOrigemDestino extends Relatorio { sql.append(" COUNT(*) ABSOLUTOS, "); sql.append(" SUM(CA.PRECIOPAGADO) RECEITA, "); sql.append(" CA.PRECIOBASE "); - sql.append(" FROM CAJA CA "); + sql.append(" FROM BOLETO CA "); sql.append(" INNER JOIN PARADA ORI ON ORI.PARADA_ID = CA.ORIGEN_ID "); sql.append(" INNER JOIN PARADA DES ON DES.PARADA_ID = CA.DESTINO_ID "); sql.append(" INNER JOIN CORRIDA CO ON (CO.CORRIDA_ID = CA.CORRIDA_ID AND CO.FECCORRIDA = CA.FECCORRIDA) "); @@ -316,7 +321,7 @@ public class RelatorioOrigemDestino extends Relatorio { sql.append(" AND CA.CORRIDA_ID IN (").append(corridasIds).append(") "); } sql.append(" AND CA.FECCORRIDA BETWEEN to_date('").append(dataDe).append("','dd/mm/yyyy HH24:mi:ss') AND to_date('").append(dataAte).append("','dd/mm/yyyy HH24:mi:ss') "); - sql.append(" AND ca.indreimpresion = 0 "); + sql.append(" AND CA.MOTIVOCANCELACION_ID IS NULL "); sql.append(" AND CA.PRECIOBASE IS NOT NULL "); if (bilhetesGratuitos) { sql.append(" AND CA.PRECIOBASE >= 0 "); diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioOrigemDestino.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioOrigemDestino.jasper index 7aed6321dd830ef03ac1cd376bfb8de39de147bb..0f2731698ec87b031124ab9c581cead98db6a134 100644 GIT binary patch literal 72105 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 literal 71187 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 S@pIFoqMd2GYH+tUF3sL>32Eh0UF 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 diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioOrigemDestino.jrxml b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioOrigemDestino.jrxml index e4a84bfab..08c8f6f5c 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioOrigemDestino.jrxml +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioOrigemDestino.jrxml @@ -33,9 +33,10 @@ - + + @@ -58,7 +59,7 @@ - + @@ -69,11 +70,8 @@ - - - - + @@ -81,11 +79,14 @@ - - + + - + + + + @@ -289,17 +290,12 @@ - + 0?new BigDecimal("100.00"):$V{sum_por_equivalente}]]> - - - - - - + 0?new BigDecimal("100.00"):$V{sum_porc_abs}]]> @@ -374,17 +370,12 @@ - + - - - - - - + @@ -481,7 +472,7 @@ - + @@ -503,11 +494,6 @@ - - - - - @@ -523,7 +509,17 @@ - + + + + + + + + + + + diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioController.java index bd05f1c74..dd7c2982a 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioController.java +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioController.java @@ -6,6 +6,8 @@ package com.rjconsultores.ventaboletos.web.gui.controladores.relatorios; import java.io.ByteArrayInputStream; import java.io.InputStream; +import java.text.SimpleDateFormat; +import java.util.Calendar; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; @@ -18,6 +20,7 @@ import org.zkoss.zul.Filedownload; import org.zkoss.zul.Iframe; import org.zkoss.zul.Messagebox; import org.zkoss.zul.Toolbarbutton; + import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; import com.rjconsultores.ventaboletos.relatorios.utilitarios.SaidaRelatorio; import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer; @@ -30,6 +33,7 @@ import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer; @Scope("prototype") public class RelatorioController extends MyGenericForwardComposer { + private static final long serialVersionUID = 1L; private Div divResultadoRelatorio; private Iframe iframeRelatorio; private Toolbarbutton btnSalvarPDF; @@ -37,6 +41,7 @@ public class RelatorioController extends MyGenericForwardComposer { private AMedia conteudoRelatorioPDF; private AMedia conteudoRelatorioXLS; private Relatorio relatorio; + private String nomeRelatorioDownload; /** * @return the btnSalvarPDF @@ -87,31 +92,33 @@ public class RelatorioController extends MyGenericForwardComposer { @Override public void doAfterCompose(Component comp) throws Exception { this.relatorio = (Relatorio) Executions.getCurrent().getArg().get("relatorio"); - if (relatorio.getInfoMsg().size() > 0) - { + if (relatorio.getInfoMsg().size() > 0) { String msg = ""; for (String msgItem : relatorio.getInfoMsg()) - msg = msg.concat(msgItem+"\n"); + msg = msg.concat(msgItem + "\n"); Messagebox.show( msg, "", Messagebox.OK, Messagebox.INFORMATION); } + super.doAfterCompose(comp); final InputStream mediais = new ByteArrayInputStream(this.relatorio.getConteudo(SaidaRelatorio.PDF)); - conteudoRelatorioPDF = new AMedia("relatorio.pdf", "pdf", null, mediais); - iframeRelatorio.setContent(conteudoRelatorioPDF); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm"); + nomeRelatorioDownload = relatorio.getNome() + "_" + sdf.format(Calendar.getInstance().getTime()); + + conteudoRelatorioPDF = new AMedia(nomeRelatorioDownload + ".pdf", "pdf", null, mediais); + iframeRelatorio.setContent(conteudoRelatorioPDF); } public void onClick$btnSalvarPDF(Event ev) { - Filedownload.save(conteudoRelatorioPDF.getStreamData(), "application/pdf", "relatorio.pdf"); + Filedownload.save(conteudoRelatorioPDF.getStreamData(), "application/pdf", nomeRelatorioDownload + ".pdf"); } public void onClick$btnSalvarXLS(Event ev) throws Exception { final InputStream mediais = new ByteArrayInputStream(this.relatorio.getConteudo(SaidaRelatorio.XLS)); conteudoRelatorioXLS = new AMedia("relatorio.xls", "xls", null, mediais); - Filedownload.save(conteudoRelatorioXLS.getStreamData(), "application/xls", "relatorio.xls"); + Filedownload.save(conteudoRelatorioXLS.getStreamData(), "application/xls", nomeRelatorioDownload + ".xls"); } - } diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioOrigemDestinoController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioOrigemDestinoController.java index 7b6c767e1..fd61b8f70 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioOrigemDestinoController.java +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioOrigemDestinoController.java @@ -21,16 +21,22 @@ import org.zkoss.zul.Bandbox; import org.zkoss.zul.Checkbox; import org.zkoss.zul.Combobox; import org.zkoss.zul.Comboitem; +import org.zkoss.zul.ComboitemRenderer; import org.zkoss.zul.Datebox; import org.zkoss.zul.Intbox; import org.zkoss.zul.Paging; import com.rjconsultores.ventaboletos.entidad.Corrida; import com.rjconsultores.ventaboletos.entidad.Empresa; +import com.rjconsultores.ventaboletos.entidad.Parada; +import com.rjconsultores.ventaboletos.entidad.Ruta; import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioOrigemDestino; import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; import com.rjconsultores.ventaboletos.service.EmpresaService; +import com.rjconsultores.ventaboletos.service.RutaService; import com.rjconsultores.ventaboletos.utilerias.DateUtil; +import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxParada; +import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxParadaCve; import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer; import com.rjconsultores.ventaboletos.web.utilerias.MyListbox; import com.rjconsultores.ventaboletos.web.utilerias.paginacion.HibernateSearchObject; @@ -50,17 +56,34 @@ public class RelatorioOrigemDestinoController extends MyGenericForwardComposer { private transient PagedListWrapper plwCorrida; @Autowired private EmpresaService empresaService; + @Autowired + private RutaService rutaService; private List lsEmpresa; private Datebox datInicial; private Datebox datFinal; private Intbox txtCorridaId; + private Intbox txtCodLinha; private Paging pagingCorrida; private MyListbox corridaList; private MyListbox corridaSelList; private Combobox cmbEmpresa; + private Combobox cmbRuta; private Bandbox bbPesquisaCorrida; private Checkbox chkBilhetesGratuitos; private Checkbox chkTrechoSemMovimento; + private List lsRuta; + private MyComboboxParada cmbParadaOrigem; + private MyComboboxParadaCve cmbParadaOrigemCve; + private MyComboboxParada cmbParadaDestino; + private MyComboboxParadaCve cmbParadaDestinoCve; + + public List getLsRuta() { + return lsRuta; + } + + public void setLsRuta(List lsRuta) { + this.lsRuta = lsRuta; + } public List getLsEmpresa() { return lsEmpresa; @@ -73,16 +96,60 @@ public class RelatorioOrigemDestinoController extends MyGenericForwardComposer { @Override public void doAfterCompose(Component comp) throws Exception { lsEmpresa = empresaService.obtenerTodos(); + lsRuta = rutaService.obtenerTodos(); super.doAfterCompose(comp); corridaList.setItemRenderer(new RenderRelatorioOrigemDestinoCorrida()); corridaSelList.setItemRenderer(new RenderRelatorioOrigemDestinoCorridaSelecionadas()); + + cmbParadaOrigemCve.setItemRenderer(new ComboitemRenderer() { + @Override + public void render(Comboitem cmbtm, Object o) throws Exception { + Parada parada = (Parada) o; + + cmbtm.setLabel(parada.getCveparada()); + cmbtm.setValue(parada); + } + }); + + cmbParadaDestinoCve.setItemRenderer(new ComboitemRenderer() { + @Override + public void render(Comboitem cmbtm, Object o) throws Exception { + Parada parada = (Parada) o; + + cmbtm.setLabel(parada.getCveparada()); + cmbtm.setValue(parada); + } + }); } private void executarPesquisa() { HibernateSearchObject rutaBusqueda = new HibernateSearchObject(Corrida.class, pagingCorrida.getPageSize()); + Comboitem cbiOrigem = cmbParadaOrigem.getSelectedItem(); + if (cbiOrigem != null) { + Parada origem = (Parada) cbiOrigem.getValue(); + rutaBusqueda.addFilterEqual("origem", origem); + } + + Comboitem cbiDestino = cmbParadaDestino.getSelectedItem(); + if (cbiDestino != null) { + Parada destino = (Parada) cbiDestino.getValue(); + rutaBusqueda.addFilterEqual("destino", destino); + } + + Comboitem cbiRuta = cmbRuta.getSelectedItem(); + if (cbiRuta != null) { + Ruta ruta = (Ruta) cbiRuta.getValue(); + rutaBusqueda.addFilterEqual("ruta", ruta); + } + + Integer codLinha = txtCodLinha.getValue(); + if (codLinha != null) { + rutaBusqueda.addFilterEqual("ruta.numRuta", codLinha); + } + Date dataDe = DateUtil.normalizar(datInicial.getValue()); Date dataAte = DateUtil.normalizar(datFinal.getValue()); @@ -109,6 +176,20 @@ public class RelatorioOrigemDestinoController extends MyGenericForwardComposer { corridaList.setData(new ArrayList()); bbPesquisaCorrida.setText(""); + cmbParadaOrigem.setText(""); + cmbParadaOrigemCve.setText(""); + cmbParadaDestino.setText(""); + cmbParadaDestinoCve.setText(""); + cmbRuta.setText(""); + + cmbParadaOrigem.setSelectedItem(null); + cmbParadaOrigemCve.setSelectedItem(null); + cmbParadaDestino.setSelectedItem(null); + cmbParadaDestinoCve.setSelectedItem(null); + cmbRuta.setSelectedItem(null); + + txtCorridaId.setValue(null); + txtCodLinha.setValue(null); } public void onClick$btnPesquisa(Event ev) { @@ -133,57 +214,73 @@ public class RelatorioOrigemDestinoController extends MyGenericForwardComposer { Date dataDe = datInicial.getValue(); Date dataAte = datFinal.getValue(); - Boolean trechoSemMovimento = chkTrechoSemMovimento.isChecked(); - if ((trechoSemMovimento) && (lsCorridasSelecionadas.isEmpty())) { - Messagebox.show(Labels.getLabel("relatorioOrigemDestinoController.MSG.trechoSemMovimento"), - Labels.getLabel("relatorioOrigemDestinoController.window.title"), - Messagebox.OK, Messagebox.INFORMATION); + Map parametros = new HashMap(); + parametros.put("BILHETES_GRATUITOS", chkBilhetesGratuitos.isChecked()); + parametros.put("TRECHOS_SEM_MOVIMENTO", chkTrechoSemMovimento.isChecked()); + parametros.put("DATA_DE", sdf.format(dataDe)); + parametros.put("DATA_ATE", sdf.format(dataAte)); + parametros.put("DATA_DE_WHERE", sdf.format(dataDe) + " 00:00:00"); + parametros.put("DATA_ATE_WHERE", sdf.format(dataAte) + " 23:59:59"); + + Comboitem cbiEmpresa = cmbEmpresa.getSelectedItem(); + String empresaId; + String empresas; + if (cbiEmpresa != null) { + Empresa empresa = (Empresa) cbiEmpresa.getValue(); + empresaId = empresa.getEmpresaId().toString(); + empresas = empresa.getNombempresa(); } else { - Map parametros = new HashMap(); - parametros.put("BILHETES_GRATUITOS", chkBilhetesGratuitos.isChecked()); - parametros.put("TRECHOS_SEM_MOVIMENTO", chkTrechoSemMovimento.isChecked()); - parametros.put("DATA_DE", sdf.format(dataDe)); - parametros.put("DATA_ATE", sdf.format(dataAte)); - parametros.put("DATA_DE_WHERE", sdf.format(dataDe) + " 00:00:00"); - parametros.put("DATA_ATE_WHERE", sdf.format(dataAte) + " 23:59:59"); - - Comboitem cbiEmpresa = cmbEmpresa.getSelectedItem(); - String empresaId; - String empresas; - if (cbiEmpresa != null) { - Empresa empresa = (Empresa) cbiEmpresa.getValue(); - empresaId = empresa.getEmpresaId().toString(); - empresas = empresa.getNombempresa(); - } else { - empresaId = "0"; - empresas = ""; - for (int i = 0; i < lsEmpresa.size(); i++) { - Empresa empresa = lsEmpresa.get(i); - empresaId = empresaId + ", " + empresa.getEmpresaId(); - empresas = empresas + ", " + empresa.getNombempresa(); - } + empresaId = "0"; + empresas = ""; + for (int i = 0; i < lsEmpresa.size(); i++) { + Empresa empresa = lsEmpresa.get(i); + empresaId = empresaId + ", " + empresa.getEmpresaId(); + empresas = empresas + ", " + empresa.getNombempresa(); } - parametros.put("EMPRESA_IDS", empresaId); - parametros.put("EMPRESAS", empresas); + } + parametros.put("EMPRESA_IDS", empresaId); + parametros.put("EMPRESAS", empresas); - String corridaIds = ""; - if (!lsCorridasSelecionadas.isEmpty()) { - for (int i = 0; i < lsCorridasSelecionadas.size(); i++) { - Corrida corrida = lsCorridasSelecionadas.get(i); - corridaIds = corridaIds + ", " + corrida.getId().getCorridaId(); - } - } else { - corridaIds = "TTodas"; + String corridaIds = ""; + if (!lsCorridasSelecionadas.isEmpty()) { + for (int i = 0; i < lsCorridasSelecionadas.size(); i++) { + Corrida corrida = lsCorridasSelecionadas.get(i); + corridaIds = corridaIds + ", " + corrida.getId().getCorridaId(); } - parametros.put("CORRIDAS_SELECIONADAS", corridaIds.substring(1, corridaIds.length())); + } else { + corridaIds = "TTodas"; + } + parametros.put("CORRIDAS_SELECIONADAS", corridaIds.substring(1, corridaIds.length())); - Relatorio relatorio = new RelatorioOrigemDestino(parametros, dataSource.getConnection()); + Relatorio relatorio = new RelatorioOrigemDestino(parametros, dataSource.getConnection()); - Map args = new HashMap(); - args.put("relatorio", relatorio); + Map args = new HashMap(); + args.put("relatorio", relatorio); - openWindow("/component/reportView.zul", + openWindow("/component/reportView.zul", Labels.getLabel("relatorioOrigemDestinoController.window.title"), args, MODAL); + } + + public void onSelect$cmbParadaOrigemCve(Event ev) { + if (cmbParadaOrigemCve.getSelectedItem() != null) { + cmbParadaOrigem.setComboItemByParada((Parada) cmbParadaOrigemCve.getSelectedItem().getValue()); + } + } + + public void onSelect$cmbParadaOrigem(Event ev) { + if (cmbParadaOrigem.getSelectedItem() != null) + cmbParadaOrigemCve.setComboItemByParada((Parada) cmbParadaOrigem.getSelectedItem().getValue()); + } + + public void onSelect$cmbParadaDestinoCve(Event ev) { + if (cmbParadaDestinoCve.getSelectedItem() != null) { + cmbParadaDestino.setComboItemByParada((Parada) cmbParadaDestinoCve.getSelectedItem().getValue()); + } + } + + public void onSelect$cmbParadaDestino(Event ev) { + if (cmbParadaDestino.getSelectedItem() != null) { + cmbParadaDestinoCve.setComboItemByParada((Parada) cmbParadaDestino.getSelectedItem().getValue()); } } } diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderRelatorioOrigemDestinoCorrida.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderRelatorioOrigemDestinoCorrida.java index a98a338fa..0bf823e07 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderRelatorioOrigemDestinoCorrida.java +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderRelatorioOrigemDestinoCorrida.java @@ -31,7 +31,12 @@ public class RenderRelatorioOrigemDestinoCorrida implements ListitemRenderer { lc = new Listcell(corrida.getDestino().getDescparada()); lc.setParent(lstm); - lc = new Listcell(corrida.getRuta().getRutaId().toString()); + Integer numRuta = corrida.getRuta().getNumRuta(); + if (numRuta != null) { + lc = new Listcell(numRuta.toString()); + } else { + lc = new Listcell(""); + } lc.setParent(lstm); lc = new Listcell(corrida.getRuta().getDescruta()); diff --git a/web/WEB-INF/i3-label_pt_BR.label b/web/WEB-INF/i3-label_pt_BR.label index ff9ab4978..17895e80e 100644 --- a/web/WEB-INF/i3-label_pt_BR.label +++ b/web/WEB-INF/i3-label_pt_BR.label @@ -7,7 +7,7 @@ # . . = XXX #Versao do VentaBoleto: -versao = ADM_20130821_1RC205 +versao = ADM_20130823_1RC206 # MSG Defaut: MSG.CONSTRAINT.PORCENTAGEM = Os valores devem estar entre 0 e 100 @@ -4437,13 +4437,14 @@ relatorioPassageirosViajarController.lhDescricao.label = Descrição # Relatorio de Origem e Destino relatorioOrigemDestinoController.window.title = Origem e Destino relatorioOrigemDestinoController.lblEmpresa.value = Empresa +relatorioOrigemDestinoController.lbCodLinha.value = Cod. Linha relatorioOrigemDestinoController.lbServico.value = Serviço relatorioOrigemDestinoController.lbFecServico.value = Data Serv. relatorioOrigemDestinoController.lbDataCorrida.value = Data relatorioOrigemDestinoController.horaSaida.label = Hora relatorioOrigemDestinoController.origem.label = Origem relatorioOrigemDestinoController.destino.label = Destino -relatorioOrigemDestinoController.rutaId.label = Cód Linha +relatorioOrigemDestinoController.rutaId.label = Num Linha relatorioOrigemDestinoController.descRuta.label = Linha relatorioOrigemDestinoController.MSG.selecionarCorridas = Selecione algum serviço para gerar o relatório. relatorioOrigemDestinoController.chkBilhetesGratuitos.value = Considerar bilhetes gratuitos diff --git a/web/gui/relatorios/filtroRelatorioOrigemDestino.zul b/web/gui/relatorios/filtroRelatorioOrigemDestino.zul index 6edb14e85..7356b1e98 100644 --- a/web/gui/relatorios/filtroRelatorioOrigemDestino.zul +++ b/web/gui/relatorios/filtroRelatorioOrigemDestino.zul @@ -32,7 +32,7 @@