From 7c926b2cd09481fc20cef4a5ac30a8eeb1cf60f5 Mon Sep 17 00:00:00 2001 From: "lucas.taia" Date: Tue, 12 Jul 2022 21:44:39 +0000 Subject: [PATCH] fixes bug#24771 fixes bug#24765 dev:lucas qua: git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Web/trunk/ventaboletos@113318 d1611594-4594-4d17-8e1d-87c2c4800839 --- .../impl/RelatorioPassagensAGER.java | 264 ++++++++ .../RelatorioPassagensAGER_es.properties | 49 ++ .../RelatorioPassagensAGER_pt_BR.properties | 49 ++ .../templates/RelatorioPassagensAGER.jasper | Bin 0 -> 47930 bytes .../templates/RelatorioPassagensAGER.jrxml | 604 ++++++++++++++++++ .../RelatorioPassagensAGERBean.java | 296 +++++++++ .../RelatorioGratuidadeController.java | 30 +- .../RelatorioPassagensAGERController.java | 283 ++++++++ .../estatisticos/SubMenuRelatorioAGER.java | 16 + .../ItemMenuRelatorioPassagensAGER.java | 31 + .../utilerias/menu/menu_original.properties | 4 +- web/WEB-INF/i3-label_en.label | 23 + web/WEB-INF/i3-label_es_MX.label | 22 + web/WEB-INF/i3-label_pt_BR.label | 23 + .../filtroRelatorioPassagensAGER.zul | 129 ++++ 15 files changed, 1815 insertions(+), 8 deletions(-) create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioPassagensAGER.java create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioPassagensAGER_es.properties create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioPassagensAGER_pt_BR.properties create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioPassagensAGER.jasper create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioPassagensAGER.jrxml create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioPassagensAGERBean.java create mode 100644 src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioPassagensAGERController.java create mode 100644 src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/analitico/gerenciais/estatisticos/SubMenuRelatorioAGER.java create mode 100644 src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioPassagensAGER.java create mode 100644 web/gui/relatorios/filtroRelatorioPassagensAGER.zul diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioPassagensAGER.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioPassagensAGER.java new file mode 100644 index 000000000..11b6fa9cc --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioPassagensAGER.java @@ -0,0 +1,264 @@ +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 org.apache.log4j.Logger; + +import com.rjconsultores.ventaboletos.relatorios.utilitarios.DataSource; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.RelatorioPassagensAGERBean; +import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement; + +import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; + +public class RelatorioPassagensAGER extends Relatorio { + + private List lsDadosRelatorio; + private static Logger log = Logger.getLogger(RelatorioPassagensAGER.class); + + public RelatorioPassagensAGER(Map parametros, Connection conexao) throws Exception { + super(parametros, conexao); + + this.setCustomDataSource(new DataSource(this) { + + @Override + public void initDados() throws Exception { + try { + Connection conexao = this.relatorio.getConexao(); + + Map parametros = this.relatorio.getParametros(); + + String fecInicioVenda = null; + if (parametros.get("fecInicioVenda") != null) { + fecInicioVenda = parametros.get("fecInicioVenda").toString() + " 00:00:00"; + } + String fecFinalVenda = null; + if (parametros.get("fecFinalVenda") != null) { + fecFinalVenda = parametros.get("fecFinalVenda").toString() + " 23:59:59"; + } + + String linhaIds = parametros.get("linhaIds").toString(); + String empresa = parametros.get("empresa") != null ? parametros.get("empresa").toString() : ""; + String codOrgaoConcedente = parametros.get("CodOrgaoConcedente").toString(); + + String sql = getSql(fecInicioVenda, fecFinalVenda, linhaIds, empresa, codOrgaoConcedente); + + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss"); + NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql); + + if (fecInicioVenda != null) { + stmt.setTimestamp("fecInicioVenda", new java.sql.Timestamp(sdf.parse(fecInicioVenda).getTime())); + } + + if (fecFinalVenda != null) { + stmt.setTimestamp("fecFinalVenda", new java.sql.Timestamp(sdf.parse(fecFinalVenda).getTime())); + } + + if (empresa != null && !empresa.equals("")) { + stmt.setInt("empresa_id", Integer.parseInt(empresa)); + } + + if (codOrgaoConcedente != null) { + stmt.setString("codOrgaoConcedente", codOrgaoConcedente); + } + + ResultSet rset = null; + + rset = stmt.executeQuery(); + + lsDadosRelatorio = new ArrayList(); + + while (rset.next()) { + RelatorioPassagensAGERBean bean = new RelatorioPassagensAGERBean(); + + bean.setEmpresa(rset.getString("empresa")); + + bean.setCnpj(rset.getString("cnpj")); + bean.setDescLinha(rset.getString("descruta")); + bean.setDataVenda(rset.getString("datavenda")); + bean.setCategoria(rset.getString("categoria")); + bean.setStatus(rset.getString("status")); + bean.setChbpe(rset.getString("chbpe")); + bean.setNomePassageiro(rset.getString("NOMBPASAJERO")); + + + // bean.setOrgao(rset.getString("ORGAO")); + bean.setDataViagem(rset.getString("dataViagem")); + bean.setHoraViagem(rset.getString("horaViagem")); + bean.setCodOrigem(rset.getString("codOrigem")); + bean.setDescOrigem(rset.getString("descOrigem")); + bean.setCodDestino(rset.getString("codDestino")); + bean.setDescDestino(rset.getString("descDestino")); + bean.setPoltrona(rset.getString("poltrona")); + bean.setLinha(rset.getString("linha")); + bean.setNumBilhete(rset.getString("numBilhete")); + + bean.setRG(rset.getString("RG")); + bean.setUfOrgaoDoc(rset.getString("uforgaodoc")); + bean.setCPF(rset.getString("CPF")); + bean.setTel(rset.getString("tel")); + bean.setEmail(rset.getString("email")); + bean.setEndereco(rset.getString("endereco")); + bean.setDesistencia(rset.getBoolean("desistencia")); + bean.setOcupacao(rset.getString("ocupacao")); + + bean.setVlrTotal(rset.getBigDecimal("vlrTotal")); + + lsDadosRelatorio.add(bean); + } + + log.info("TAMANHO == null ? " + lsDadosRelatorio == null); + + if (lsDadosRelatorio.size() > 0) { + log.info("TAMANHO DA LISTA: " + lsDadosRelatorio.size()); + setLsDadosRelatorio(lsDadosRelatorio); + } + + } catch (Exception e) { + log.error("Erro na geração do relatorio AGER: \n" + e); + e.printStackTrace(); + throw e; + } + } + }); + } + + public void setLsDadosRelatorio(List lsDadosRelatorio) { + this.setCollectionDataSource(new JRBeanCollectionDataSource(lsDadosRelatorio)); + this.lsDadosRelatorio = lsDadosRelatorio; + } + + @Override + protected void processaParametros() throws Exception { + } + + private String getSql(String fecInicioVenda, String fecFinalVenda, String linha, String empresa, String codOrgaoConcedente) { + + StringBuilder sql = new StringBuilder(); + + sql.append("SELECT OC.DESCORGAO AS ORGAO, "); + + sql.append("e.cnpj AS cnpj,"); + sql.append("TO_CHAR(bpe.dt_venda, 'DD/MM/YY') AS datavenda, "); + sql.append("r.descruta AS descruta, "); + sql.append("ca.desccategoria AS categoria, "); + sql.append("bpe.chbpe AS chbpe, "); + sql.append("b.preciopagado AS tarifa, "); + + sql.append(" case bpe.codstat "); + + sql.append(" when '100' then ( "); + sql.append(" case "); + sql.append(" when bpe.tiposubstituicao is null and bpeSub.bpe_id is null and bpe.indcontingencia = 0 then 'Autorizado' "); + sql.append(" when bpe.tiposubstituicao is null and bpeSub.bpe_id is null and bpe.indcontingencia = 1 then 'Aut.Conting.' "); + sql.append(" when bpe.tiposubstituicao is not null then 'Autorizado/Substituição' "); + sql.append(" when bpeSub.bpe_id is not null then 'Autorizado/Substituído' "); + sql.append(" else 'Autorizado' "); + sql.append(" end "); + sql.append(" ) "); + + sql.append(" when '102' then ( "); + sql.append(" case "); + sql.append(" when bpe.tiposubstituicao is not null then 'Substituição' "); + sql.append(" when bpeSub.bpe_id is not null then 'Substituído' "); + sql.append(" end "); + sql.append(" ) "); + + sql.append(" when '135' then ( "); + sql.append(" case bpe.tipoevento "); + sql.append(" when '110111' then 'Cancelado' "); + sql.append(" when '110115' then 'Não embarcado' "); + sql.append(" else '' "); + sql.append(" end "); + sql.append(" ) "); + + sql.append(" when '150' then 'Aut.Conting.' "); + sql.append(" when '-1' then 'Pendente Envio' "); + sql.append(" when '-2' then 'Pendente Envio' "); + sql.append(" when '-10' then 'Rejeitado Envio Contingência' "); + sql.append(" when '-20' then 'Rejeitado Envio Contingência' "); + + sql.append(" else 'Rejeitado' "); + sql.append(" end as status, "); + + sql.append("O.CODEMPRESAPORORGAO AS empresa,"); + sql.append("TO_CHAR(B.FECHORVIAJE, 'DD/MM/YY') AS dataViagem, "); + sql.append("TO_CHAR(b.FECHORVIAJE, 'HH24:MI') AS horaViagem, "); + sql.append("ori.cveparada AS codorigem, "); + sql.append("ori.descparada AS descorigem, "); + sql.append("des.cveparada AS coddestino, "); + sql.append("des.descparada AS descdestino, "); + sql.append("B.NUMASIENTO AS POLTRONA, "); + sql.append("b.NUMFOLIOSISTEMA AS NUMBILHETE, "); + sql.append("b.NOMBPASAJERO AS NOMBPASAJERO, "); + sql.append("CASE "); + sql.append("WHEN b.DESCNUMDOC IS NOT NULL "); + sql.append("THEN b.DESCNUMDOC ELSE c.NUMIDENTIFICAUNO "); + sql.append("END AS RG, "); + sql.append("b.descorgaodoc uforgaodoc, "); + sql.append("CASE "); + sql.append("WHEN b.DESCNUMDOC2 IS NOT NULL "); + sql.append("THEN b.DESCNUMDOC2 ELSE c.NUMIDENTIFICADOS "); + sql.append("END AS CPF, "); + sql.append("r.PREFIXO AS LINHA, "); + sql.append("cd.DESCCALLE || ', ' || cd.NUMEXTERIOR || '-' || "); + sql.append("cd.DESCIUDAD || '/' || cd.DESESTADO AS ENDERECO, "); + sql.append("c.NUMTELEFONO AS tel,"); + sql.append("c.DESCCORREO AS email, "); + sql.append("toc.DESCTIPO AS ocupacao, "); + sql.append("CASE "); + sql.append("WHEN B.MOTIVOCANCELACION_ID IN (31, 32, 90) "); + sql.append("THEN 1 ELSE 0 "); + sql.append("END AS DESISTENCIA, "); + sql.append(" (COALESCE(T.PRECIO, 0) + COALESCE(T.IMPORTEPEDAGIO,0)) "); + sql.append("-(COALESCE(b.PRECIOPAGADO, 0) + COALESCE(b.IMPORTEPEDAGIO,0)) AS vlrTotal "); + sql.append("FROM BOLETO b "); + sql.append("LEFT JOIN categoria ca ON b.categoria_id = ca.categoria_id "); + sql.append("LEFT JOIN empresa e ON e.empresa_id = b.EMPRESACORRIDA_ID "); + sql.append("LEFT JOIN marca m ON m.EMPRESA_ID = e.EMPRESA_ID "); + sql.append("LEFT JOIN parada ori ON ori.parada_id = b.origen_id "); + sql.append("LEFT JOIN parada des ON des.parada_id = b.destino_id "); + sql.append("LEFT JOIN ruta r ON r.ruta_id = b.ruta_id "); + sql.append("LEFT JOIN cliente c ON c.cliente_id = b.cliente_id "); + sql.append("LEFT JOIN CLIENTE_DIRECCION cd ON cd.cliente_id = c.cliente_id AND cd.ACTIVO = 1 "); + sql.append("LEFT JOIN TIPO_OCUPACION toc ON toc.TIPOOCUPACION_ID = b.TIPOOCUPACION_ID "); + sql.append("LEFT JOIN ORGAO_CONCEDENTE OC ON r.ORGAOCONCEDENTE_ID = OC.ORGAOCONCEDENTE_ID "); + sql.append("LEFT JOIN ORGAO_EMP_PARAM O ON e.empresa_id = O.EMPRESA_ID AND OC.ORGAOCONCEDENTE_ID = O.ORGAOCONCEDENTE_ID AND O.ACTIVO = 1 "); + sql.append("LEFT JOIN TARIFA T ON r.RUTA_ID = T.RUTA_ID AND b.ORIGEN_ID = T.ORIGEN_ID AND b.DESTINO_ID = T.DESTINO_ID AND b.CLASESERVICIO_ID = T.CLASESERVICIO_ID AND m.MARCA_ID = T.MARCA_ID AND oc.ORGAOCONCEDENTE_ID = T.ORGAOCONCEDENTE_ID "); + sql.append("INNER JOIN VIGENCIA_TARIFA vt ON vt.VIGENCIATARIFA_ID = t.VIGENCIATARIFA_ID AND b.FECHORVIAJE BETWEEN vt.FECINICIOVIGENCIA AND vt.FECFINVIGENCIA "); + sql.append("LEFT JOIN bpe bpe ON b.boleto_id = bpe.boleto_id "); + sql.append("LEFT JOIN bpe bpesub ON ( bpesub.bpesubstituicao_id = bpe.bpe_id AND bpesub.activo = 1 ) "); + + sql.append("WHERE b.MOTIVOCANCELACION_ID IS NULL "); + sql.append("AND b.fechorventa BETWEEN :fecInicioVenda AND :fecFinalVenda "); + sql.append("AND (b.MOTIVOCANCELACION_ID not in (4) or b.MOTIVOCANCELACION_ID is null) "); + + if (linha != null && !linha.equals("Todas")) { + sql.append(" AND r.ruta_id in (").append(linha).append(") "); + } + + if (!empresa.isEmpty()) { + sql.append("AND b.empresacorrida_id = :empresa_id "); + } + + if (codOrgaoConcedente != null) { + sql.append(" AND OC.ORGAOCONCEDENTE_ID = :codOrgaoConcedente"); + } + + sql.append(" group by OC.DESCORGAO, O.CODEMPRESAPORORGAO, B.FECHORVIAJE, ca.desccategoria, "); + sql.append(" ori.cveparada, ori.descparada, des.cveparada, B.NUMASIENTO, des.descparada, "); + sql.append(" b.FECCORRIDA, C.NUMTELEFONO,toc.DESCTIPO, c.DESCCORREO, CASE WHEN b.DESCNUMDOC IS NOT NULL THEN b.DESCNUMDOC ELSE c.NUMIDENTIFICAUNO END, "); + sql.append(" b.NUMFOLIOSISTEMA, CASE WHEN b.DESCNUMDOC2 IS NOT NULL THEN b.DESCNUMDOC2 ELSE c.NUMIDENTIFICADOS END, b.NOMBPASAJERO, b.NUMIDENTIFICACION, T.PRECIO, b.PRECIOPAGADO, b.descorgaodoc, r.PREFIXO, cd.DESCCALLE || ', ' || cd.NUMEXTERIOR || '-' || cd.DESCIUDAD || '/' || cd.DESESTADO, B.MOTIVOCANCELACION_ID, "); + sql.append(" T.IMPORTEOUTROS, T.IMPORTEPEDAGIO, T.IMPORTESEGURO, T.IMPORTETAXAEMBARQUE, T.IMPORTETPP, b.descorgaodoc, "); + sql.append(" b.IMPORTECATEGORIA, b.IMPORTEOUTROS, b.IMPORTEPEDAGIO, b.IMPORTESEGURO, b.IMPORTETAXAEMBARQUE, b.IMPORTETPP, e.nombempresa, e.cnpj, bpe.dt_venda, r.descruta, bpe.codstat, bpe.tiposubstituicao, bpesub.bpe_id, bpe.indcontingencia, bpe.tipoevento, bpe.chbpe "); + + sql.append(" ORDER BY OC.DESCORGAO, O.CODEMPRESAPORORGAO, b.FECHORVIAJE, descorigem, descdestino "); + + return sql.toString(); + } +} \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioPassagensAGER_es.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioPassagensAGER_es.properties new file mode 100644 index 000000000..b80c8d7fa --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioPassagensAGER_es.properties @@ -0,0 +1,49 @@ +#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\: +header.filtro.servico=Serviço\: +header.filtro.linha=Linha\: +header.filtro.grupo=Grupo de Linhas\: +header.empresa=Empresa\: +header.periodo.viagem=Período Viagem\: +header.periodo.venda=Período Venda\: +header.orgaoConcedente=Orgão Concedente\: +header.tipopassagem=Tipo Passagem\: + +#Labels detail + +detail.poltrona=Poltrona +detail.numBilhete=N° Bilhete +detail.ufOrgaoEmissor=UF do órgão emissor +detail.endereco=Endereço +detail.ocupacao=Ocupação +detail.telEmail=Tel/\nE-mail +detail.desistencia=Houve Desistência? +detail.gratuidade=Valor Gratuidade concedida + +detail.empresa=Empresa +detail.cnpj=CNPJ da Empresa +detail.codLinha=Código Linha +detail.linha=Linha +detail.dataEmissao=Data da Emissão do Bilhete +detail.nome=Nome +detail.rg=RG +detail.cpf=CPF +detail.tarifa=Tarifa +detail.outros=Outros +detail.total=Valor Total +detail.desconto=Valor do Desconto +detail.pagar=Valor a Pagar +detail.categoria=Tipo de Passagem +detail.origem=Origem +detail.destino=Destino +detail.dataViagem=Data Viagem +detail.horaViagem=Horário da Viagem +detail.status=STATUS do BP-e +detail.chave=Chave de Acesso do BP-e \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioPassagensAGER_pt_BR.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioPassagensAGER_pt_BR.properties new file mode 100644 index 000000000..b80c8d7fa --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioPassagensAGER_pt_BR.properties @@ -0,0 +1,49 @@ +#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\: +header.filtro.servico=Serviço\: +header.filtro.linha=Linha\: +header.filtro.grupo=Grupo de Linhas\: +header.empresa=Empresa\: +header.periodo.viagem=Período Viagem\: +header.periodo.venda=Período Venda\: +header.orgaoConcedente=Orgão Concedente\: +header.tipopassagem=Tipo Passagem\: + +#Labels detail + +detail.poltrona=Poltrona +detail.numBilhete=N° Bilhete +detail.ufOrgaoEmissor=UF do órgão emissor +detail.endereco=Endereço +detail.ocupacao=Ocupação +detail.telEmail=Tel/\nE-mail +detail.desistencia=Houve Desistência? +detail.gratuidade=Valor Gratuidade concedida + +detail.empresa=Empresa +detail.cnpj=CNPJ da Empresa +detail.codLinha=Código Linha +detail.linha=Linha +detail.dataEmissao=Data da Emissão do Bilhete +detail.nome=Nome +detail.rg=RG +detail.cpf=CPF +detail.tarifa=Tarifa +detail.outros=Outros +detail.total=Valor Total +detail.desconto=Valor do Desconto +detail.pagar=Valor a Pagar +detail.categoria=Tipo de Passagem +detail.origem=Origem +detail.destino=Destino +detail.dataViagem=Data Viagem +detail.horaViagem=Horário da Viagem +detail.status=STATUS do BP-e +detail.chave=Chave de Acesso do BP-e \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioPassagensAGER.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioPassagensAGER.jasper new file mode 100644 index 0000000000000000000000000000000000000000..e80494670b9b1e8c0411a34cbf8e4f11b38ceb93 GIT binary patch literal 47930 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 H^N9XG6nAhT literal 0 HcmV?d00001 diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioPassagensAGER.jrxml b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioPassagensAGER.jrxml new file mode 100644 index 000000000..304a9b9bf --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioPassagensAGER.jrxml @@ -0,0 +1,604 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <band height="126"> + <textField> + <reportElement x="0" y="0" width="689" height="37" uuid="8c77b68e-7c9d-4b71-8cc1-fbb6aaf36f9c"/> + <textElement markup="styled"> + <font size="22" isBold="true"/> + </textElement> + <textFieldExpression><![CDATA[$P{TITULO}]]></textFieldExpression> + </textField> + <textField pattern="dd/MM/yyyy HH:mm"> + <reportElement x="802" y="0" width="105" height="37" uuid="32538cdd-7697-4a03-8035-f9474e869395"/> + <textElement textAlignment="Left"/> + <textFieldExpression><![CDATA[new java.util.Date()]]></textFieldExpression> + </textField> + <textField> + <reportElement x="689" y="0" width="113" height="37" uuid="abc399f3-d012-46aa-b4e9-678ab812bee4"/> + <textFieldExpression><![CDATA[$R{header.data.hora}]]></textFieldExpression> + </textField> + <textField> + <reportElement x="131" y="37" width="799" height="20" uuid="f25e6675-4dcb-4d37-8586-e50abe4013af"/> + <textFieldExpression><![CDATA[( $P{fecInicioVenda} != null ? ($P{fecInicioVenda} + " à " + $P{fecFinalVenda}) : "" )]]></textFieldExpression> + </textField> + <textField> + <reportElement x="1" y="37" width="130" height="20" uuid="e15cecc4-995a-4cbc-934e-44970c809849"/> + <textFieldExpression><![CDATA[$R{header.periodo.venda}]]></textFieldExpression> + </textField> + <textField> + <reportElement x="2" y="56" width="130" height="20" isRemoveLineWhenBlank="true" uuid="d3d41ddb-2dbb-4b0e-bf82-02af7f81b63f"/> + <textFieldExpression><![CDATA[$R{header.empresa}]]></textFieldExpression> + </textField> + <textField> + <reportElement x="131" y="96" width="799" height="20" isRemoveLineWhenBlank="true" uuid="c61794c6-537b-4cab-9a5c-41c3101cdaac"/> + <textFieldExpression><![CDATA[$P{orgaoConcedente}]]></textFieldExpression> + </textField> + <textField> + <reportElement x="2" y="96" width="130" height="20" isRemoveLineWhenBlank="true" uuid="7a4f4ad0-6b74-4194-b089-2bf61e0b7ce4"/> + <textFieldExpression><![CDATA[$R{header.orgaoConcedente}]]></textFieldExpression> + </textField> + <textField> + <reportElement x="131" y="76" width="799" height="20" isRemoveLineWhenBlank="true" uuid="7bc881ef-b270-4178-8416-54ad2602eaab"/> + <textFieldExpression><![CDATA[$P{linhas}]]></textFieldExpression> + </textField> + <textField> + <reportElement x="131" y="56" width="799" height="20" isRemoveLineWhenBlank="true" uuid="33bc773a-8bd3-4bc0-946c-664d78a19f5c"/> + <textFieldExpression><![CDATA[$P{nomb_empresa}]]></textFieldExpression> + </textField> + <textField> + <reportElement x="2" y="76" width="130" height="20" isRemoveLineWhenBlank="true" uuid="c3b8e525-e015-4aaa-a505-1a92f3d6b0fb"/> + <textFieldExpression><![CDATA[$R{header.filtro.linha}]]></textFieldExpression> + </textField> + </band> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioPassagensAGERBean.java b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioPassagensAGERBean.java new file mode 100644 index 000000000..bac778acd --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioPassagensAGERBean.java @@ -0,0 +1,296 @@ +package com.rjconsultores.ventaboletos.relatorios.utilitarios; + +import java.math.BigDecimal; + +public class RelatorioPassagensAGERBean { + + private String empresa; + private String dataViagem; + private String orgao; + private String horaViagem; + private String codOrigem; + private String descOrigem; + private String codDestino; + private String descDestino; + private String poltrona; + private String linha; + private String numBilhete; + private String nomeIdoso; + private String RG; + private String ufOrgaoDoc; + private String CPF; + private String endereco; + private String tel; + private String email; + private String ocupacao; + private Boolean desistencia; + private BigDecimal vlrTotal; + private String cnpj; + private String descLinha; + private String dataVenda; + private String categoria; + private String status; + private String chbpe; + private String nomePassageiro; + private String outros; + private BigDecimal valorTarifa; + private BigDecimal valorDesconto; + private BigDecimal valorPagar; + + public String getEmpresa() { + return empresa; + } + + public void setEmpresa(String empresa) { + this.empresa = empresa; + } + + public String getDataViagem() { + return dataViagem; + } + + public void setDataViagem(String dataViagem) { + this.dataViagem = dataViagem; + } + + public String getHoraViagem() { + return horaViagem; + } + + public void setHoraViagem(String horaViagem) { + this.horaViagem = horaViagem; + } + + public String getCodOrigem() { + return codOrigem; + } + + public void setCodOrigem(String codOrigem) { + this.codOrigem = codOrigem; + } + + public String getDescOrigem() { + return descOrigem; + } + + public void setDescOrigem(String descOrigem) { + this.descOrigem = descOrigem; + } + + public String getCodDestino() { + return codDestino; + } + + public void setCodDestino(String codDestino) { + this.codDestino = codDestino; + } + + public String getDescDestino() { + return descDestino; + } + + public void setDescDestino(String descDestino) { + this.descDestino = descDestino; + } + + public String getPoltrona() { + return poltrona; + } + + public void setPoltrona(String poltrona) { + this.poltrona = poltrona; + } + + public String getLinha() { + return linha; + } + + public void setLinha(String linha) { + this.linha = linha; + } + + public String getNumBilhete() { + return numBilhete; + } + + public void setNumBilhete(String numBilhete) { + this.numBilhete = numBilhete; + } + + public String getNomeIdoso() { + return nomeIdoso; + } + + public void setNomeIdoso(String nomeIdoso) { + this.nomeIdoso = nomeIdoso; + } + + public String getRG() { + return RG; + } + + public void setRG(String rG) { + RG = rG; + } + + public String getUfOrgaoDoc() { + return ufOrgaoDoc; + } + + public void setUfOrgaoDoc(String ufOrgaoDoc) { + this.ufOrgaoDoc = ufOrgaoDoc; + } + + public String getCPF() { + return CPF; + } + + public void setCPF(String cPF) { + CPF = cPF; + } + + public String getEndereco() { + return endereco; + } + + public void setEndereco(String endereco) { + this.endereco = endereco; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public Boolean getDesistencia() { + return desistencia; + } + + public void setDesistencia(Boolean desistencia) { + this.desistencia = desistencia; + } + + public BigDecimal getVlrTotal() { + return vlrTotal; + } + + public void setVlrTotal(BigDecimal vlrTotal) { + this.vlrTotal = vlrTotal; + } + + public String getOrgao() { + return orgao; + } + + public void setOrgao(String orgao) { + this.orgao = orgao; + } + + public String getOcupacao() { + return ocupacao; + } + + public void setOcupacao(String ocupacao) { + this.ocupacao = ocupacao; + } + + public String getCnpj() { + return cnpj; + } + + public void setCnpj(String cnpj) { + this.cnpj = cnpj; + } + + public String getDescLinha() { + return descLinha; + } + + public void setDescLinha(String descLinha) { + this.descLinha = descLinha; + } + + public String getDataVenda() { + return dataVenda; + } + + public void setDataVenda(String dataVenda) { + this.dataVenda = dataVenda; + } + + public String getCategoria() { + return categoria; + } + + public void setCategoria(String categoria) { + this.categoria = categoria; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getChbpe() { + return chbpe; + } + + public void setChbpe(String chbpe) { + this.chbpe = chbpe; + } + + public String getNomePassageiro() { + return nomePassageiro; + } + + public void setNomePassageiro(String nomePassageiro) { + this.nomePassageiro = nomePassageiro; + } + + public String getOutros() { + return outros; + } + + public void setOutros(String outros) { + this.outros = outros; + } + + public BigDecimal getValorTarifa() { + return valorTarifa; + } + + public void setValorTarifa(BigDecimal valorTarifa) { + this.valorTarifa = valorTarifa; + } + + public BigDecimal getValorDesconto() { + return valorDesconto; + } + + public void setValorDesconto(BigDecimal valorDesconto) { + this.valorDesconto = valorDesconto; + } + + public BigDecimal getValorPagar() { + return valorPagar; + } + + public void setValorPagar(BigDecimal valorPagar) { + this.valorPagar = valorPagar; + } + +} diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioGratuidadeController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioGratuidadeController.java index 69aa28d9d..589813d19 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioGratuidadeController.java +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioGratuidadeController.java @@ -33,6 +33,7 @@ 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.utilerias.UsuarioLogado; import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEstandar; import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxParada; import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxPuntoVenta; @@ -245,14 +246,29 @@ public class RelatorioGratuidadeController extends MyGenericForwardComposer { @Override public void doAfterCompose(Component comp) throws Exception { - - lsLinhas = rutaService.obtenerTodos(); - lsEmpresas = empresaService.obtenerTodos(); - lsCategorias = categoriaService.obtenerTodos(); - lsOrgaoConcedente = orgaocConcedenteService.obtenerTodos(); - listSelectedTipoGratuidade = new ArrayList(); - super.doAfterCompose(comp); + + Boolean isAGER = Boolean.FALSE; + + if(arg.get("isAGER") != null){ + isAGER = (Boolean) arg.get("isAGER"); + } + + if (isAGER) { + lsOrgaoConcedente = orgaocConcedenteService.buscar("AGER/MT"); + OrgaoConcedente orgao = lsOrgaoConcedente.get(0); + cmbOrgaoConcedente.setText(lsOrgaoConcedente.isEmpty() ? "" : orgao.getDescOrgao()); + lsCategorias = categoriaService.buscarCategoriaOrgaoConcedente(orgao.getDescOrgao()); + lsEmpresas = UsuarioLogado.getUsuarioLogado().getEmpresa(); + lsLinhas = rutaService.buscaRutasFromOrgao(orgao); + } else { + lsOrgaoConcedente = orgaocConcedenteService.obtenerTodos(); + lsCategorias = categoriaService.obtenerTodos(); + lsEmpresas = empresaService.obtenerTodos(); + lsLinhas = rutaService.obtenerTodos(); + } + + listSelectedTipoGratuidade = new ArrayList(); } public List getLsEmpresas() { diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioPassagensAGERController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioPassagensAGERController.java new file mode 100644 index 000000000..e501eb7e0 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioPassagensAGERController.java @@ -0,0 +1,283 @@ +package com.rjconsultores.ventaboletos.web.gui.controladores.relatorios; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.sql.DataSource; + +import org.apache.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Controller; +import org.zkoss.util.resource.Labels; +import org.zkoss.zhtml.Messagebox; +import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zul.Datebox; +import org.zkoss.zul.Textbox; + +import com.rjconsultores.ventaboletos.entidad.Categoria; +import com.rjconsultores.ventaboletos.entidad.Empresa; +import com.rjconsultores.ventaboletos.entidad.OrgaoConcedente; +import com.rjconsultores.ventaboletos.entidad.PerfilFuncion; +import com.rjconsultores.ventaboletos.entidad.Ruta; +import com.rjconsultores.ventaboletos.entidad.Usuario; +import com.rjconsultores.ventaboletos.entidad.UsuarioPerfil; +import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioPassagensAGER; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; +import com.rjconsultores.ventaboletos.service.CategoriaService; +import com.rjconsultores.ventaboletos.service.OrgaoConcedenteService; +import com.rjconsultores.ventaboletos.service.RutaService; +import com.rjconsultores.ventaboletos.service.UsuarioService; +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.render.RenderRelatorioLinhaHorario; + +@Controller("relatorioPassagensAGERController") +@Scope("prototype") +public class RelatorioPassagensAGERController extends MyGenericForwardComposer { + private static final long serialVersionUID = 1L; + + @Autowired + private DataSource dataSourceRead; + @Autowired + private CategoriaService categoriaService; + @Autowired + private UsuarioService usuarioService; + @Autowired + private RutaService rutaService; + @Autowired + private OrgaoConcedenteService orgaoConcedenteService; + + private Datebox datInicialVenda; + private Datebox datFinalVenda; + private MyComboboxEstandar cmbEmpresa; + private MyComboboxEstandar cmbOrgaoConcedente; + + private List lsCategorias; + private List lsEmpresas; + private List lsOrgaosConcedentes; + + private Textbox txtPalavraPesquisaLinha; + private MyListbox linhaList; + private MyListbox linhaListSelList; + + private static Logger log = Logger.getLogger(RelatorioPassagensAGERController.class); + + @Override + public void doAfterCompose(Component comp) throws Exception { + super.doAfterCompose(comp); + lsEmpresas = UsuarioLogado.getUsuarioLogado().getEmpresa(); + + if (temPermissao("USUARIO.RELATORIO.AGER")) { + lsOrgaosConcedentes = orgaoConcedenteService.buscar("AGER/MT"); + cmbOrgaoConcedente.setText(lsOrgaosConcedentes.isEmpty() ? "" : lsOrgaosConcedentes.get(0).getDescOrgao()); + + } else { + lsOrgaosConcedentes = orgaoConcedenteService.obtenerTodos(); + lsCategorias = categoriaService.obtenerTodos(); + } + + linhaList.setItemRenderer(new RenderRelatorioLinhaHorario()); + linhaListSelList.setItemRenderer(new RenderRelatorioLinhaHorario()); + } + + private void executarPesquisaLinha() { + + String palavraPesquisaRuta = txtPalavraPesquisaLinha.getText(); + + if (temPermissao("USUARIO.RELATORIO.AGER")) { + if (cmbOrgaoConcedente.getSelectedItem() == null) { + return; + } + OrgaoConcedente orgaoConcedente = (OrgaoConcedente) cmbOrgaoConcedente.getSelectedItem().getValue(); + linhaList.setData(rutaService.buscaRuta(palavraPesquisaRuta, orgaoConcedente)); + } else { + linhaList.setData(rutaService.buscaRuta(palavraPesquisaRuta)); + } + + if (linhaList.getData().length == 0) { + try { + Messagebox.show(Labels.getLabel("MSG.ningunRegistro"), + Labels.getLabel("relatorioLinhasHorarioController.window.title"), + Messagebox.OK, Messagebox.INFORMATION); + } catch (InterruptedException ex) { + } + } + } + + private void executarRelatorio() throws Exception { + + Map parametros = new HashMap(); + + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); + if (this.datInicialVenda.getValue() != null) { + parametros.put("fecInicioVenda", sdf.format(this.datInicialVenda.getValue())); + } + + if (this.datFinalVenda.getValue() != null) { + parametros.put("fecFinalVenda", sdf.format(this.datFinalVenda.getValue())); + } + + if (cmbOrgaoConcedente.getSelectedIndex() == -1) { + Messagebox.show(Labels.getLabel("relatorioPassagensAGERController.orgaoConcedente.obrigatorio"), + Labels.getLabel("relatorioPassagensController.window.title"), + Messagebox.OK, Messagebox.INFORMATION); + return; + } + + if (parametros.get("fecInicioVenda") == null && parametros.get("datFinalVenda") == null) { + Messagebox.show(Labels.getLabel("relatorioPassagensAGERController.data.obrigatoria"), + Labels.getLabel("relatorioPassagensController.window.title"), + Messagebox.OK, Messagebox.INFORMATION); + return; + } + + StringBuilder linhas = new StringBuilder(); + StringBuilder linhaIds = new StringBuilder(); + + if (linhaListSelList.getListData().isEmpty()) { + linhas.append("Todas"); + linhaIds.append("Todas"); + } else { + for (Object obj : linhaListSelList.getListData()) { + Ruta ruta = (Ruta) obj; + linhas.append(ruta.getDescruta()).append(","); + linhaIds.append(ruta.getRutaId()).append(","); + } + + // removendo ultima virgula + linhaIds = linhaIds.delete(linhaIds.length() - 1, linhaIds.length()); + linhas = linhas.delete(linhas.length() - 1, linhas.length()); + } + + parametros.put("linhas", linhas.append(";").toString()); + parametros.put("linhaIds", linhaIds.toString()); + + if (cmbEmpresa.getSelectedIndex() != -1) { + parametros.put("empresa", ((Empresa) cmbEmpresa.getSelectedItem().getValue()).getEmpresaId()); + parametros.put("nomb_empresa", ((Empresa) cmbEmpresa.getSelectedItem().getValue()).getNombempresa()); + } else { + parametros.put("nomb_empresa", "Todas"); + } + + if (cmbOrgaoConcedente.getSelectedIndex() != -1) { + parametros.put("orgaoConcedente", ((OrgaoConcedente) cmbOrgaoConcedente.getSelectedItem().getValue()).getDescOrgao()); + parametros.put("CodOrgaoConcedente", ((OrgaoConcedente) cmbOrgaoConcedente.getSelectedItem().getValue()).getOrgaoConcedenteId()); + } + + parametros.put("TITULO", Labels.getLabel("relatorioPassagensAGERController.window.title")); + + Relatorio relatorio = new RelatorioPassagensAGER(parametros, dataSourceRead.getConnection()); + + Map args = new HashMap(); + args.put("relatorio", relatorio); + + openWindow("/component/reportView.zul", + Labels.getLabel("relatorioPassagensAGERController.window.title"), args, MODAL); + + } + + public void onClick$btnExecutarRelatorio(Event ev) throws Exception { + executarRelatorio(); + } + + public void onClick$btnPesquisaLinha(Event ev) { + executarPesquisaLinha(); + } + + public void onClick$btnLimparLinha(Event ev) { + linhaList.clearSelection(); + linhaListSelList.setData(new ArrayList()); + + linhaList.setItemRenderer(new RenderRelatorioLinhaHorario()); + linhaListSelList.setItemRenderer(new RenderRelatorioLinhaHorario()); + } + + public void onDoubleClick$linhaList(Event ev) { + linhaListSelList.addItemNovo(linhaList.getSelected()); + } + + private boolean temPermissao(String permissao) { + Usuario usuario = usuarioService.obtenerID(UsuarioLogado.getUsuarioLogado().getUsuarioId()); + + for (UsuarioPerfil up : usuario.getUsuarioPerfilList()) { + List listPerfilFuncion = up.getPerfil().getPerfilFuncionList(); + for (PerfilFuncion pf : listPerfilFuncion) { + if (pf.getFuncionSistema().getDescruta().equals(permissao)) { + return true; + } + } + } + return false; + } + + public List getLsCategorias() { + return lsCategorias; + } + + public void setLsCategorias(List lsCategorias) { + this.lsCategorias = lsCategorias; + } + + public Datebox getDatInicialVenda() { + return datInicialVenda; + } + + public void setDatInicialVenda(Datebox datInicialVenda) { + this.datInicialVenda = datInicialVenda; + } + + public Datebox getDatFinalVenda() { + return datFinalVenda; + } + + public void setDatFinalVenda(Datebox datFinalVenda) { + this.datFinalVenda = datFinalVenda; + } + + public MyListbox getLinhaListSelList() { + return linhaListSelList; + } + + public void setLinhaListSelList(MyListbox linhaListSelList) { + this.linhaListSelList = linhaListSelList; + } + + public Textbox getTxtPalavraPesquisaLinha() { + return txtPalavraPesquisaLinha; + } + + public void setTxtPalavraPesquisaLinha(Textbox txtPalavraPesquisaLinha) { + this.txtPalavraPesquisaLinha = txtPalavraPesquisaLinha; + } + + public List getLsEmpresas() { + return lsEmpresas; + } + + public void setLsEmpresas(List lsEmpresas) { + this.lsEmpresas = lsEmpresas; + } + + public List getLsOrgaosConcedentes() { + return lsOrgaosConcedentes; + } + + public void setLsOrgaosConcedentes(List lsOrgaosConcedentes) { + this.lsOrgaosConcedentes = lsOrgaosConcedentes; + } + + public MyComboboxEstandar getCmbOrgaoConcedente() { + return cmbOrgaoConcedente; + } + + public void setCmbOrgaoConcedente(MyComboboxEstandar cmbOrgaoConcedente) { + this.cmbOrgaoConcedente = cmbOrgaoConcedente; + } +} diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/analitico/gerenciais/estatisticos/SubMenuRelatorioAGER.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/analitico/gerenciais/estatisticos/SubMenuRelatorioAGER.java new file mode 100644 index 000000000..7f86e0d94 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/analitico/gerenciais/estatisticos/SubMenuRelatorioAGER.java @@ -0,0 +1,16 @@ +package com.rjconsultores.ventaboletos.web.utilerias.menu.item.analitico.gerenciais.estatisticos; + +import com.rjconsultores.ventaboletos.web.utilerias.menu.DefaultItemMenuSistema; + +public class SubMenuRelatorioAGER extends DefaultItemMenuSistema { + + public SubMenuRelatorioAGER() { + super("indexController.mnSubMenuAGER.label"); + } + + @Override + public String getClaveMenu() { + return "COM.RJCONSULTORES.ADMINISTRACION.GUI.RELATORIOS"; + } + +} diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioPassagensAGER.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioPassagensAGER.java new file mode 100644 index 000000000..243597b71 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioPassagensAGER.java @@ -0,0 +1,31 @@ +package com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios; + +import java.util.Map; + +import org.zkoss.util.resource.Labels; + +import com.rjconsultores.ventaboletos.web.utilerias.PantallaUtileria; +import com.rjconsultores.ventaboletos.web.utilerias.menu.DefaultItemMenuSistema; + +public class ItemMenuRelatorioPassagensAGER extends DefaultItemMenuSistema { + + public ItemMenuRelatorioPassagensAGER() { + super("indexController.mniRelatorioPassagensAGER.label"); + } + + @Override + public String getClaveMenu() { + return "COM.RJCONSULTORES.ADMINISTRACION.GUI.RELATORIOS.MENU.RELATORIOPASSAGENSAGER"; + } + + @SuppressWarnings("unchecked") + @Override + public void ejecutar() { + Map map = super.getArgs(); + map.put("isAGER", Boolean.TRUE); + + PantallaUtileria.openWindow("/gui/relatorios/filtroRelatorioGratuidade.zul", + Labels.getLabel("relatorioPassagensAGERController.window.title"), map , 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 cb6560f64..490632aea 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 @@ -190,7 +190,9 @@ analitico.gerenciais.estatisticos.relatorioCorridas=com.rjconsultores.ventabolet analitico.gerenciais.estatisticos.gratuidades=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioGratuidadeANTT analitico.gerenciais.estatisticos.gratuidadeAGR=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioGratuidadeAGR analitico.gerenciais.estatisticos.gratuidadeARTESP=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioGratuidadeARTESP -analitico.gerenciais.estatisticos.gratuidadeAGER=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioGratuidadeAGER +analitico.gerenciais.estatisticos.AGER=com.rjconsultores.ventaboletos.web.utilerias.menu.item.analitico.gerenciais.estatisticos.SubMenuRelatorioAGER +analitico.gerenciais.estatisticos.AGER.gratuidadeAGER=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioGratuidadeAGER +analitico.gerenciais.estatisticos.AGER.passagensAGER=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioPassagensAGER analitico.gerenciais.estatisticos.gratuidadesANTT=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioGratuidade analitico.gerenciais.estatisticos.mensalDAER=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioMensalDAER analitico.gerenciais.estatisticos.gratuidadesIdosoDeficiente=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioGratuidadeIdosoDeficiente diff --git a/web/WEB-INF/i3-label_en.label b/web/WEB-INF/i3-label_en.label index 782e130c8..4170fa494 100644 --- a/web/WEB-INF/i3-label_en.label +++ b/web/WEB-INF/i3-label_en.label @@ -322,6 +322,7 @@ indexController.mniRelatorioGratuidadeANTT.label=Relatório Gratuidades ANTT indexController.mniRelatorioGratuidadeAGR.label = Gratuidades AGR indexController.mniRelatorioGratuidadeARTESP.label=Relatório Gratuidade ARTESP indexController.mniRelatorioGratuidadeAGER.label=Relatório Gratuidade AGER +indexController.mniRelatorioPassagensAGER.label = Relatório Passagens AGER indexController.mniRelatorioOperacionalFinanceiro.label=Financial Operating indexController.mniRelatorioBilhetesVendidos.label=Sales Ticket indexController.mniRelatorioGratuidadeIdosoDeficiente.label=Gratuidades Idoso/Deficiente @@ -471,6 +472,8 @@ indexController.mniRelatorioConferenciaFormularioFisico.label=Conferência de indexController.mniAuditoria.label=Audit indexController.tipoConfComissao.label=Tipo Conf. Pend. Comissão indexController.mniIntegracaoTotvs.label=Integração Totvs + +indexController.mnSubMenuAGER.label=Relatório AGER # Relatório de Forma de Pagamento por Agência formaPagamentoAgenciaController.mniRelatorioFinanceiro.label=Payment Method by Point of Sale @@ -8853,6 +8856,26 @@ relatorioGratuidadeAGERController.lbNumRuta.value=Num. Linha relatorioGratuidadeAGERController.lbPrefixo.value=Prefixo relatorioGratuidadeAGERController.lvVenda=Venda relatorioGratuidadeAGERController.lbOrgao.value=Orgão Concedente + +# Relatório Passagens AGER +relatorioPassagensAGERController.window.title = Relatório Passagens AGER +relatorioPassagensAGERController.data.obrigatoria = Data inicial e Final são obrigatórias +relatorioPassagensAGERController.orgaoConcedente.obrigatorio = Orgão Concedente é obrigatório +relatorioPassagensAGERController.tipo.obrigatoria = Tipo de passagens é obrigatório +relatorioPassagensAGERController.lbEmpresa.value = Empresa +relatorioPassagensAGERController.lbAgencia.value = Agência +relatorioPassagensAGERController.lbLinha.value = Linha +relatorioPassagensAGERController.lbOrigem.value = Origem +relatorioPassagensAGERController.lbDestino.value = Destino +relatorioPassagensAGERController.lbDataIniVenda.value = Data Inicio +relatorioPassagensAGERController.lbDataFinVenda.value = Data Fim +relatorioPassagensAGERController.btnPesquisa.value = Pesquisar +relatorioPassagensAGERController.btnLimpar.value = Limpar +relatorioPassagensAGERController.lbNumRuta.value = Num. Linha +relatorioPassagensAGERController.lbPrefixo.value = Prefixo +relatorioPassagensAGERController.lvVenda = Venda +relatorioPassagensAGERController.lbOrgao.value = Orgão Concedente + editarEmpresaController.usarAliasMapaViagemVenda.ajuda=Na tela de Venda o botão de Mapa de Viagem deve usar Alias para as Localidades. editarClienteController.MSG.validacaoCPFInvalido=CPF inválido diff --git a/web/WEB-INF/i3-label_es_MX.label b/web/WEB-INF/i3-label_es_MX.label index 23ed4b6ad..dbb485c66 100644 --- a/web/WEB-INF/i3-label_es_MX.label +++ b/web/WEB-INF/i3-label_es_MX.label @@ -476,6 +476,8 @@ indexController.mniTipoConvenio.label = Tipo convenio indexController.mniCuponConvenio.label = Boleto convenio indexController.mniPrecioVentaja.label = Uso selectivo +indexController.mnSubMenuAGER.label=Relatório AGER + # Muestra a Búsqueda Tipo clase busquedaClaseServicioController.window.title = Clase de servicio busquedaClaseServicioController.btnRefresh.tooltiptext = Actualizar @@ -8649,6 +8651,26 @@ relatorioGratuidadeAGERController.lbTipoGratuidade.value = Tipo de alojamiento relatorioGratuidadeAGERController.lbDataIni.value = Fecha Inicio relatorioGratuidadeAGERController.lbDataFin.value = Fecha Final relatorioGratuidadeAGERController.lbOrgao.value = Instituición concedente + +# Relatório Passagens AGER +relatorioPassagensAGERController.window.title = Relatório Passagens AGER +relatorioPassagensAGERController.data.obrigatoria = Data inicial e Final são obrigatórias +relatorioPassagensAGERController.orgaoConcedente.obrigatorio = Orgão Concedente é obrigatório +relatorioPassagensAGERController.tipo.obrigatoria = Tipo de passagens é obrigatório +relatorioPassagensAGERController.lbEmpresa.value = Empresa +relatorioPassagensAGERController.lbAgencia.value = Agência +relatorioPassagensAGERController.lbLinha.value = Linha +relatorioPassagensAGERController.lbOrigem.value = Origem +relatorioPassagensAGERController.lbDestino.value = Destino +relatorioPassagensAGERController.lbDataIniVenda.value = Data Inicio +relatorioPassagensAGERController.lbDataFinVenda.value = Data Fim +relatorioPassagensAGERController.btnPesquisa.value = Pesquisar +relatorioPassagensAGERController.btnLimpar.value = Limpar +relatorioPassagensAGERController.lbNumRuta.value = Num. Linha +relatorioPassagensAGERController.lbPrefixo.value = Prefixo +relatorioPassagensAGERController.lvVenda = Venda +relatorioPassagensAGERController.lbOrgao.value = Orgão Concedente + editarEmpresaController.usarAliasMapaViagemVenda.ajuda = En la pantalla de Venta o botón de Tarjeta de Viagem deve usar Alias para as Ubicaciones. editarPtovtaAntifraudeController.window.title=Editar Chave Antifraude diff --git a/web/WEB-INF/i3-label_pt_BR.label b/web/WEB-INF/i3-label_pt_BR.label index 19fdde34f..f61ee5efb 100644 --- a/web/WEB-INF/i3-label_pt_BR.label +++ b/web/WEB-INF/i3-label_pt_BR.label @@ -345,6 +345,7 @@ indexController.mniRelatorioGratuidadeANTT.label = Relatório Gratuidades ANTT indexController.mniRelatorioGratuidadeAGR.label = Relatório Gratuidades AGR indexController.mniRelatorioGratuidadeARTESP.label = Relatório Gratuidade ARTESP indexController.mniRelatorioGratuidadeAGER.label = Relatório Gratuidade AGER +indexController.mniRelatorioPassagensAGER.label = Relatório Passagens AGER indexController.mniRelatorioGratuidadeAGEPAN.label = Gratuidades AGEPAN indexController.mniRelatorioOperacionalFinanceiro.label = Relatório Operacional Financeiro indexController.mniRelatorioBilhetesVendidos.label = Bilhetes Vendidos @@ -501,6 +502,8 @@ indexController.mniAuditoria.label = Auditoria indexController.tipoConfComissao.label=Tipo Conf. Pend. Comissão indexController.mniIntegracaoTotvs.label = Integração Totvs +indexController.mnSubMenuAGER.label=Relatório AGER + # Relatório de Forma de Pagamento por Agência formaPagamentoAgenciaController.mniRelatorioFinanceiro.label = Forma de Pagamento por Agência formaPagamentoAgenciaController.window.title = Forma de Pagamento por Agência @@ -9438,6 +9441,26 @@ relatorioGratuidadeAGERController.lbNumRuta.value = Num. Linha relatorioGratuidadeAGERController.lbPrefixo.value = Prefixo relatorioGratuidadeAGERController.lvVenda = Venda relatorioGratuidadeAGERController.lbOrgao.value = Orgão Concedente + +# Relatório Passagens AGER +relatorioPassagensAGERController.window.title = Relatório Passagens AGER +relatorioPassagensAGERController.data.obrigatoria = Data inicial e Final são obrigatórias +relatorioPassagensAGERController.orgaoConcedente.obrigatorio = Orgão Concedente é obrigatório +relatorioPassagensAGERController.tipo.obrigatoria = Tipo de passagens é obrigatório +relatorioPassagensAGERController.lbEmpresa.value = Empresa +relatorioPassagensAGERController.lbAgencia.value = Agência +relatorioPassagensAGERController.lbLinha.value = Linha +relatorioPassagensAGERController.lbOrigem.value = Origem +relatorioPassagensAGERController.lbDestino.value = Destino +relatorioPassagensAGERController.lbDataIniVenda.value = Data Inicio +relatorioPassagensAGERController.lbDataFinVenda.value = Data Fim +relatorioPassagensAGERController.btnPesquisa.value = Pesquisar +relatorioPassagensAGERController.btnLimpar.value = Limpar +relatorioPassagensAGERController.lbNumRuta.value = Num. Linha +relatorioPassagensAGERController.lbPrefixo.value = Prefixo +relatorioPassagensAGERController.lvVenda = Venda +relatorioPassagensAGERController.lbOrgao.value = Orgão Concedente + editarEmpresaController.usarAliasMapaViagemVenda.ajuda = Na tela de Venda o botão de Mapa de Viagem deve usar Alias para as Localidades. editarClienteController.MSG.validacaoCPFInvalido = CPF inválido diff --git a/web/gui/relatorios/filtroRelatorioPassagensAGER.zul b/web/gui/relatorios/filtroRelatorioPassagensAGER.zul new file mode 100644 index 000000000..8b3f2ccb4 --- /dev/null +++ b/web/gui/relatorios/filtroRelatorioPassagensAGER.zul @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +