From 315eff2447c6269f1484e4b763eab0da15104cee Mon Sep 17 00:00:00 2001 From: frederico Date: Thu, 28 Jul 2016 18:04:33 +0000 Subject: [PATCH] fixed bug #7746 git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Web/trunk/ventaboletos@58429 d1611594-4594-4d17-8e1d-87c2c4800839 --- .../impl/RelatorioRemarcacaoDevolucao.java | 118 +++ ...RelatorioRemarcacaoDevolucao_es.properties | 24 + ...atorioRemarcacaoDevolucao_pt_BR.properties | 24 + .../RelatorioRemarcacaoDevolucao.jasper | Bin 0 -> 68477 bytes .../RelatorioRemarcacaoDevolucao.jrxml | 701 ++++++++++++++++++ ...elatorioRemarcacaoDevolucaoController.java | 241 ++++++ .../ItemMenuRelatorioRemarcacaoDevolucao.java | 25 + web/WEB-INF/i3-label_es_MX.label | 8 + web/WEB-INF/i3-label_pt_BR.label | 8 + .../filtroRelatorioRemarcacaoDevolucao.zul | 110 +++ 10 files changed, 1259 insertions(+) create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioRemarcacaoDevolucao.java create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioRemarcacaoDevolucao_es.properties create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioRemarcacaoDevolucao_pt_BR.properties create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioRemarcacaoDevolucao.jasper create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioRemarcacaoDevolucao.jrxml create mode 100644 src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioRemarcacaoDevolucaoController.java create mode 100644 src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioRemarcacaoDevolucao.java create mode 100644 web/gui/relatorios/filtroRelatorioRemarcacaoDevolucao.zul diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioRemarcacaoDevolucao.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioRemarcacaoDevolucao.java new file mode 100644 index 000000000..a4e1ac3e5 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioRemarcacaoDevolucao.java @@ -0,0 +1,118 @@ +package com.rjconsultores.ventaboletos.relatorios.impl; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.rjconsultores.ventaboletos.relatorios.utilitarios.ArrayDataSource; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; +import com.rjconsultores.ventaboletos.service.ConstanteService; +import com.rjconsultores.ventaboletos.utilerias.DateUtil; +import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement; + +public class RelatorioRemarcacaoDevolucao extends Relatorio { + + public RelatorioRemarcacaoDevolucao(Map parametros, Connection conexao, ConstanteService constanteService, final Boolean isRemarcacao) throws Exception { + super(parametros, conexao); + + this.setCustomDataSource(new ArrayDataSource(this) { + + public void initDados() throws Exception { + Connection conexao = this.relatorio.getConexao(); + Map parametros = this.relatorio.getParametros(); + + String sql = getSql((Integer) parametros.get("EMPRESA_ID"), (String) parametros.get("NUMPUNTOVENTA"), isRemarcacao); + + NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql); + + stmt.setTimestamp("data_inicial", new Timestamp(DateUtil.inicioFecha((Date) parametros.get("DATA_INICIAL")).getTime())); + stmt.setTimestamp("data_final", new Timestamp(DateUtil.fimFecha((Date) parametros.get("DATA_FINAL")).getTime())); + + ResultSet rset = stmt.executeQuery(); + + List> data = new ArrayList>(); + + while (rset.next()) { + Map dataResult = new HashMap(); + dataResult.put("dataRemarcacaoDevolucao", rset.getTimestamp("dataRemarcacaoDevolucao")); + dataResult.put("dataVenta", rset.getTimestamp("dataVenta")); + dataResult.put("origem", rset.getString("origem")); + dataResult.put("destino", rset.getString("destino")); + dataResult.put("agencia", rset.getString("agencia")); + dataResult.put("linha", rset.getString("linha")); + dataResult.put("servico", rset.getInt("servico")); + if (isRemarcacao) { + dataResult.put("dataViagemOriginal", rset.getTimestamp("dataViagemOriginal")); + } + dataResult.put("passageiro", rset.getString("passageiro")); + dataResult.put("documento", rset.getString("documento")); + dataResult.put("preco", rset.getBigDecimal("preço")); + dataResult.put("multa", rset.getBigDecimal("multa")); + + data.add(dataResult); + } + + if (!data.isEmpty()) { + Map dataResult = new HashMap(); + dataResult.put("temDados", true); + this.dados.add(dataResult); + parametros.put("data", data); + } + this.resultSet = rset; + } + }); + } + + @Override + protected void processaParametros() throws Exception { + } + + private String getSql(Integer empresaId, String puntoVentasId, Boolean isRemarcacao) { + StringBuilder sql = new StringBuilder(); + + sql.append("SELECT "); + sql.append("boleto.FECHORVENTA as dataRemarcacaoDevolucao, "); + sql.append("boletoOriginal.FECHORVENTA as dataVenta, "); + sql.append("origem.DESCPARADA as origem, "); + sql.append("destino.DESCPARADA as destino, "); + sql.append("agencia.NOMBPUNTOVENTA as agencia, "); + sql.append("linha.DESCRUTA as linha, "); + sql.append("servico.CORRIDA_ID as servico, "); + sql.append(isRemarcacao ? "boletoOriginal.FECHORVIAJE as dataViagemOriginal, " : " "); + sql.append("CASE WHEN cliente.CLIENTE_ID IS NULL THEN boleto.NOMBPASAJERO ELSE cliente.NOMBCLIENTE END as passageiro, "); + sql.append("CASE WHEN cliente.CLIENTE_ID IS NULL THEN boleto.DESCNUMDOC ELSE cliente.NUMIDENTIFICAUNO END as documento, "); + sql.append("boleto.PRECIOPAGADO as preço, "); + sql.append("COALESCE(eventoExtra.IMPINGRESO,0) as multa "); + + sql.append("FROM BOLETO boleto "); + sql.append("INNER JOIN BOLETO boletoOriginal ON boletoOriginal.BOLETO_ID = boleto.BOLETOORIGINAL_ID "); + sql.append("INNER JOIN PARADA origem ON origem.PARADA_ID = boleto.ORIGEN_ID "); + sql.append("INNER JOIN PARADA destino ON destino.PARADA_ID = boleto.DESTINO_ID "); + sql.append("INNER JOIN RUTA linha ON linha.RUTA_ID = boleto.RUTA_ID "); + sql.append("INNER JOIN CORRIDA servico ON (servico.CORRIDA_ID = boleto.CORRIDA_ID AND servico.FECCORRIDA = boleto.FECCORRIDA) "); + sql.append("LEFT JOIN EVENTO_EXTRA eventoExtra ON eventoExtra.BOLETO_ID = boleto.BOLETO_ID "); + sql.append("INNER JOIN MARCA marca ON marca.MARCA_ID = boleto.MARCA_ID "); + sql.append("LEFT JOIN CLIENTE cliente ON cliente.CLIENTE_ID = boleto.CLIENTE_ID "); + sql.append("INNER JOIN PUNTO_VENTA agencia ON agencia.PUNTOVENTA_ID = boleto.PUNTOVENTA_ID "); + + sql.append("WHERE "); + sql.append(isRemarcacao ? "boleto.MOTIVOCANCELACION_ID = 23 " : "boleto.MOTIVOCANCELACION_ID = 32 "); + sql.append(isRemarcacao ? "AND boleto.INDSTATUSBOLETO = 'T' " : " "); + sql.append("AND boleto.FECHORVENTA BETWEEN :data_inicial AND :data_final "); + sql.append("AND boleto.INDCANCELACION = 0 "); + sql.append("AND boleto.INDREIMPRESION = 0 "); + + if (empresaId != null) { + sql.append("AND marca.EMPRESA_ID = ").append(empresaId); + } + if (puntoVentasId != null && !puntoVentasId.isEmpty()) { + sql.append("AND agencia.PUNTOVENTA_ID IN (").append(puntoVentasId).append(") "); + } + return sql.toString(); + } +} diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioRemarcacaoDevolucao_es.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioRemarcacaoDevolucao_es.properties new file mode 100644 index 000000000..3eb284c4f --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioRemarcacaoDevolucao_es.properties @@ -0,0 +1,24 @@ +#geral +msg.noData=Não foi possivel obter dados com os parâmetros informados. +msg.a=à + +#Labels header +header.periodo=Período: +header.data.hora=Data/Hora\: +header.pagina=Página\: +header.filtro=Filtro\: + +#Labels detail +detail.dataRemarcacao=Data Remarcação +detail.dataDevolucao=Data Devolucação +detail.dataVenta=Data Venda +detail.origem=Origem +detail.destino=Destino +detail.agencia=Agência +detail.linha=Linha +detail.servico=Serviço +detail.dataViagemOriginal=Data Viagem Original +detail.passageiro=Passageiro +detail.documento=Doc +detail.preco=Preço +detail.multa=Multa diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioRemarcacaoDevolucao_pt_BR.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioRemarcacaoDevolucao_pt_BR.properties new file mode 100644 index 000000000..3eb284c4f --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioRemarcacaoDevolucao_pt_BR.properties @@ -0,0 +1,24 @@ +#geral +msg.noData=Não foi possivel obter dados com os parâmetros informados. +msg.a=à + +#Labels header +header.periodo=Período: +header.data.hora=Data/Hora\: +header.pagina=Página\: +header.filtro=Filtro\: + +#Labels detail +detail.dataRemarcacao=Data Remarcação +detail.dataDevolucao=Data Devolucação +detail.dataVenta=Data Venda +detail.origem=Origem +detail.destino=Destino +detail.agencia=Agência +detail.linha=Linha +detail.servico=Serviço +detail.dataViagemOriginal=Data Viagem Original +detail.passageiro=Passageiro +detail.documento=Doc +detail.preco=Preço +detail.multa=Multa diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioRemarcacaoDevolucao.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioRemarcacaoDevolucao.jasper new file mode 100644 index 0000000000000000000000000000000000000000..8cb62a50f7c6637c97b68f05c4ccc1dbeed01adc GIT binary patch literal 68477 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 YLp(1piLhxYUHGyPN75VAwJhQP2kkrq)Bpeg literal 0 HcmV?d00001 diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioRemarcacaoDevolucao.jrxml b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioRemarcacaoDevolucao.jrxml new file mode 100644 index 000000000..20dee5f47 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioRemarcacaoDevolucao.jrxml @@ -0,0 +1,701 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <band height="94" splitType="Stretch"> + <textField pattern="dd/MM/yyyy HH:mm"> + <reportElement uuid="1d25eae5-3bdd-4191-b928-a22eaf7e5a03" x="732" y="0" width="98" height="20"/> + <textElement textAlignment="Left"/> + <textFieldExpression><![CDATA[new java.util.Date()]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="be5f7ffc-da87-44a0-bfcc-84cd0f66f36a" x="676" y="0" width="56" height="20"/> + <textElement/> + <textFieldExpression><![CDATA[$R{header.data.hora}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="d4b4816b-da66-4d25-9c22-d30bd55dc34c" x="781" y="20" width="27" height="20"/> + <textElement textAlignment="Right"/> + <textFieldExpression><![CDATA[$V{PAGE_NUMBER}+" de"]]></textFieldExpression> + </textField> + <textField evaluationTime="Report"> + <reportElement uuid="5f47e34e-efae-4d91-b7ca-04aecfc909f5" x="808" y="20" width="22" height="20"/> + <textElement textAlignment="Right"/> + <textFieldExpression><![CDATA[" " + $V{PAGE_NUMBER}]]></textFieldExpression> + </textField> + <textField pattern="dd/MM/yyyy" isBlankWhenNull="false"> + <reportElement uuid="3329905a-f0cd-4788-8a38-722dc6d4f9a7" x="49" y="20" width="77" height="20"/> + <textElement/> + <textFieldExpression><![CDATA[$P{DATA_INICIAL}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="11d7e7d5-9128-40a8-ae73-406b86f9bee8" x="744" y="20" width="37" height="20"/> + <textElement/> + <textFieldExpression><![CDATA[$R{header.pagina}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="d0939e91-23cf-4ecf-9dce-272002419d19" x="0" y="0" width="231" height="20"/> + <textElement/> + <textFieldExpression><![CDATA[$P{TITULO}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="201503fc-95d2-4d13-a2f4-39e0a786fc57" x="0" y="20" width="49" height="20"/> + <textElement/> + <textFieldExpression><![CDATA[$R{header.periodo}]]></textFieldExpression> + </textField> + <textField pattern="dd/MM/yyyy" isBlankWhenNull="false"> + <reportElement uuid="8ba1afc9-cc5f-4947-ab31-cb7273ad8123" x="164" y="20" width="78" height="20"/> + <textElement/> + <textFieldExpression><![CDATA[$P{DATA_FINAL}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="9edd4bc8-ce45-47d4-90f5-59f0def26e72" x="126" y="20" width="38" height="20"/> + <textElement textAlignment="Center"/> + <textFieldExpression><![CDATA[$R{msg.a}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="1340c66f-18a6-421d-905a-aa5c863b6192" x="49" y="74" width="742" height="20"/> + <textElement/> + <textFieldExpression><![CDATA[$P{FILTROS}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="4c4004ee-7bb0-4438-81f8-86d8c7d2fefe" x="0" y="74" width="49" height="20"/> + <textElement/> + <textFieldExpression><![CDATA[$R{header.filtro}]]></textFieldExpression> + </textField> + </band> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioRemarcacaoDevolucaoController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioRemarcacaoDevolucaoController.java new file mode 100644 index 000000000..2acb5d1e1 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioRemarcacaoDevolucaoController.java @@ -0,0 +1,241 @@ +package com.rjconsultores.ventaboletos.web.gui.controladores.relatorios; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.sql.DataSource; + +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.Comboitem; +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.RelatorioRemarcacaoDevolucao; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; +import com.rjconsultores.ventaboletos.service.ConstanteService; +import com.rjconsultores.ventaboletos.service.EmpresaService; +import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado; +import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEstandar; +import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer; +import com.rjconsultores.ventaboletos.web.utilerias.MyListbox; +import com.rjconsultores.ventaboletos.web.utilerias.MyTextbox; +import com.rjconsultores.ventaboletos.web.utilerias.paginacion.HibernateSearchObject; +import com.rjconsultores.ventaboletos.web.utilerias.paginacion.PagedListWrapper; +import com.rjconsultores.ventaboletos.web.utilerias.render.RenderRelatorioVendasBilheteiro; +import com.rjconsultores.ventaboletos.web.utilerias.render.RenderRelatorioVendasBilheteiroSelecionados; + +@Controller("relatorioRemarcacaoDevolucaoController") +@Scope("prototype") +public class RelatorioRemarcacaoDevolucaoController extends MyGenericForwardComposer { + + private static final long serialVersionUID = 1L; + + private Datebox datInicial; + private Datebox datFinal; + private MyComboboxEstandar cmbEmpresa; + private List lsEmpresa; + private Paging pagingPuntoVenta; + private MyTextbox txtNombrePuntoVenta; + private MyListbox puntoVentaList; + private MyListbox puntoVentaSelList; + + private Radio rdbTipoRemarcao; + + @Autowired + private EmpresaService empresaService; + @Autowired + private ConstanteService constanteService; + @Autowired + private DataSource dataSourceRead; + @Autowired + private transient PagedListWrapper plwPuntoVenta; + + @Override + public void doAfterCompose(Component comp) throws Exception { + lsEmpresa = empresaService.obtenerTodos(); + super.doAfterCompose(comp); + puntoVentaList.setItemRenderer(new RenderRelatorioVendasBilheteiro()); + puntoVentaSelList.setItemRenderer(new RenderRelatorioVendasBilheteiroSelecionados()); + rdbTipoRemarcao.setSelected(true); + } + + /** + * @throws Exception + * + */ + @SuppressWarnings({ "rawtypes", "unchecked" }) + private void executarRelatorio() throws Exception { + { + if (datInicial != null && datFinal != null && datFinal.getValue().compareTo(datInicial.getValue()) < 0) { + try { + Messagebox.show(Labels.getLabel("MSG.ningunRegistro"), + Labels.getLabel("relatorioCancelamentoVendaCartaoController.window.title"), + Messagebox.OK, Messagebox.INFORMATION); + } catch (InterruptedException ex) { + ex.printStackTrace(); + } + } else + { + Relatorio relatorio; + + Map parametros = new HashMap(); + + String titulo = rdbTipoRemarcao.isSelected() ? + Labels.getLabel("relatorioRemarcacaoDevolucao.relatorioRemarcacao.title") + : Labels.getLabel("relatorioRemarcacaoDevolucao.relatorioDevolução.title"); + + StringBuilder filtro = new StringBuilder(); + + filtro.append("Início período: "); + Calendar cal = Calendar.getInstance(); + cal.setTime(datInicial.getValue()); + filtro.append(cal.get(Calendar.DATE) + "/"); + filtro.append((cal.get(Calendar.MONTH) + 1) + "/"); + filtro.append(cal.get(Calendar.YEAR) + "; "); + + filtro.append("Fim período: "); + cal.setTime(datFinal.getValue()); + filtro.append(cal.get(Calendar.DATE) + "/"); + filtro.append((cal.get(Calendar.MONTH) + 1) + "/"); + filtro.append(cal.get(Calendar.YEAR) + "; "); + + parametros.put("DATA_INICIAL", (java.util.Date) datInicial.getValue()); + parametros.put("DATA_FINAL", (java.util.Date) datFinal.getValue()); + + parametros.put("TITULO", titulo); + + parametros.put("USUARIO", UsuarioLogado.getUsuarioLogado().getUsuarioId().toString()); + parametros.put("USUARIO_NOME", UsuarioLogado.getUsuarioLogado().getNombusuario()); + + filtro.append("Empresa: "); + Comboitem itemEmpresa = cmbEmpresa.getSelectedItem(); + if (itemEmpresa != null) { + Empresa empresa = (Empresa) itemEmpresa.getValue(); + parametros.put("EMPRESA_ID", empresa.getEmpresaId()); + filtro.append(empresa.getNombempresa() + ";"); + } else { + filtro.append(" Todas;"); + } + + filtro.append("Agência: "); + String puntoVentas = ""; + List lsPuntoVentaSelecionados = new ArrayList(Arrays.asList(puntoVentaSelList.getData())); + if (lsPuntoVentaSelecionados.isEmpty()) { + puntoVentas = "Todas"; + } else { + StringBuilder puntoVentaIds = new StringBuilder(); + for (int i = 0; i < lsPuntoVentaSelecionados.size(); i++) { + PuntoVenta puntoVenta = lsPuntoVentaSelecionados.get(i); + puntoVentas = puntoVentas + puntoVenta.getNombpuntoventa() + ","; + if (puntoVentaIds.length() > 0) { + puntoVentaIds.append(","); + } + puntoVentaIds.append(puntoVenta.getPuntoventaId()); + } + parametros.put("NUMPUNTOVENTA", puntoVentaIds.toString()); + } + filtro.append(puntoVentas).append(";"); + parametros.put("FILTROS", filtro.toString()); + parametros.put("IS_REMARCACAO", rdbTipoRemarcao.isSelected()); + relatorio = new RelatorioRemarcacaoDevolucao(parametros, dataSourceRead.getConnection(), constanteService, rdbTipoRemarcao.isSelected()); + + Map args = new HashMap(); + args.put("relatorio", relatorio); + + openWindow("/component/reportView.zul", titulo, args, MODAL); + } + } + } + + public void onClick$btnExecutarRelatorio(Event ev) throws Exception { + executarRelatorio(); + } + + private void executarPesquisa() { + HibernateSearchObject puntoVentaBusqueda = + new HibernateSearchObject(PuntoVenta.class, pagingPuntoVenta.getPageSize()); + + puntoVentaBusqueda.addFilterILike("nombpuntoventa", "%" + txtNombrePuntoVenta.getValue() + "%"); + puntoVentaBusqueda.addFilterEqual("activo", Boolean.TRUE); + + puntoVentaBusqueda.addSortAsc("nombpuntoventa"); + + puntoVentaBusqueda.addFilterEqual("activo", Boolean.TRUE); + + plwPuntoVenta.init(puntoVentaBusqueda, puntoVentaList, pagingPuntoVenta); + + if (puntoVentaList.getData().length == 0) { + try { + Messagebox.show(Labels.getLabel("MSG.ningunRegistro"), + Labels.getLabel("relatorioVendasBilheteiroController.window.title"), + Messagebox.OK, Messagebox.INFORMATION); + } catch (InterruptedException ex) { + ex.printStackTrace(); + } + } + } + + public void onClick$btnPesquisa(Event ev) { + executarPesquisa(); + } + + public void onClick$btnLimpar(Event ev) { + puntoVentaList.setData(new ArrayList()); + txtNombrePuntoVenta.setText(""); + } + + public void onDoubleClick$puntoVentaSelList(Event ev) { + PuntoVenta puntoVenta = (PuntoVenta) puntoVentaSelList.getSelected(); + puntoVentaSelList.removeItem(puntoVenta); + } + + public void onDoubleClick$puntoVentaList(Event ev) { + PuntoVenta puntoVenta = (PuntoVenta) puntoVentaList.getSelected(); + puntoVentaSelList.addItemNovo(puntoVenta); + } + + public Datebox getDatInicial() { + return datInicial; + } + + public void setDatInicial(Datebox datInicial) { + this.datInicial = datInicial; + } + + public Datebox getDatFinal() { + return datFinal; + } + + public void setDatFinal(Datebox datFinal) { + this.datFinal = datFinal; + } + + public List getLsEmpresa() { + return lsEmpresa; + } + + public void setLsEmpresa(List lsEmpresa) { + this.lsEmpresa = lsEmpresa; + } + + public MyComboboxEstandar getCmbEmpresa() { + return cmbEmpresa; + } + + public void setCmbEmpresa(MyComboboxEstandar cmbEmpresa) { + this.cmbEmpresa = cmbEmpresa; + } +} diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioRemarcacaoDevolucao.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioRemarcacaoDevolucao.java new file mode 100644 index 000000000..eb7f2c6e0 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioRemarcacaoDevolucao.java @@ -0,0 +1,25 @@ +package com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios; + +import org.zkoss.util.resource.Labels; + +import com.rjconsultores.ventaboletos.web.utilerias.PantallaUtileria; +import com.rjconsultores.ventaboletos.web.utilerias.menu.DefaultItemMenuSistema; + +public class ItemMenuRelatorioRemarcacaoDevolucao extends DefaultItemMenuSistema { + + public ItemMenuRelatorioRemarcacaoDevolucao() { + super("indexController.mniRelatorioRemarcacaoDevolucao.label"); + } + + @Override + public String getClaveMenu() { + return "COM.RJCONSULTORES.ADMINISTRACION.GUI.RELATORIOS.MENU.RELATORIOREMARCACAODEVOLUCAO"; + } + + @Override + public void ejecutar() { + PantallaUtileria.openWindow("/gui/relatorios/filtroRelatorioRemarcacaoDevolucao.zul", + Labels.getLabel("relatorioRemarcacaoDevolucao.window.title"), getArgs(), desktop); + } + +} diff --git a/web/WEB-INF/i3-label_es_MX.label b/web/WEB-INF/i3-label_es_MX.label index 84f2211d1..82a632329 100644 --- a/web/WEB-INF/i3-label_es_MX.label +++ b/web/WEB-INF/i3-label_es_MX.label @@ -6560,3 +6560,11 @@ relatorioErrosIntegracaoBGMController.btnPesquisa.label = Buscar relatorioErrosIntegracaoBGMController.btnLimpar.label = Limpar relatorioErrosIntegracaoBGMController.lbNumero.value = Número Agência +# Relatorio Remarcacao Devolucao +indexController.mniRelatorioRemarcacaoDevolucao.label = Relatório Remarcação/Devolução +relatorioRemarcacaoDevolucao.window.title = Relatório Remarcação/Devolução +relatorioRemarcacaoDevolucao.relatorioRemarcacao.title = Relatório de Remarcação +relatorioRemarcacaoDevolucao.relatorioDevolução.title = Relatório de Devolução +relatorioRemarcacaoDevolucao.remarcacao.value = Remarcação +relatorioRemarcacaoDevolucao.devolucao.value = Devolucação +relatorioRemarcacaoDevolucao.tipo.label = Tipo diff --git a/web/WEB-INF/i3-label_pt_BR.label b/web/WEB-INF/i3-label_pt_BR.label index 6b7d1bf4d..7b3a4723c 100644 --- a/web/WEB-INF/i3-label_pt_BR.label +++ b/web/WEB-INF/i3-label_pt_BR.label @@ -6699,4 +6699,12 @@ relatorioErrosIntegracaoBGMController.btnLimpar.label = Limpar relatorioErrosIntegracaoBGMController.lbNumero.value = Número Agência +# Relatorio Remarcacao Devolucao +indexController.mniRelatorioRemarcacaoDevolucao.label = Relatório Remarcação/Devolução +relatorioRemarcacaoDevolucao.window.title = Relatório Remarcação/Devolução +relatorioRemarcacaoDevolucao.relatorioRemarcacao.title = Relatório de Remarcação +relatorioRemarcacaoDevolucao.relatorioDevolução.title = Relatório de Devolução +relatorioRemarcacaoDevolucao.remarcacao.value = Remarcação +relatorioRemarcacaoDevolucao.devolucao.value = Devolucação +relatorioRemarcacaoDevolucao.tipo.label = Tipo diff --git a/web/gui/relatorios/filtroRelatorioRemarcacaoDevolucao.zul b/web/gui/relatorios/filtroRelatorioRemarcacaoDevolucao.zul new file mode 100644 index 000000000..bd72c5e0b --- /dev/null +++ b/web/gui/relatorios/filtroRelatorioRemarcacaoDevolucao.zul @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + +