From 1cd7282971bc6bf743105ca97c6e8c9d80ef9909 Mon Sep 17 00:00:00 2001 From: "thiago.clemente" Date: Fri, 30 Aug 2019 16:36:15 +0000 Subject: [PATCH] fixes bug#15134 dev: qua: git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Web/trunk/ventaboletos@97121 d1611594-4594-4d17-8e1d-87c2c4800839 --- .../impl/RelatorioMovimentacaoBilhete.java | 505 +++++++++++ ...RelatorioMovimentacaoBilhete_es.properties | 54 ++ ...atorioMovimentacaoBilhete_pt_BR.properties | 54 ++ .../RelatorioMovimentacaoBilhete.jasper | Bin 0 -> 73737 bytes .../RelatorioMovimentacaoBilhete.jrxml | 800 ++++++++++++++++++ .../utilitarios/RelatorioGratuidadeBean.java | 113 ++- ...elatorioMovimentacaoBilheteController.java | 267 ++++++ .../ItemMenuRelatorioMovimentacaoBilhete.java | 25 + .../utilerias/menu/menu_original.properties | 1 + web/WEB-INF/i3-label_es_MX.label | 25 +- web/WEB-INF/i3-label_pt_BR.label | 25 +- .../filtroRelatorioMovimentacaoBilhete.zul | 157 ++++ 12 files changed, 2022 insertions(+), 4 deletions(-) create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioMovimentacaoBilhete.java create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioMovimentacaoBilhete_es.properties create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioMovimentacaoBilhete_pt_BR.properties create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioMovimentacaoBilhete.jasper create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioMovimentacaoBilhete.jrxml create mode 100644 src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioMovimentacaoBilheteController.java create mode 100644 src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioMovimentacaoBilhete.java create mode 100644 web/gui/relatorios/filtroRelatorioMovimentacaoBilhete.zul diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioMovimentacaoBilhete.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioMovimentacaoBilhete.java new file mode 100644 index 000000000..7b87699cf --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioMovimentacaoBilhete.java @@ -0,0 +1,505 @@ +package com.rjconsultores.ventaboletos.relatorios.impl; + +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 com.rjconsultores.ventaboletos.constantes.Constantes; +import com.rjconsultores.ventaboletos.enums.RelatorioMovimentacaoBilheteStatusEnum; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.DataSource; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.RelatorioGratuidadeBean; +import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement; + +import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; + +public class RelatorioMovimentacaoBilhete extends Relatorio { + + private List lsDadosRelatorio; + + public RelatorioMovimentacaoBilhete(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 fecInicioViagem = null; + if (parametros.containsKey("fecInicioViagem")) { + fecInicioViagem = parametros.get("fecInicioViagem").toString() + " 00:00"; + } + + String fecFinalViagem = null; + if (parametros.containsKey("fecFinalViagem")) { + fecFinalViagem = parametros.get("fecFinalViagem").toString() + " 23:59"; + } + + String fecInicioVenda = null; + if (parametros.containsKey("fecInicioVenda")) { + fecInicioVenda = parametros.get("fecInicioVenda").toString() + " 00:00"; + } + + String fecFinalVenda = null; + if (parametros.containsKey("fecFinalVenda")) { + fecFinalVenda = parametros.get("fecFinalVenda").toString() + " 23:59"; + } + + Integer empresa_id = (Integer) parametros.get("empresa_id"); + Integer agencia_id = (Integer) parametros.get("agencia_id"); + Integer ruta_id = (Integer) parametros.get("ruta_id"); + Integer origem_id = (Integer) parametros.get("origem_id"); + Integer destino_id = (Integer) parametros.get("destino_id"); + Integer orgaoConcedente_id = (Integer) parametros.get("orgao_concedente_id"); + RelatorioMovimentacaoBilheteStatusEnum status = (RelatorioMovimentacaoBilheteStatusEnum) parametros.get("status"); + String categoria_id = (String) parametros.get("categoria_id"); + Integer mcAlteracaoPoltrona = (Integer) (parametros.get("mcAlteracaoPoltrona") != null ? parametros.get("mcAlteracaoPoltrona") : null); + + String sql = getSql(fecInicioViagem, fecFinalViagem, fecInicioVenda, fecFinalVenda, empresa_id, agencia_id, ruta_id, origem_id, destino_id, orgaoConcedente_id, status, categoria_id, mcAlteracaoPoltrona); + + NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql); + + if (fecInicioViagem != null) { + stmt.setString("fecInicioViagem", fecInicioViagem); + } + + if (fecFinalViagem != null) { + stmt.setString("fecFinalViagem", fecFinalViagem); + } + + if (fecInicioVenda != null) { + stmt.setString("fecInicioVenda", fecInicioVenda); + } + + if (fecFinalVenda != null) { + stmt.setString("fecFinalVenda", fecFinalVenda); + } + + if (empresa_id != null) { + stmt.setInt("empresa_id", empresa_id); + } + + if (agencia_id != null) { + stmt.setInt("puntoventa_id", agencia_id); + } + + if (ruta_id != null) { + stmt.setInt("ruta_id", ruta_id); + } + + if (origem_id != null) { + stmt.setInt("origem_id", origem_id); + } + + if (destino_id != null) { + stmt.setInt("destino_id", destino_id); + } + + if (orgaoConcedente_id != null && !orgaoConcedente_id.equals(-1)) { + stmt.setInt("orgao_concedente_id", orgaoConcedente_id); + } + + if (mcAlteracaoPoltrona != null) { + stmt.setInt("mcAlteracaoPoltrona", mcAlteracaoPoltrona); + } + + stmt.setString("bpeEventoAlteracaoPoltrona", Constantes.BPE_ALTERACAO_POLTRONA); + + ResultSet rset = stmt.executeQuery(); + + lsDadosRelatorio = new ArrayList(); + + SimpleDateFormat hora = new SimpleDateFormat("HH:mm"); + SimpleDateFormat data = new SimpleDateFormat("dd/MM/yyyy"); + + while (rset.next()) { + String indstatusboleto = rset.getString("INDSTATUSBOLETO"); + if (indstatusboleto == null) { + indstatusboleto = ""; + } + + if (!addBean(status, indstatusboleto)) { + continue; + } + + RelatorioGratuidadeBean gratuidadeBean = new RelatorioGratuidadeBean(); + gratuidadeBean.setTarifa(rset.getBigDecimal("precio")); + gratuidadeBean.setCcf(rset.getString("ccf")); + gratuidadeBean.setCorridaId(rset.getString("corrida_id")); + gratuidadeBean.setCveusuario(rset.getString("cveusuario")); + gratuidadeBean.setDescnumdoc(rset.getString("descnumdoc")); + gratuidadeBean.setDesctipoventa(rset.getString("desctipoventa")); + gratuidadeBean.setDestino(rset.getString("destino")); + gratuidadeBean.setFeccreacion(rset.getDate("feccreacion")); + gratuidadeBean.setFecdatviaje(rset.getTimestamp("fechorviaje") != null ? data.format(rset.getTimestamp("fechorviaje")) : ""); + gratuidadeBean.setFechorviaje(rset.getTimestamp("fechorviaje") != null ? hora.format(rset.getTimestamp("fechorviaje")) : ""); + gratuidadeBean.setKm(rset.getInt("numkmviaje")); + gratuidadeBean.setLinha(rset.getString("descruta")); + gratuidadeBean.setNombpasajero(rset.getString("nombpasajero")); + gratuidadeBean.setNombpuntoventa(rset.getString("nombpuntoventa")); + gratuidadeBean.setOrigen(rset.getString("origen")); + gratuidadeBean.setPorccategoria(rset.getBigDecimal("porccategoria")); + gratuidadeBean.setPreciooriginal(rset.getBigDecimal("preciooriginal")); + gratuidadeBean.setPreciopagado(rset.getBigDecimal("preciopagado")); + gratuidadeBean.setNombempresa(rset.getString("nombempresa")); + gratuidadeBean.setCvecategoria(rset.getString("cvecategoria")); + gratuidadeBean.setNumasiento(rset.getString("numasiento")); + gratuidadeBean.setDescorigen(rset.getString("descorigen")); + gratuidadeBean.setDescdestino(rset.getString("descdestino")); + gratuidadeBean.setNumfoliosistema(rset.getString("numfoliosistema")); + gratuidadeBean.setTipoDoc(rset.getString("desctipodoc")); + 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(indstatusboleto); + gratuidadeBean.setCodOrigem(rset.getString("codOrigem")); + gratuidadeBean.setCodDestino(rset.getString("codDestino")); + gratuidadeBean.setDescorgao(rset.getString("descorgao")); + + // Mantis 15134 + gratuidadeBean.setDireccionnumero(rset.getString("direccionnumero")); + gratuidadeBean.setDataEmissao(rset.getDate("fechorventa")); + gratuidadeBean.setNumRuta(rset.getString("numruta")); + gratuidadeBean.setPrefixo(rset.getString("prefixo")); + gratuidadeBean.setSerie(rset.getString("serie")); + gratuidadeBean.setSubserie(rset.getString("subserie")); + gratuidadeBean.setNumbpe(rset.getString("num_bpe")); + + if (indstatusboleto.equalsIgnoreCase("TROCA PASSAGEM") + || indstatusboleto.equalsIgnoreCase("TRANSFERÊNCIA") + || indstatusboleto.equalsIgnoreCase("REATIVADO") + || indstatusboleto.equalsIgnoreCase("TROCA TITULARIDADE") + || indstatusboleto.equalsIgnoreCase("TROCA POLTRONA")) { + gratuidadeBean.setSerienovo(rset.getString("serienovo")); + gratuidadeBean.setSubserienovo(rset.getString("subserienovo")); + gratuidadeBean.setCcfnovo(rset.getString("ccfnovo")); + gratuidadeBean.setBpenovo(rset.getString("bpenovo")); + } + + lsDadosRelatorio.add(gratuidadeBean); + } + + if (lsDadosRelatorio.size() > 0) { + setLsDadosRelatorio(lsDadosRelatorio); + } + } + }); + } + + @Override + protected void processaParametros() throws Exception { + } + + private boolean addBean(RelatorioMovimentacaoBilheteStatusEnum status, String indstatusboleto) { + if (status != null && !indstatusboleto.equals("")) { + return indstatusboleto.equalsIgnoreCase(status.getDescricao()) || indstatusboleto.equalsIgnoreCase(status.getRelacionado()); + } + + return true; + } + + private void setLsDadosRelatorio(List lsDadosRelatorio) { + this.setCollectionDataSource(new JRBeanCollectionDataSource(lsDadosRelatorio)); + this.lsDadosRelatorio = lsDadosRelatorio; + } + + private String getSql(String fecInicioViagem, String fecFinalViagem, String fecInicioVenda, String fecFinalVenda, Integer empresa_id, Integer agencia_id, Integer ruta_id, Integer origem_id, Integer destino_id, Integer orgaoConcedente_id, RelatorioMovimentacaoBilheteStatusEnum status, String categoria_id, Integer mcAlteracaoPoltrona) { + StringBuilder sb = new StringBuilder(); + sb.append("SELECT * "); + sb.append("FROM "); + sb.append(" (SELECT b.boletooriginal_id, b.boleto_id,"); + sb.append(" b.ccf,"); + sb.append(" og.descorgao,"); + sb.append(" b.feccreacion,"); + sb.append(" ori.cveparada origen,"); + sb.append(" des.cveparada destino,"); + sb.append(" ori.descparada descorigen,"); + sb.append(" des.descparada descdestino,"); + sb.append(" b.numkmviaje,"); + sb.append(" r.descruta,"); + sb.append(" b.corrida_id,"); + sb.append(" b.fechorviaje,"); + sb.append(" b.numasiento,"); + sb.append(" b.numfoliosistema,"); + sb.append(" case when b.tipoventa_id in(5,12,18,41,49) then 'PTA' else tv.desctipoventa end as desctipoventa, "); + sb.append(" b.nombpasajero,"); + sb.append(" b.descnumdoc,"); + sb.append(" tar.preciooriginal,"); + sb.append(" tar.precio,"); + sb.append(" case when b.PRECIOBASE > 0 then TRUNC(((100 - (b.PRECIOPAGADO * 100) / b.PRECIOBASE)),2) else 0 end as porccategoria, "); + sb.append(" (select sum(bfpv.importe) from boleto_formapago bfpv where bfpv.boleto_id = b.boleto_id and bfpv.activo = 1) as preciopagado, ");; + sb.append(" u.cveusuario,"); + sb.append(" ag.nombpuntoventa,"); + sb.append(" ag.direccionnumero,"); + sb.append(" e.nombempresa,"); + sb.append(" ca.cvecategoria,"); + sb.append(" b.desctipodoc,"); + sb.append(" ca.desccategoria,"); + sb.append(" b.importepedagio,"); + sb.append(" b.importeseguro,"); + sb.append(" b.importetaxaembarque, "); + sb.append(" case "); + sb.append(" when b.motivocancelacion_id = 11 "); + sb.append(" and b.indcancelacion = 0 then 'RESERVA' "); + sb.append(" when b.motivocancelacion_id = 9 then 'CONFIRMA RESERVA' "); + sb.append(" when b.motivocancelacion_id = 11 "); + sb.append(" and b.indcancelacion = 1 then 'LIBERA RESERVA' "); + sb.append(" when b.motivocancelacion_id = 12 then 'LIBERA.RESERVA AUTO' "); + sb.append(" when b.indreimpresion = 1 and b.motivoreimpresion_id = 99 then 'REIMPRESSO' "); + sb.append(" else b.indstatusboleto "); + sb.append(" end as indstatusboleto, "); + sb.append(" ori.cveparada codorigem,"); + sb.append(" des.cveparada coddestino,"); + sb.append(" b.fechorventa fechorventa,"); + sb.append(" r.numruta,"); + sb.append(" r.prefixo,"); + sb.append(" aidf.serie serie, "); + sb.append(" aidf.subserie subserie, "); + sb.append(" bpe.num_bpe num_bpe, "); + sb.append(" bpe.chbpe chbpe, "); + sb.append(" bpe.nprot nprot, "); + sb.append(" 'N/A' as serienovo , "); + sb.append(" 'N/A' as subserienovo , "); + sb.append(" 'N/A' as ccfnovo , "); + sb.append(" 'N/A' as bpenovo "); + sb.append(" FROM boleto b"); + sb.append(" JOIN categoria ca ON b.categoria_id = ca.categoria_id"); + sb.append(" JOIN parada ori ON ori.parada_id = b.origen_id"); + sb.append(" JOIN parada des ON des.parada_id = b.destino_id"); + sb.append(" JOIN ruta r ON r.ruta_id = b.ruta_id"); + sb.append(" JOIN tipo_venta tv ON tv.tipoventa_id = b.tipoventa_id"); + sb.append(" JOIN punto_venta ag ON ag.puntoventa_id = b.puntoventa_id"); + sb.append(" JOIN usuario u ON u.usuario_id = b.usuario_id"); + sb.append(" JOIN vigencia_tarifa vt ON b.fechorventa BETWEEN vt.feciniciovigencia AND vt.fecfinvigencia and vt.activo = 1"); + sb.append(" JOIN tarifa tar ON (tar.ruta_id = b.ruta_id"); + sb.append(" AND tar.marca_id = b.marca_id"); + sb.append(" AND tar.claseservicio_id = b.claseservicio_id"); + sb.append(" AND tar.vigenciatarifa_id = vt.vigenciatarifa_id"); + sb.append(" AND tar.origen_id = b.origen_id"); + sb.append(" AND tar.destino_id = b.destino_id and tar.activo = 1)"); + sb.append(" JOIN marca m on m.marca_id = b.marca_id"); + sb.append(" JOIN empresa e on e.empresa_id = m.empresa_id"); + sb.append(" JOIN orgao_concedente og ON og.orgaoconcedente_id = tar.orgaoconcedente_id"); + sb.append(" LEFT JOIN AIDF AIDF ON AIDF.AIDF_ID = B.AIDF_ID "); + sb.append(" left join bpe bpe on bpe.boleto_id = b.boleto_id "); + sb.append(" WHERE 1=1 and b.tipoventa_id = 15"); + sb.append(" AND b.indstatusboleto = 'S' "); + + if (fecInicioViagem != null && fecFinalViagem != null) { + sb.append("AND b.feccorrida BETWEEN TO_DATE(:fecInicioViagem,'dd/mm/yyyy hh24:mi') AND TO_DATE(:fecFinalViagem,'dd/mm/yyyy hh24:mi') "); + } + + if (fecInicioVenda != null && fecFinalVenda != null) { + sb.append("AND b.fechorventa BETWEEN TO_DATE(:fecInicioVenda,'dd/mm/yyyy hh24:mi') AND TO_DATE(:fecFinalVenda,'dd/mm/yyyy hh24:mi') "); + } + + if (empresa_id != null) { + sb.append("AND e.empresa_id = :empresa_id "); + } + + if (agencia_id != null) { + sb.append("AND b.puntoventa_id = :puntoventa_id "); + } + + if (ruta_id != null) { + sb.append("AND b.ruta_id = :ruta_id "); + } + + if (origem_id != null) { + sb.append("AND ori.parada_id = :origem_id "); + } + + if (destino_id != null) { + sb.append("AND des.parada_id = :destino_id "); + } + + if (categoria_id != null && !categoria_id.isEmpty()) { + sb.append("AND ca.categoria_id in (" + categoria_id + ") "); + } + + if (orgaoConcedente_id != null && !orgaoConcedente_id.equals(-1)) { + sb.append("AND r.orgaoconcedente_id = :orgao_concedente_id "); + } + + sb.append(" "); + sb.append(" UNION ALL "); + sb.append(" "); + sb.append(" SELECT c.transacaooriginal_id, c.transacao_id,"); + sb.append(" c.ccf,"); + sb.append(" og.descorgao,"); + sb.append(" c.feccreacion,"); + sb.append(" ori.cveparada origen,"); + sb.append(" des.cveparada destino,"); + sb.append(" ori.descparada descorigen,"); + sb.append(" des.descparada descdestino,"); + sb.append(" c.numkmviaje,"); + sb.append(" r.descruta,"); + sb.append(" c.corrida_id,"); + sb.append(" c.fechorviaje,"); + sb.append(" c.numasiento,"); + sb.append(" c.numfoliosistema,"); + sb.append(" case when c.numfoliopreimpreso is null then 'PTA' when c.tipoventa_id = '81' then 'VENDA DE TRANSFERENCIA' when c.tipoventa_id = '82' then 'CONFIRM.VEND.ABERTO' when c.tipoventa_id = '8' then 'TROCA' else tv.desctipoventa end as desctipoventa, "); + sb.append(" c.nombpasajero,"); + sb.append(" c.descnumdoc,"); + sb.append(" tar.preciooriginal,"); + sb.append(" tar.precio,"); + sb.append(" case when c.PRECIOBASE > 0 then TRUNC(((100 - (c.PRECIOPAGADO * 100) / c.PRECIOBASE)),2) else 0 end as porccategoria, "); + sb.append(" (select sum(cfpv.importe) from caja_formapago cfpv where cfpv.caja_id = c.caja_id and cfpv.activo = 1) as preciopagado, "); + sb.append(" u.cveusuario,"); + sb.append(" ag.nombpuntoventa,"); + sb.append(" ag.direccionnumero,"); + sb.append(" e.nombempresa,"); + sb.append(" ca.cvecategoria,"); + sb.append(" c.desctipodoc,"); + sb.append(" ca.desccategoria,"); + sb.append(" c.importepedagio,"); + sb.append(" c.importeseguro,"); + sb.append(" c.importetaxaembarque,"); + sb.append(" case when c.indstatusboleto = 'V' and (select count(*) from boleto_checkin bc1 where bc1.activo=1 and bc1.boletooriginal_id=c.transacao_id)>0 then 'CHECK-IN' "); + sb.append(" when c.indstatusboleto = 'V' and (select count(*) from caja c1 join cambio_titularidad ct1 on ct1.boleto_id = c1.transacao_id where c1.activo=1 and c1.transacaooriginal_id=c.transacao_id)>0 then 'TITULARIDADE TROCADA' "); + sb.append(" when c.indstatusboleto = 'V' then 'VENDIDO' "); + sb.append(" when c.indstatusboleto = 'C' and c.motivocancelacion_id = 31 then 'CANCELADO' "); + sb.append(" when c.indstatusboleto = 'C' and c.motivocancelacion_id = 32 then 'DEVOLVIDO' "); + sb.append(" when c.indstatusboleto = 'C' and c.motivocancelacion_id = 37 then 'CANCEC. EMERG' "); + sb.append(" when c.indstatusboleto = 'E' and c.indreimpresion = 1 then 'ENTREGUE' "); + sb.append(" when (c.indstatusboleto = 'T' and c.tipoventa_id = 8) "); + sb.append(" or (c.indstatusboleto = 'T' and c.tipoventa_id not in (81,41,82) and ct.cambiotitularidad_id is null and (bpe.tipoevento is null or bpe.tipoevento <> :bpeEventoAlteracaoPoltrona)) "); + sb.append(" or (c.indstatusboleto = 'T' and c.motivocancelacion_id is null and c.tipoventa_id = 8 and (bpe.tipoevento is null or bpe.tipoevento <> :bpeEventoAlteracaoPoltrona)) "); + sb.append(" then 'TROCA' "); + sb.append(" when c.indstatusboleto = 'T' and c.motivocancelacion_id is null and bpe.tipoevento = :bpeEventoAlteracaoPoltrona then 'POLTRONA ALTERADA' "); + sb.append(" when c.indstatusboleto = 'T' and c.tipoventa_id = 81 then 'TRANSFERIDO' "); + sb.append(" when c.indstatusboleto = 'T' and c.tipoventa_id = 82 then 'CONFIRM.ABERTO' " ); + sb.append(" when c.indstatusboleto = 'C' and c.motivocancelacion_id = 10 then 'TROCA PASSAGEM' " ); + + if (mcAlteracaoPoltrona != null) { + sb.append(" when c.indstatusboleto = 'C' and c.indreimpresion = 1 and c.motivocancelacion_id = :mcAlteracaoPoltrona then 'TROCA POLTRONA' "); + } + + sb.append(" when c.indstatusboleto = 'C' and c.motivocancelacion_id = 27 then 'NO-SHOW' "); + sb.append(" when ct.cambiotitularidad_id is not null then 'TROCA TITULARIDADE' "); + sb.append(" when c.indstatusboleto = 'C' and c.motivocancelacion_id = 23 and (select count(*) from caja c1 where c1.transacao_id=c.transacaoanterior_id and c1.tipoventa_id=41)=0 then 'TRANSFERÊNCIA' "); + sb.append(" when c.indstatusboleto = 'T' and c.tipoventa_id = 41 then 'CHECKIN REATIVADO' "); + sb.append(" when c.indstatusboleto = 'C' and c.motivocancelacion_id = 23 and (select count(*) from caja c1 where c1.transacao_id=c.transacaoanterior_id and c1.tipoventa_id=41)>0 then 'REATIVADO' "); + sb.append(" when c.indreimpresion = 1 and c.motivoreimpresion_id = 99 then 'REIMPRESSO' "); + sb.append(" end as indstatusboleto,"); + sb.append(" ori.cveparada codorigem,"); + sb.append(" des.cveparada coddestino,"); + sb.append(" c.fechorventa fechorventa,"); + sb.append(" r.numruta,"); + sb.append(" r.prefixo,"); + sb.append(" aidf.serie serie, "); + sb.append(" aidf.subserie subserie, "); + sb.append(" bpe.num_bpe num_bpe, "); + sb.append(" bpe.chbpe chbpe, "); + sb.append(" bpe.nprot nprot, "); + sb.append(" cori.ccf as ccfnovo, "); + sb.append(" aidf_ori.serie serienovo, "); + sb.append(" aidf_ori.subserie subserienovo, "); + sb.append(" bpe_ori.num_bpe bpenovo "); + sb.append(" FROM caja c"); + sb.append(" JOIN categoria ca ON c.categoria_id = ca.categoria_id"); + sb.append(" JOIN parada ori ON ori.parada_id = c.origen_id"); + sb.append(" JOIN parada des ON des.parada_id = c.destino_id"); + sb.append(" JOIN ruta r ON r.ruta_id = c.ruta_id"); + sb.append(" JOIN tipo_venta tv ON tv.tipoventa_id = c.tipoventa_id"); + sb.append(" JOIN punto_venta ag ON ag.puntoventa_id = c.puntoventa_id"); + sb.append(" JOIN usuario u ON u.usuario_id = c.usuario_id"); + sb.append(" JOIN vigencia_tarifa vt ON c.fechorventa BETWEEN vt.feciniciovigencia AND vt.fecfinvigencia"); + sb.append(" JOIN tarifa tar ON (tar.ruta_id = c.ruta_id"); + sb.append(" AND tar.marca_id = c.marca_id"); + sb.append(" AND tar.claseservicio_id = c.claseservicio_id"); + sb.append(" AND tar.vigenciatarifa_id = vt.vigenciatarifa_id"); + sb.append(" AND tar.origen_id = c.origen_id"); + sb.append(" AND tar.destino_id = c.destino_id and tar.activo = 1)"); + sb.append(" JOIN marca m on m.marca_id = c.marca_id"); + sb.append(" JOIN empresa e on e.empresa_id = m.empresa_id"); + sb.append(" JOIN orgao_concedente og ON og.orgaoconcedente_id = tar.orgaoconcedente_id"); + sb.append(" LEFT JOIN bpe bpe on bpe.boleto_id = c.transacao_id "); + sb.append(" LEFT JOIN cambio_titularidad ct on ct.boleto_id = c.transacao_id "); + sb.append(" LEFT JOIN AIDF AIDF ON AIDF.AIDF_ID = c.AIDF_ID "); + sb.append(" left join bpe bpe on bpe.boleto_id = c.transacao_id "); + sb.append(" left join caja cori on cori.transacao_id = c.transacaooriginal_id "); + sb.append(" LEFT JOIN AIDF aidf_ori ON aidf_ori.AIDF_ID = cori.AIDF_ID "); + sb.append(" left join bpe bpe_ori on bpe_ori.boleto_id = cori.transacao_id "); + sb.append(" WHERE 1=1 "); + sb.append(" and c.motivoreimpresion_id is null "); + sb.append(" and (c.motivocancelacion_id IN ("); + sb.append(carregarMotivosCancelacion(mcAlteracaoPoltrona)); + sb.append(") OR c.motivocancelacion_id IS NULL) "); + sb.append(" AND (c.indreimpresion = 0 "); + sb.append(" OR (c.indstatusboleto IN ('E','T') AND c.indreimpresion = 1) "); + sb.append(" OR (c.indstatusboleto = 'C' AND c.motivocancelacion_id = 27) "); + sb.append(" OR (c.indstatusboleto = 'C' AND c.motivocancelacion_id = 23) "); + + if (mcAlteracaoPoltrona != null) { + sb.append(" OR (c.indstatusboleto = 'C' AND c.indreimpresion = 1 AND c.motivocancelacion_id = :mcAlteracaoPoltrona) "); + } + + sb.append(" ) "); + + if (fecInicioViagem != null && fecFinalViagem != null) { + sb.append("AND c.feccorrida BETWEEN TO_DATE(:fecInicioViagem,'dd/mm/yyyy hh24:mi') AND TO_DATE(:fecFinalViagem,'dd/mm/yyyy hh24:mi') "); + } + + if (fecInicioVenda != null && fecFinalVenda != null) { + sb.append("AND c.fechorventa BETWEEN TO_DATE(:fecInicioVenda,'dd/mm/yyyy hh24:mi') AND TO_DATE(:fecFinalVenda,'dd/mm/yyyy hh24:mi') "); + } + + if (empresa_id != null) { + sb.append("AND e.empresa_id = :empresa_id "); + } + + if (agencia_id != null) { + sb.append("AND c.puntoventa_id = :puntoventa_id "); + } + + if (ruta_id != null) { + sb.append("AND c.ruta_id = :ruta_id "); + } + + if (origem_id != null) { + sb.append("AND ori.parada_id = :origem_id "); + } + + if (destino_id != null) { + sb.append("AND des.parada_id = :destino_id "); + } + + if (categoria_id != null && !categoria_id.isEmpty()) { + sb.append("AND ca.categoria_id in (" + categoria_id + ") "); + } + + if (orgaoConcedente_id != null && !orgaoConcedente_id.equals(-1)) { + sb.append("AND r.orgaoconcedente_id = :orgao_concedente_id "); + } + + sb.append(") "); + sb.append("ORDER BY 5, 15"); + + return sb.toString(); + } + + private String carregarMotivosCancelacion(Integer mcAlteracaoPoltrona) { + List motivosCancelacion = new ArrayList(); + motivosCancelacion.add(31); + motivosCancelacion.add(32); + motivosCancelacion.add(37); + motivosCancelacion.add(10); + motivosCancelacion.add(27); + motivosCancelacion.add(23); + + if(mcAlteracaoPoltrona != null) { + motivosCancelacion.add(mcAlteracaoPoltrona); + } + + return motivosCancelacion.toString().replaceAll("[\\[\\]]", ""); + } +} \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioMovimentacaoBilhete_es.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioMovimentacaoBilhete_es.properties new file mode 100644 index 000000000..9a30a9eea --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioMovimentacaoBilhete_es.properties @@ -0,0 +1,54 @@ +#geral +msg.noData=Não foi possivel obter dados com os parâmetros informados. +msg.a=à + +#Labels header +header.data.hora=Data/Hora\: +header.pagina=Página\: +header.periodo.viagem=Período Viagem\: +header.periodo.venda=Período Venda\: +header.empresa=Empresa\: + +#Labels detail +detail.empresa=Empresa +detail.codigo.agencia=Cód. Ag. +detail.agencia=Agência +detail.bilheteiro=Bilheteiro +detail.dataMD=Data MD +detail.horaMD=Hora MD +detail.data.emissao=Dt Emis. +detail.hora.emissao=Hr Emis. +detail.data.servico=Dt Serviço +detail.servico=Serviço +detail.hora=Hora +detail.codigo.linha=Cod. Linha +detail.linha=Linha +detail.prefixo=Prefixo +detail.codigo.origem=Cod. Ori. +detail.origem=Origem +detail.codigo.destino=Cod. Dest. +detail.destino=Destino +detail.poltrona=Poltrona +detail.bilhete=Bilhete +detail.serie=Série +detail.subserie=Subsérie +detail.ccf=CCF +detail.bpe=BP-e +detail.passageiro=Passag. +detail.tipo.doc=Tipo Doc. +detail.documento=Doc. +detail.tipo.venda=Tipo Ven. +detail.tipo.passagem=Tipo Pas. +detail.tipo=Tipo +detail.preco=Preço +detail.desconto=Desc. (%) +detail.valor.cobrado=Vlr. Cob. +detail.tarifa=Tarifa +detail.seguro=Seguro +detail.pedagio=Pedágio +detail.utr=UTR +detail.tpp=TPP +detail.status=Status +detail.chave=Ch. BP-e +detail.protocolo=Pt. BP-e +detail.total=Total \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioMovimentacaoBilhete_pt_BR.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioMovimentacaoBilhete_pt_BR.properties new file mode 100644 index 000000000..d3d3cbd53 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioMovimentacaoBilhete_pt_BR.properties @@ -0,0 +1,54 @@ +#geral +msg.noData=Não foi possivel obter dados com os parâmetros informados. +msg.a=à + +#Labels header +header.data.hora=Data/Hora\: +header.pagina=Página\: +header.periodo.viagem=Período Viagem\: +header.periodo.venda=Período Venda\: +header.empresa=Empresa\: + +#Labels detail +detail.empresa=Empresa +detail.codigo.agencia=Cód. Ag. +detail.agencia=Agência +detail.bilheteiro=Bilheteiro +detail.dataMD=Data MD +detail.horaMD=Hora MD +detail.data.emissao=Dt Emis. +detail.hora.emissao=Hr Emis. +detail.data.servico=Dt Serviço +detail.servico=Serviço +detail.hora=Hora +detail.codigo.linha=Cod. Linha +detail.linha=Linha +detail.prefixo=Prefixo +detail.codigo.origem=Cod. Ori. +detail.origem=Origem +detail.codigo.destino=Cod. Dest. +detail.destino=Destino +detail.poltrona=Poltrona +detail.bilhete=Bilhete +detail.serie=Série +detail.subserie=Subsérie +detail.ccf=CCF +detail.bpe=BP-e +detail.passageiro=Passag. +detail.tipo.doc=Tipo Doc. +detail.documento=Doc. +detail.tipo.venda=Tipo Ven. +detail.tipo.passagem=Tipo Pas. +detail.tipo=Tipo +detail.preco=Preço +detail.desconto=Desc. (%) +detail.valor.cobrado=Vlr. Cob. +detail.tarifa=Tarifa +detail.seguro=Seguro +detail.pedagio=Pedágio +detail.utr=UTR +detail.tpp=TPP +detail.status=Status +detail.chave=Ch. BP-e +detail.protocolo=Pt. BP-e +detail.total=Total: \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioMovimentacaoBilhete.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioMovimentacaoBilhete.jasper new file mode 100644 index 0000000000000000000000000000000000000000..5b91e11082bf258084d7515d76a9e53d182c4c1b GIT binary patch literal 73737 zcmeIb33L?2_V{1b+YDg{OF$Mu*_1tDM?sV%BqWfKm;?~;5r$+!29iujCM=2q;x4$L z2(F+As37V?KtKf*7ZgQB9zGWoe7M3>o(s7D@2%?Ysme5yPR{v#&-tHYV5+O?c2`$_ zs=Dgd?e40LCx~8MMY>l6!im)-i8K7wm4T|NKxL>ZT%8!Gm>#SMB#vg0c`TB!ziuBW zM9m_Ni$djRT|)?XgTuPG@B z&JB|meCINM#q^~7a8ImpL+%_@;%z;ZS+DzX~og6R)MLro19GR8tYo z#GGI#ztUd>S+k`Rg2my|Nu*hDdPS%zkn4vd{o!D!ViHLRR;QPR{NYq~TzV)J4piZe z)%i8$<^HO9V*_(w_rN65(TV@lm;rs zhOh(+=2Zr=NZd4k(ah;pfT1`{x@H0Ur0S9+sa_=UdXa?KD~h4qnsQnrgH?ed%vP8T zhG*g$oC6lWX2)?zEN(LK7DINc1L5j0={`B;nMUW~mBFr< zdU2q{UsD#&56>$Lgvohz9LRQq!;IoU*dHu2v(to!@~sQ)R#z%~M@XkdNvNvaA5Qld zg+o>IA~hV42g}+0mLCX*NmG7f)P#d&a35j5y?B$#63qC(FiU(kL7#uPpP2F^#0U(%|h) zfq4WJlpe;r*1Vzw`NlG@YEa!*H9@)|*_F+$B;@4+Xn9-0kMbs1E8|;2;=rTi6QV5y z4-2&<(4_Zr*=*uHj0X~et-2?6qiK`|uqBy9ppD9}EDMH{%gRD?0>xP*ft4U;K5cGg zRiL_>wF5n4Uhn9<$iBd@No7?CdY^DGP@V0s43j=}9Gole4#zjD#vEZY7ADPv{v~Bz z7`vf(TWl6a-^*F5C6sys_Q8pmWMXnvm461gjQBoUR^~JV_hOrNtCEyO8D1;5a_Jq+4-@>N9TPDbKvrTP|V8{)CseR=V!%R zgH9&;G`LxyZ8)#4wt;nwb1Q4A%w5l{Tk$@0`6pK&U-HIvgA{;>WkYLSR3COxLm~Tp zV{sF*Ul5oZP7emkgnPSH?0dV(v`}a!=qfX_011Y3wDHMKH zS+HVe0Vqv@a0+P>i2>0h(h6FIa8)2&REo+?&g?){2{aE`q@};2s5DfC3Si`p$1-UF z%0uKd>~5*MXJ)&>4V@4<5;N$&iA|F(jNRJM3&UMuwp(V-+S*r_%(5Sq_15+d*d5mr zPbLY1xC$;ER6?jb1L~?f85ZSSzj+i~YkNDbyg*3+nvbH|=gT7P?0pJCp|WtWvR00= zNF>8@Lv0mBusQ{9-I=TlswpcAlLWCDg+v4X3dl@cqz>Sb*s8G@$haByRQkhkxfN!x zxf!gLA!sl9*P}X{tzG1fJTF#-2F-0+2-RQALrWN}@DM2IFt)MUUjLkM5{rSWG6w`H z;z7;%Ac4oR9Wk~3&{uImuD`e#1_&~!%!+VedY}rD^p=1!jJ4k6z{2^^0AqLn)L^(N zf>*#k{<7pU7*t@FVP?0DgUGDmgJbpztl!Fz(>1HO0p%MiE5 zTqK}PaVQgwvoS`SFfln`+y`VRG*6}*{O70A`94v~i?Po;^%*+j}J9Fd3G+7RzU2)sXN3|(u$7)kDiLC&)hPwsFADI>DL1@+| zltSZ(y*}#%nFPiM0T@aYvn#2dMB150VCy=PjVY}T5`@rm<^{?_vjbT3a1YiHrx0Id zs5*#aYE(jD@L$clR}5tmeGb|qG6|gvzj>elt>vPQ5OUQ|y|so~F+I$xVE@5cGi0Mi0>J|R8xvckNy ztmJ~s@o9wxIq*N%Oh2aDi)~b5t!r~gzO|TiO7hr|g&Ap?qcRFWtLDQNHf+Mnf9@Xj z)XMVfk`$thCO*)5s>Aug=_$c*^=Q(#JYJ=o^Eoq4bxTb^YM5m< z)My?V44FDXi=(R_Iko793t%(>x9@DUsz77aEVAF&8t8wkuHU%4L*u(XyTuv~Xgo

<1uaWm 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 RK3Usn|7?GeIpJE>{|Amqf^+}? literal 0 HcmV?d00001 diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioMovimentacaoBilhete.jrxml b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioMovimentacaoBilhete.jrxml new file mode 100644 index 000000000..11c3d5738 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioMovimentacaoBilhete.jrxml @@ -0,0 +1,800 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <band height="128"> + <textField> + <reportElement uuid="652312bd-292a-424d-a234-5f157e3699c6" x="0" y="0" width="314" height="20"/> + <textElement> + <font size="14" isBold="true"/> + </textElement> + <textFieldExpression><![CDATA[$P{TITULO}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="e5d4714c-07cc-42ff-a7a8-76d6f6d3e716" x="0" y="25" width="109" height="23"/> + <textElement/> + <textFieldExpression><![CDATA[$R{header.periodo.viagem}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="66b2d0f6-2bf1-4bc7-9ec0-a34444e04d60" x="920" y="0" width="106" height="15"/> + <textElement textAlignment="Right"/> + <textFieldExpression><![CDATA[$R{header.data.hora}]]></textFieldExpression> + </textField> + <textField evaluationTime="Report"> + <reportElement uuid="8ca68351-fc00-4f19-b94f-f2fd1f41964f" x="1082" y="15" width="50" height="15"/> + <textElement/> + <textFieldExpression><![CDATA[" " + $V{PAGE_NUMBER}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="be1692e9-f130-4d08-9173-6ca3e4699030" x="920" y="15" width="106" height="15"/> + <textElement textAlignment="Right"/> + <textFieldExpression><![CDATA[$R{header.pagina}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="4914d9e7-6ce8-4512-b1f8-13f3b572ac50" x="109" y="25" width="205" height="23"/> + <textElement/> + <textFieldExpression><![CDATA[( $P{fecInicioViagem} != null ? ($P{fecInicioViagem} + " à " + $P{fecFinalViagem}) : "" )]]></textFieldExpression> + </textField> + <textField pattern="dd/MM/yyyy HH:mm"> + <reportElement uuid="6f671365-868e-41a6-81ee-a308d1d91e1d" x="1030" y="0" width="102" height="15"/> + <textElement textAlignment="Center"/> + <textFieldExpression><![CDATA[new java.util.Date()]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="7548d623-fb6c-48d4-b8b7-504f5437a79a" x="1030" y="15" width="52" height="15"/> + <textElement textAlignment="Right"/> + <textFieldExpression><![CDATA[$V{PAGE_NUMBER} + " de"]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="a79c03e0-bbe4-4b1c-8297-533a0d137b27" x="0" y="48" width="109" height="21"/> + <textElement/> + <textFieldExpression><![CDATA[$R{header.periodo.venda}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="b31b00a3-1ced-4f9c-acb7-470646f7b335" x="109" y="48" width="205" height="21"/> + <textElement/> + <textFieldExpression><![CDATA[( $P{fecInicioVenda} != null ? ($P{fecInicioVenda} + " à " + $P{fecFinalVenda}) : "" )]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="8fb67bb3-6ff2-40d1-b338-714f199ea7f0" x="0" y="69" width="109" height="20"/> + <textElement/> + <textFieldExpression><![CDATA[$R{header.empresa}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="2c09f3ff-c554-4ce2-886e-eaab93fa15eb" x="250" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.hora}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="e18edb89-17f4-417e-8041-664f11245cbd" x="300" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.linha}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="67851ba5-cc9c-4f37-8857-9e3c5be9b362" x="175" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.hora.emissao}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="93fedb4f-18e2-4d95-82e8-2108d3eb135c" x="150" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.data.emissao}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="3de0b54a-0b10-4556-9b0a-ba8f19989716" x="200" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.data.servico}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="cc834009-ae90-46d4-8bbb-37578b69f621" x="475" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.bilhete}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="842c2e2b-0a9e-4a28-9010-9b0c814c5bcb" x="400" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.codigo.destino}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="94fe9e9b-e231-43b8-aeb8-7bc3eb2d61af" x="450" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.poltrona}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="952c3d60-ade1-4f57-8801-3ef6bc7f2333" x="550" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.ccf}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="e14732be-42a0-4f54-9eb2-52f10ece154b" x="575" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.bpe}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="b34ce751-6969-47b0-aeb7-fff00a5de1e3" x="600" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.passageiro}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="bb3d2388-6bda-4727-ba30-0a5f4612f1a8" x="75" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.bilheteiro}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="6b1fac8d-c098-4893-b1dd-7b64573f0173" x="500" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.serie}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="0948a2fc-fc39-4f2d-ab06-d7c97a66df39" x="325" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.prefixo}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="c4b5d11d-79a1-4850-8294-8ccaa0898bca" x="350" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.codigo.origem}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="2af7bea7-e8bf-424a-9813-c9d2be7c0459" x="100" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.dataMD}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="7b62e459-04bc-4227-be76-24bf5938d552" x="525" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.subserie}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="069eab80-7d6d-4dae-a598-c5014deb81f4" x="425" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.destino}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="5105aee2-c3ec-4571-a14c-06b69218decc" x="725" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.tipo}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="1fe1fad6-d193-4dc1-9696-5614ff9a10d0" x="750" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.preco}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="f3655778-94dd-4fb6-8c84-cf32416201e0" x="650" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.documento}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="b68a4e34-b6e9-4006-8373-707c4e37eb31" x="700" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.tipo.passagem}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="c74391a0-cc07-44f7-90af-3036910e6bb3" x="675" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.tipo.venda}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="aed6f61a-6566-451b-ba78-6964fb2c9f4e" x="225" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.servico}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="2f7626c2-fbea-4cb7-808c-2d7dbbd18ee2" x="275" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.codigo.linha}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="421120df-7852-4311-95a8-93478f8c4a5e" x="0" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.empresa}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="24ef9240-77fe-4c43-b065-4aa214805b3e" x="25" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.codigo.agencia}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="9e0176f6-a8ff-4246-8038-34155064d017" x="375" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.origem}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="97583aa4-45de-402c-8ce9-978c974d6e0c" x="625" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.tipo.doc}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="17200d3a-6195-42d1-bc36-ff2baffb56ce" x="125" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.horaMD}]]></textFieldExpression> + </textField> + <line> + <reportElement uuid="8e2d6686-e4d7-43d5-b3a9-46adc3e58350" x="0" y="127" width="1132" height="1"/> + </line> + <textField> + <reportElement uuid="3541e1b0-8dfe-404e-9461-64d10d85531a" x="109" y="69" width="205" height="20"/> + <textElement/> + <textFieldExpression><![CDATA[$P{nomb_empresa}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="7eac2d13-083c-4765-ba9c-bf61ea645a90" x="50" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.agencia}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="02881959-f862-4a2d-bcd4-ca90edd0b786" x="775" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.desconto}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="6e067b2f-b639-4822-b94f-4f0acb2dc6ca" x="1100" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.bpe}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="02464d08-2223-458e-909f-4292292df196" x="800" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.valor.cobrado}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="a1932a1e-2640-4ee2-a914-623ef8053cf4" x="825" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.tarifa}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="1395a506-7c42-4860-90ca-95ff0b844d0d" x="850" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.seguro}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="c0322d2b-02d0-42ae-b49f-f1d54e154c6b" x="875" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.pedagio}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="658e74a9-91d3-45b7-8214-be6ce1086506" x="900" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.utr}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="727fa0d5-2f10-4ab1-b547-59c425be1a71" x="925" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.tpp}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="fbb64c97-db89-4d47-8908-f3a330ea7f2c" x="950" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.status}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="4c49f3ac-3bdc-48dc-83b8-dc070495746a" x="975" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.chave}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="a4173145-a18f-4693-beff-416547ea596d" x="1075" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.ccf}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="346a2cf5-d4d0-4905-8e4a-b7b94f0cc2e2" x="1050" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.subserie}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="6abad66f-3399-4962-b3e2-a587694afde8" x="1025" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.serie}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="f9999f21-38b4-401d-be1c-b18908237e6a" x="1000" y="118" width="25" height="7"/> + <textElement> + <font size="5"/> + </textElement> + <textFieldExpression><![CDATA[$R{detail.protocolo}]]></textFieldExpression> + </textField> + </band> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ + + + + + + + + + + + diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioGratuidadeBean.java b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioGratuidadeBean.java index 43e5461b6..5d231edc8 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioGratuidadeBean.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioGratuidadeBean.java @@ -41,6 +41,21 @@ public class RelatorioGratuidadeBean { private String codDestino; private String descorgao; private String ccf; + + // Mantis 15134 + private String direccionnumero; + private Date dataEmissao; + private String numRuta; + private String prefixo; + private String serie; + private String subserie; + private String numbpe; + private String chavebpe; + private String protocolobpe; + private String serienovo = "N/A"; + private String subserienovo = "N/A"; + private String ccfnovo = "N/A"; + private String bpenovo = "N/A"; public String getFecdatviaje() { return fecdatviaje; @@ -258,6 +273,100 @@ public class RelatorioGratuidadeBean { public void setTpp(BigDecimal tpp) { this.tpp = tpp; } + public String getDireccionnumero() { + return direccionnumero; + } + public void setDireccionnumero(String direccionnumero) { + this.direccionnumero = direccionnumero; + } + public Date getDataEmissao() { + return dataEmissao; + } + public void setDataEmissao(Date dataEmissao) { + this.dataEmissao = dataEmissao; + } + public String getNumRuta() { + return numRuta; + } + public void setNumRuta(String numRuta) { + this.numRuta = numRuta; + } + public String getPrefixo() { + return prefixo; + } + public void setPrefixo(String prefixo) { + this.prefixo = prefixo; + } - -} + public String getSerie() { + return serie; + } + + public void setSerie(String serie) { + this.serie = serie; + } + + public String getSubserie() { + return subserie; + } + + public void setSubserie(String subserie) { + this.subserie = subserie; + } + + public String getNumbpe() { + return numbpe; + } + + public void setNumbpe(String numbpe) { + this.numbpe = numbpe; + } + + public String getChavebpe() { + return chavebpe; + } + + public void setChavebpe(String chavebpe) { + this.chavebpe = chavebpe; + } + + public String getProtocolobpe() { + return protocolobpe; + } + + public void setProtocolobpe(String protocolobpe) { + this.protocolobpe = protocolobpe; + } + + public String getSerienovo() { + return serienovo; + } + + public void setSerienovo(String serienovo) { + this.serienovo = serienovo; + } + + public String getSubserienovo() { + return subserienovo; + } + + public void setSubserienovo(String subserienovo) { + this.subserienovo = subserienovo; + } + + public String getCcfnovo() { + return ccfnovo; + } + + public void setCcfnovo(String ccfnovo) { + this.ccfnovo = ccfnovo; + } + + public String getBpenovo() { + return bpenovo; + } + + public void setBpenovo(String bpenovo) { + this.bpenovo = bpenovo; + } +} \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioMovimentacaoBilheteController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioMovimentacaoBilheteController.java new file mode 100644 index 000000000..91ed4ce6b --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioMovimentacaoBilheteController.java @@ -0,0 +1,267 @@ +package com.rjconsultores.ventaboletos.web.gui.controladores.relatorios; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +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.zk.ui.Component; +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zul.Datebox; + +import com.rjconsultores.ventaboletos.constantes.Constantes; +import com.rjconsultores.ventaboletos.entidad.Categoria; +import com.rjconsultores.ventaboletos.entidad.Empresa; +import com.rjconsultores.ventaboletos.entidad.MotivoCancelacion; +import com.rjconsultores.ventaboletos.entidad.OrgaoConcedente; +import com.rjconsultores.ventaboletos.entidad.Parada; +import com.rjconsultores.ventaboletos.entidad.PuntoVenta; +import com.rjconsultores.ventaboletos.entidad.Ruta; +import com.rjconsultores.ventaboletos.enums.RelatorioMovimentacaoBilheteStatusEnum; +import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioMovimentacaoBilhete; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; +import com.rjconsultores.ventaboletos.service.CategoriaService; +import com.rjconsultores.ventaboletos.service.EmpresaService; +import com.rjconsultores.ventaboletos.service.MotivoCancelacionService; +import com.rjconsultores.ventaboletos.service.OrgaoConcedenteService; +import com.rjconsultores.ventaboletos.service.RutaService; +import com.rjconsultores.ventaboletos.web.utilerias.MensagensUtils; +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; + +//Mantis 15134 + +@Controller("relatorioMovimentacaoBilheteController") +@Scope("prototype") +@SuppressWarnings("serial") +public class RelatorioMovimentacaoBilheteController extends MyGenericForwardComposer { + + @Autowired + private DataSource dataSourceRead; + + @Autowired + private EmpresaService empresaService; + + @Autowired + private CategoriaService categoriaService; + + @Autowired + private RutaService rutaService; + + @Autowired + private OrgaoConcedenteService orgaoConcedenteService; + + @Autowired + private MotivoCancelacionService motivoCancelacionService; + + private Datebox datInicialViagem; + private Datebox datFinalViagem; + private Datebox datInicialVenda; + private Datebox datFinalVenda; + private MyComboboxEstandar cmbEmpresa; + private MyComboboxPuntoVenta cmbAgencia; + private MyComboboxEstandar cmbLinha; + private MyComboboxParada cmbOrigem; + private MyComboboxParada cmbDestino; + private MyComboboxEstandar cmbOrgaoConcedente; + private MyComboboxEstandar cmbStatus; + private MyComboboxEstandar cmbTipoGratuidade; + + private List lsEmpresas; + private List lsCategorias; + private List lsLinhas; + private List lsOrgaoConcedente; + private List lsStatus; + private List listSelectedTipoGratuidade; + private MyListbox selectedTipoGratuidadeList; + + @Override + public void doAfterCompose(Component comp) throws Exception { + super.doAfterCompose(comp); + + lsEmpresas = empresaService.obtenerTodos(); + lsCategorias = categoriaService.obtenerTodos(); + lsLinhas = rutaService.obtenerTodos(); + lsOrgaoConcedente = orgaoConcedenteService.obtenerTodos(); + lsStatus = RelatorioMovimentacaoBilheteStatusEnum.getListaOrdenada(); + listSelectedTipoGratuidade = new ArrayList(); + } + + public void onClick$btnRemoveTipoGratuidade(Event ev) { + Categoria categoria = (Categoria) selectedTipoGratuidadeList.getSelectedItem().getValue(); + listSelectedTipoGratuidade.remove(categoria); + selectedTipoGratuidadeList.setData(listSelectedTipoGratuidade); + } + + public void onClick$btnAddTipoTipoGratuidade(Event ev) { + if (cmbTipoGratuidade.getSelectedItem() != null) { + listSelectedTipoGratuidade.add((Categoria) cmbTipoGratuidade.getSelectedItem().getValue()); + selectedTipoGratuidadeList.setData(listSelectedTipoGratuidade); + selectedTipoGratuidadeList.setSelectedItem(null); + } + } + + public void onClick$btnExecutarRelatorio(Event ev) throws Exception { + executarRelatorio(); + } + + private void executarRelatorio() throws Exception { + Map parametros = new HashMap(); + parametros.put("TITULO", Labels.getLabel("relatorioMovimentacaoBilheteController.window.title")); + + // Datas + putParametrosDate(parametros, "fecInicioViagem", this.datInicialViagem.getValue()); + putParametrosDate(parametros, "fecFinalViagem", this.datFinalViagem.getValue()); + putParametrosDate(parametros, "fecInicioVenda", this.datInicialVenda.getValue()); + putParametrosDate(parametros, "fecFinalVenda", this.datFinalVenda.getValue()); + + // Validação datas + if (parametros.containsKey("fecInicioViagem") && !parametros.containsKey("fecFinalViagem") || !parametros.containsKey("fecInicioViagem") && parametros.containsKey("fecFinalViagem")) { + MensagensUtils.showMessageInformation(Labels.getLabel("relatorioMovimentacaoBilheteController.data.viagem.obrigatoria"), Labels.getLabel("relatorioMovimentacaoBilheteController.window.title")); + return; + } + + if (parametros.containsKey("fecInicioVenda") && !parametros.containsKey("fecFinalVenda") || !parametros.containsKey("fecInicioVenda") && parametros.containsKey("fecFinalVenda")) { + MensagensUtils.showMessageInformation(Labels.getLabel("relatorioMovimentacaoBilheteController.data.venda.obrigatoria"), Labels.getLabel("relatorioMovimentacaoBilheteController.window.title")); + return; + } + + if (!parametros.containsKey("fecInicioViagem") && !parametros.containsKey("fecFinalViagem") && !parametros.containsKey("fecInicioVenda") && !parametros.containsKey("fecFinalVenda")) { + MensagensUtils.showMessageInformation(Labels.getLabel("relatorioMovimentacaoBilheteController.data.obrigatoria"), Labels.getLabel("relatorioMovimentacaoBilheteController.window.title")); + return; + } + + // Empresa + if (cmbEmpresa.getSelectedIndex() != -1) { + Empresa empresa = (Empresa) cmbEmpresa.getSelectedItem().getValue(); + parametros.put("empresa_id", empresa.getEmpresaId()); + parametros.put("nomb_empresa", empresa.getNombempresa()); + } else { + parametros.put("nomb_empresa", "TODAS" ); + } + + // Agência + if (cmbAgencia.getSelectedIndex() != -1) { + parametros.put("agencia_id", ((PuntoVenta) cmbAgencia.getSelectedItem().getValue()).getPuntoventaId()); + } + + // Linha + if (cmbLinha.getSelectedIndex() != -1) { + parametros.put("ruta_id", ((Ruta) cmbLinha.getSelectedItem().getValue()).getRutaId()); + } + + // Origem + if (cmbOrigem.getSelectedIndex() != -1) { + parametros.put("origem_id", ((Parada) cmbOrigem.getSelectedItem().getValue()).getParadaId()); + } + + // Destino + if (cmbDestino.getSelectedIndex() != -1) { + parametros.put("destino_id", ((Parada) cmbDestino.getSelectedItem().getValue()).getParadaId()); + } + + // Orgão Concedente + if (cmbOrgaoConcedente.getSelectedIndex() != -1) { + OrgaoConcedente orgaoConcedente = (OrgaoConcedente) cmbOrgaoConcedente.getSelectedItem().getValue(); + parametros.put("orgao_concedente_id", orgaoConcedente.getOrgaoConcedenteId()); + parametros.put("orgao_concedente_desc", orgaoConcedente.getDescOrgao()); + } + + // Status + if (cmbStatus.getSelectedIndex() != -1) { + parametros.put("status", (RelatorioMovimentacaoBilheteStatusEnum) cmbStatus.getSelectedItem().getValue()); + } + + // Tipos de Passagens + if (!listSelectedTipoGratuidade.isEmpty()) { + String categoriasExpression = null; + + for (Categoria c : listSelectedTipoGratuidade) { + if (listSelectedTipoGratuidade.indexOf(c) == 0) { + categoriasExpression = c.getCategoriaId().toString(); + } else { + categoriasExpression += ", " + c.getCategoriaId().toString(); + } + } + + parametros.put("categoria_id", categoriasExpression); + } else if (cmbTipoGratuidade.getSelectedIndex() != -1) { + parametros.put("categoria_id", ((Categoria) cmbTipoGratuidade.getSelectedItem().getValue()).getCategoriaId().toString()); + } + + carregarParametroMotivoCancelamentoAlteracaoPoltrona(parametros); + + Relatorio relatorio = new RelatorioMovimentacaoBilhete(parametros, dataSourceRead.getConnection()); + + Map args = new HashMap(); + args.put("relatorio", relatorio); + + openWindow("/component/reportView.zul", Labels.getLabel("relatorioMovimentacaoBilheteController.window.title"), args, MODAL); + } + + private void carregarParametroMotivoCancelamentoAlteracaoPoltrona(Map parametros) { + MotivoCancelacion motivoCancelacion = motivoCancelacionService.findByCveSistema(Constantes.CVESISTEMA_MOTIVO_CANCELAMENTO_ALTERACAO_POLTRONA); + if(motivoCancelacion != null) { + parametros.put("mcAlteracaoPoltrona", motivoCancelacion.getMotivocancelacionId()); + } + } + + private void putParametrosDate(Map parametros, String nomeParametros, Date data) { + if (data != null) { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); + parametros.put(nomeParametros, sdf.format(data)); + } + } + + // gets/sets + public List getLsEmpresas() { + return lsEmpresas; + } + + public void setLsEmpresas(List lsEmpresas) { + this.lsEmpresas = lsEmpresas; + } + + public List getLsCategorias() { + return lsCategorias; + } + + public void setLsCategorias(List lsCategorias) { + this.lsCategorias = lsCategorias; + } + + public List getLsLinhas() { + return lsLinhas; + } + + public void setLsLinhas(List lsLinhas) { + this.lsLinhas = lsLinhas; + } + + public List getLsOrgaoConcedente() { + return lsOrgaoConcedente; + } + + public void setLsOrgaoConcedente(List lsOrgaoConcedente) { + this.lsOrgaoConcedente = lsOrgaoConcedente; + } + + public List getLsStatus() { + return lsStatus; + } + + public void setLsStatus(List lsStatus) { + this.lsStatus = lsStatus; + } +} \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioMovimentacaoBilhete.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioMovimentacaoBilhete.java new file mode 100644 index 000000000..1a522b5be --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioMovimentacaoBilhete.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 ItemMenuRelatorioMovimentacaoBilhete extends DefaultItemMenuSistema { + + public ItemMenuRelatorioMovimentacaoBilhete() { + super("indexController.mniRelatorioMovimentacaoBilhete.label"); + } + + @Override + public String getClaveMenu() { + return "COM.RJCONSULTORES.ADMINISTRACION.GUI.RELATORIOS.MENU.RELATORIOMOVIMENTACAOBILHETE"; + } + + @Override + public void ejecutar() { + PantallaUtileria.openWindow("/gui/relatorios/filtroRelatorioMovimentacaoBilhete.zul", + Labels.getLabel("relatorioMovimentacaoBilheteController.window.title"), getArgs(), desktop); + } + +} diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/menu_original.properties b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/menu_original.properties index 7eb44e580..2a8aeac2a 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/menu_original.properties +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/menu_original.properties @@ -174,6 +174,7 @@ analitico.gerenciais.estatisticos.relatorioMovimentoPorOrgaoConcedente=com.rjcon analitico.gerenciais.estatisticos.checkin=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioCheckin analitico.gerenciais.estatisticos.relatorioBaixasVendasInternet=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioBaixasVendasInternet analitico.gerenciais.estatisticos.relatorioVendaEmbarcada=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioVendaEmbarcada +analitico.gerenciais.estatisticos.movimentacaobilhete=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioMovimentacaoBilhete analitico.gerenciais.financeiro=com.rjconsultores.ventaboletos.web.utilerias.menu.item.analitico.gerenciais.financeiro.SubMenuRelatorioFinanceiro analitico.gerenciais.financeiro.receitaDiariaAgencia=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioReceitaDiariaAgencia analitico.gerenciais.financeiro.taxas=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioTaxasLinha diff --git a/web/WEB-INF/i3-label_es_MX.label b/web/WEB-INF/i3-label_es_MX.label index 45e6249dc..549be2d39 100644 --- a/web/WEB-INF/i3-label_es_MX.label +++ b/web/WEB-INF/i3-label_es_MX.label @@ -280,6 +280,7 @@ indexController.mniRelatorioSisdap.label=SISDAP indexController.mniRelatorioEmpresaCorrida.label = Reporte de la empresa corrida indexController.mniRelatorioEmpresaOnibus.label = Reporte de la empresa autobús indexController.mniRelatorioOCD.label = Reporte de OCD +indexController.mniRelatorioMovimentacaoBilhete.label = Movimentações de Bilhetes indexController.mniRelatorioGratuidade.label = Gratuidades indexController.mniRelatorioGratuidadeANTT.label = Gratuidades ANTT indexController.mniRelatorioExportacaoIdosoARTESP.label = Reporte Exportación Ancianos ARTESP @@ -8273,4 +8274,26 @@ viewTestEmailController.destinatario = Destinatário #relatorioVendasRequisicaoController relatorioVendasRequisicaoController.lbAgruparPor.label = Agrupar por relatorioVendasRequisicaoController.radioTipoRelatorioPorCliente.label = Ordem de Serviço - Secretaria -relatorioVendasRequisicaoController.cliente.label = Cliente \ No newline at end of file +relatorioVendasRequisicaoController.cliente.label = Cliente + +# Relatório Movimentação de Bilhetes +relatorioMovimentacaoBilheteController.window.title = Relatório Movimentações de Bilhetes +relatorioMovimentacaoBilheteController.data.viagem.obrigatoria = É necessário preencher a data inicial e final da viagem +relatorioMovimentacaoBilheteController.data.venda.obrigatoria = É necessário preencher a data inicial e final da venda +relatorioMovimentacaoBilheteController.data.obrigatoria = Data de Viagem ou Data de Venda são obrigatórias +relatorioMovimentacaoBilheteController.lbViagem = Viagem +relatorioMovimentacaoBilheteController.lbDataIniViagem.value = Data Início +relatorioMovimentacaoBilheteController.lbDataFinViagem.value = Data Final +relatorioMovimentacaoBilheteController.lbVenda = Venda +relatorioMovimentacaoBilheteController.lbDataIniVenda.value = Data Início +relatorioMovimentacaoBilheteController.lbDataFinVenda.value = Data Final +relatorioMovimentacaoBilheteController.lbEmpresa.value = Empresa +relatorioMovimentacaoBilheteController.lbAgencia.value = Agência +relatorioMovimentacaoBilheteController.lbLinha.value = Linha +relatorioMovimentacaoBilheteController.lbOrigem.value = Origem +relatorioMovimentacaoBilheteController.lbDestino.value = Destino +relatorioMovimentacaoBilheteController.lbOrgaoConcedente.value = Orgão Concedente +relatorioMovimentacaoBilheteController.lbStatus = Status +relatorioMovimentacaoBilheteController.lbTipoGratuidade.value = Tipos de Passagens +relatorioMovimentacaoBilheteController.lbRemoverLinha.value = Remover Linha +relatorioMovimentacaoBilheteController.lbAdicionarLinha.value = Adicionar Linha \ No newline at end of file diff --git a/web/WEB-INF/i3-label_pt_BR.label b/web/WEB-INF/i3-label_pt_BR.label index e037f406c..e07cded95 100644 --- a/web/WEB-INF/i3-label_pt_BR.label +++ b/web/WEB-INF/i3-label_pt_BR.label @@ -287,6 +287,7 @@ indexController.mniRelatorioSisdap.label=SISDAP indexController.mniRelatorioEmpresaCorrida.label = Empresa Corrida indexController.mniRelatorioEmpresaOnibus.label = Empresa Ônibus indexController.mniRelatorioOCD.label = Relatório de OCD +indexController.mniRelatorioMovimentacaoBilhete.label = Movimentações de Bilhetes indexController.mniRelatorioGratuidade.label = Relatório Tipo Passagem indexController.mniRelatorioGratuidadeANTT.label = Relatório Gratuidades ANTT indexController.mniRelatorioGratuidadeARTESP.label = Relatório Gratuidade ARTESP @@ -8779,4 +8780,26 @@ viewTestEmailController.destinatario = Destinatário #relatorioVendasRequisicaoController relatorioVendasRequisicaoController.lbAgruparPor.label = Agrupar por relatorioVendasRequisicaoController.radioTipoRelatorioPorCliente.label = Ordem de Serviço - Secretaria -relatorioVendasRequisicaoController.cliente.label = Cliente \ No newline at end of file +relatorioVendasRequisicaoController.cliente.label = Cliente + +# Relatório Movimentação de Bilhetes +relatorioMovimentacaoBilheteController.window.title = Relatório Movimentações de Bilhetes +relatorioMovimentacaoBilheteController.data.viagem.obrigatoria = É necessário preencher a data inicial e final da viagem +relatorioMovimentacaoBilheteController.data.venda.obrigatoria = É necessário preencher a data inicial e final da venda +relatorioMovimentacaoBilheteController.data.obrigatoria = Data de Viagem ou Data de Venda são obrigatórias +relatorioMovimentacaoBilheteController.lbViagem = Viagem +relatorioMovimentacaoBilheteController.lbDataIniViagem.value = Data Início +relatorioMovimentacaoBilheteController.lbDataFinViagem.value = Data Final +relatorioMovimentacaoBilheteController.lbVenda = Venda +relatorioMovimentacaoBilheteController.lbDataIniVenda.value = Data Início +relatorioMovimentacaoBilheteController.lbDataFinVenda.value = Data Final +relatorioMovimentacaoBilheteController.lbEmpresa.value = Empresa +relatorioMovimentacaoBilheteController.lbAgencia.value = Agência +relatorioMovimentacaoBilheteController.lbLinha.value = Linha +relatorioMovimentacaoBilheteController.lbOrigem.value = Origem +relatorioMovimentacaoBilheteController.lbDestino.value = Destino +relatorioMovimentacaoBilheteController.lbOrgaoConcedente.value = Orgão Concedente +relatorioMovimentacaoBilheteController.lbStatus = Status +relatorioMovimentacaoBilheteController.lbTipoGratuidade.value = Tipos de Passagens +relatorioMovimentacaoBilheteController.lbRemoverLinha.value = Remover Linha +relatorioMovimentacaoBilheteController.lbAdicionarLinha.value = Adicionar Linha \ No newline at end of file diff --git a/web/gui/relatorios/filtroRelatorioMovimentacaoBilhete.zul b/web/gui/relatorios/filtroRelatorioMovimentacaoBilhete.zul new file mode 100644 index 000000000..6e046fbb6 --- /dev/null +++ b/web/gui/relatorios/filtroRelatorioMovimentacaoBilhete.zul @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +