From c148fa5f83413c5f7643c8fddc0267bb9a255364 Mon Sep 17 00:00:00 2001 From: celio Date: Wed, 3 May 2023 15:02:25 -0300 Subject: [PATCH 1/2] commit merge --- .../ventaboletos/relatorios/impl/RelatorioTabelaPreco.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioTabelaPreco.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioTabelaPreco.java index 1a92bee00..87ce73ec7 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioTabelaPreco.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioTabelaPreco.java @@ -29,7 +29,7 @@ public class RelatorioTabelaPreco extends Relatorio { this.setCustomDataSource(new ArrayDataSource(this) { - @Override + @Override public void initDados() throws Exception { Connection conexao = this.relatorio.getConexao(); NamedParameterStatement stmt = new NamedParameterStatement(conexao, getSql()); From d522c2c8cc8dd0ceb98972b4fba962503ecfa95b Mon Sep 17 00:00:00 2001 From: celio Date: Wed, 3 May 2023 17:03:04 -0300 Subject: [PATCH 2/2] fixes bug#AL-2404 --- pom.xml | 4 +- .../impl/RelatorioPassagensAGR.java | 321 +++++++++++ .../RelatorioPassagensAGR_es.properties | 39 ++ .../RelatorioPassagensAGR_pt_BR.properties | 39 ++ .../templates/RelatorioPassagensAGR.jasper | Bin 0 -> 50458 bytes .../templates/RelatorioPassagensAGR.jrxml | 538 ++++++++++++++++++ .../RelatorioPassagensAGRBean.java | 156 +++++ .../RelatorioPassagensAGRController.java | 390 +++++++++++++ .../estatisticos/SubMenuRelatorioAGR.java | 16 + .../ItemMenuRelatorioPassagensAGR.java | 25 + .../utilerias/menu/menu_original.properties | 4 +- web/WEB-INF/i3-label_en.label | 32 ++ web/WEB-INF/i3-label_es_MX.label | 32 ++ web/WEB-INF/i3-label_pt_BR.label | 32 ++ .../filtroRelatorioPassagensAGR.zul | 149 +++++ 15 files changed, 1774 insertions(+), 3 deletions(-) create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioPassagensAGR.java create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioPassagensAGR_es.properties create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioPassagensAGR_pt_BR.properties create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioPassagensAGR.jasper create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioPassagensAGR.jrxml create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioPassagensAGRBean.java create mode 100644 src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioPassagensAGRController.java create mode 100644 src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/analitico/gerenciais/estatisticos/SubMenuRelatorioAGR.java create mode 100644 src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioPassagensAGR.java create mode 100644 web/gui/relatorios/filtroRelatorioPassagensAGR.zul diff --git a/pom.xml b/pom.xml index beaa3af6d..6492d90e8 100644 --- a/pom.xml +++ b/pom.xml @@ -4,12 +4,12 @@ 4.0.0 br.com.rjconsultores ventaboletosadm - 1.1.0 + 1.2.0 war 1.2.0 - 1.1.0 + 1.2.0 diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioPassagensAGR.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioPassagensAGR.java new file mode 100644 index 000000000..fdbfe8c2c --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioPassagensAGR.java @@ -0,0 +1,321 @@ +package com.rjconsultores.ventaboletos.relatorios.impl; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import com.rjconsultores.ventaboletos.relatorios.utilitarios.DataSource; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.RelatorioPassagensAGRBean; +import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement; + +import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; + +public class RelatorioPassagensAGR extends Relatorio { + + private List lsDadosRelatorio; + + public RelatorioPassagensAGR(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 fecInicioVenda = null; + if (parametros.get("fecInicioVenda") != null) { + fecInicioVenda = parametros.get("fecInicioVenda") + " 00:00:00"; + } + String fecFinalVenda = null; + if (parametros.get("fecFinalVenda") != null) { + fecFinalVenda = parametros.get("fecFinalVenda")+ " 23:59:59"; + } + + String fecInicioViagem = null; + if (parametros.get("fecInicioViagem") != null) { + fecInicioViagem = parametros.get("fecInicioViagem") + " 00:00:00"; + } + String fecFinalViagem = null; + if (parametros.get("fecFinalViagem") != null) { + fecFinalViagem = parametros.get("fecFinalViagem") + " 23:59:59"; + } + + String tipGratuIds = parametros.get("tipGratuIds").toString(); + String clienteIds = parametros.get("clienteIds").toString(); + String linhaIds = parametros.get("linhaIds").toString(); + String empresa = parametros.get("empresa") != null ? parametros.get("empresa").toString() : ""; + + String sql = getSql(fecInicioVenda, fecFinalVenda, linhaIds, tipGratuIds, clienteIds, empresa, fecInicioViagem, fecFinalViagem); + + 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 (fecInicioViagem != null) { + stmt.setTimestamp("fecInicioViagem", new java.sql.Timestamp(sdf.parse(fecInicioViagem).getTime())); + } + + if (fecFinalViagem != null) { + stmt.setTimestamp("fecFinalViagem", new java.sql.Timestamp(sdf.parse(fecFinalViagem).getTime())); + } + + if(empresa != null && !empresa.equals("")){ + stmt.setInt("empresa_id", Integer.parseInt(empresa)); + } + + ResultSet rset = null; + + rset = stmt.executeQuery(); + + lsDadosRelatorio = new ArrayList(); + + while (rset.next()) { + RelatorioPassagensAGRBean PassagensBean = new RelatorioPassagensAGRBean(); + + PassagensBean.setNumeroBilhete(rset.getString("numero_bilhete")); + PassagensBean.setRazaoSocial(capitalizeWords(rset.getString("razao_social"))); + PassagensBean.setCnpj(rset.getString("cnpj")); + PassagensBean.setNumeroPassaporte(rset.getString("numero_passaporte")); + PassagensBean.setTipoDescontoBenefício(capitalizeWords(rset.getString("tipo_desconto_benefício"))); + PassagensBean.setNomePassageiro(capitalizeWords(rset.getString("nome_passageiro"))); + PassagensBean.setNumeroBilhete(rset.getString("numero_identidade")); + PassagensBean.setOrgaoExpedidor(rset.getString("orgao_expedidor")); + PassagensBean.setCpfPassageiro(rset.getString("cpf_passageiro")); + PassagensBean.setNumeroBilhete(rset.getString("numero_poltrona")); + PassagensBean.setDataViagem(getDataCompleta(rset.getString("data_viagem"))); + PassagensBean.setMesViagem(getMesAno(rset.getString("data_viagem"))); + PassagensBean.setHoraViagem(getHora(rset.getString("data_viagem"))); + PassagensBean.setNumeroLinha(rset.getString("numero_linha")); + PassagensBean.setDenominacaoLinha(capitalizeWords(rset.getString("denominacao_linha"))); + PassagensBean.setLocalOrigem(capitalizeWords(removerEstado(rset.getString("local_origem")))); + PassagensBean.setLocalDestino(capitalizeWords(removerEstado(rset.getString("local_destino")))); + PassagensBean.setValorPassagem(rset.getString("valor_passagem")); + PassagensBean.setChaveAcessoBPE(rset.getString("chave_acesso_bpe")); + PassagensBean.setImagemBPE(rset.getString("imagem_bpe")); + PassagensBean.setNaturezaServico(capitalizeWords(rset.getString("natureza_servico"))); + + + lsDadosRelatorio.add(PassagensBean); + } + + if (lsDadosRelatorio.size() > 0) { + setLsDadosRelatorio(lsDadosRelatorio); + } + } + }); + } + + public void setLsDadosRelatorio(List lsDadosRelatorio) { + this.setCollectionDataSource(new JRBeanCollectionDataSource(lsDadosRelatorio)); + this.lsDadosRelatorio = lsDadosRelatorio; + } + + public String getMesAno(String data) { + if(!data.isEmpty()) { + data = getData(data); + DateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + Date dateFormatada = null; + try { + dateFormatada = format.parse(data); + } catch (ParseException e) { + e.printStackTrace(); + } + DateFormat outputFormat = new SimpleDateFormat("dd/MM"); + String dataDiaMes = outputFormat.format(dateFormatada); + return dataDiaMes; + } + + return ""; + } + + public static String removerEstado(String lugar) { + // Criando um array com as siglas dos estados + String[] estados = {"AC", "AL", "AP", "AM", "BA", "CE", "DF", "ES", "GO", "MA", "MT", "MS", + "MG", "PA", "PB", "PR", "PE", "PI", "RJ", "RN", "RS", "RO", "RR", "SC", "SP", "SE", "TO"}; + if(lugar != null || !lugar.isEmpty()) { + // Percorrendo o array de estados + for (String estado : estados) { + // Verificando se a string contém a sigla do estado + if (lugar.contains(" - " + estado)) { + // Retornando a string sem a sigla do estado + return lugar.replace(" - " + estado, ""); + } + if (lugar.endsWith(" " + estado)) { + // Retornando a string sem a sigla do estado + return lugar.replace(" " + estado, ""); + } + } + } + // Se não encontrar nenhuma sigla de estado, retorna a string original + return lugar; + } + + private String getData(String data) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + LocalDateTime dateTime = LocalDateTime.parse(data, formatter); + String formattedDate = dateTime.format(DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss")); + return formattedDate; + } + + private String getDataCompleta(String data) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + LocalDateTime dateTime = LocalDateTime.parse(data, formatter); + String formattedDate = dateTime.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")); + return formattedDate; + } + + public String getHora(String data) { + if(!data.isEmpty()) { + data = getData(data); + DateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + Date dateFormatada = null; + try { + dateFormatada = format.parse(data); + } catch (ParseException e) { + e.printStackTrace(); + } + DateFormat outputFormat = new SimpleDateFormat("HH:mm"); + String dataDiaMes = outputFormat.format(dateFormatada); + return dataDiaMes; + } + + return ""; + } + + public static String capitalizeWords(String input) { + StringBuilder output = new StringBuilder(); + boolean newWord = true; + if(input != null || !input.isEmpty()) { + for (int i = 0; i < input.length(); i++) { + char c = input.charAt(i); + + if (Character.isLetter(c)) { + if (newWord) { + output.append(Character.toUpperCase(c)); + newWord = false; + } else { + output.append(Character.toLowerCase(c)); + } + } else { + output.append(c); + newWord = true; + } + } + } + + + return output.toString(); + } + + + @Override + protected void processaParametros() throws Exception { + } + + private String getSql(String fecInicioVenda, String fecFinalVenda, String linha, String tipoGratu, String cliente, String empresa, String fecInicioViagem, String fecFinalViagem ) { + + StringBuilder sql = new StringBuilder(3400); + + sql.append(" SELECT "); + sql.append(" b.numfoliosistema AS numero_bilhete, "); + sql.append(" e.nombempresa AS razao_social, "); + sql.append(" e.cnpj AS cnpj, "); + sql.append(" CASE "); + sql.append(" WHEN ((b.DESCNUMDOC IS NOT NULL OR c.NUMIDENTIFICAUNO IS NOT NULL) AND c.TIPOIDENTIFICAUNO_ID = 13) "); + sql.append(" THEN nvl(b.descnumdoc, c.numidentificauno) "); + sql.append(" WHEN ((b.descnumdoc2 IS NOT NULL OR c.NUMIDENTIFICADOS IS NOT NULL) AND c.TIPOIDENTIFICADOS_ID = 13) "); + sql.append(" THEN nvl(b.descnumdoc2, c.numidentificados) "); + sql.append(" ELSE '' "); + sql.append(" END AS numero_passaporte, "); + sql.append(" CASE "); + sql.append(" WHEN (b.categoria_id in (7)) "); + sql.append(" THEN 'Idoso' "); + sql.append(" WHEN (b.categoria_id in (5)) "); + sql.append(" THEN 'Defíciente' "); + sql.append(" ELSE '' "); + sql.append(" END AS tipo_desconto_benefício, "); + sql.append(" b.nombpasajero AS nome_passageiro, "); + sql.append(" CASE "); + sql.append(" WHEN ((b.DESCNUMDOC IS NOT NULL OR c.NUMIDENTIFICAUNO IS NOT NULL) AND c.TIPOIDENTIFICAUNO_ID = 1) "); + sql.append(" THEN nvl(b.descnumdoc, c.numidentificauno) "); + sql.append(" ELSE '' "); + sql.append(" END AS numero_identidade, "); + sql.append(" '' AS orgao_expedidor, "); + sql.append(" CASE "); + sql.append(" WHEN ((b.DESCNUMDOC IS NOT NULL OR c.NUMIDENTIFICAUNO IS NOT NULL) AND c.TIPOIDENTIFICAUNO_ID = 2) "); + sql.append(" THEN nvl(b.descnumdoc, c.numidentificauno) "); + sql.append(" ELSE '' "); + sql.append(" END AS cpf_passageiro, "); + sql.append(" b.numasiento AS numero_poltrona, "); + sql.append(" nvl(b.fechorviaje, '') AS data_viagem, "); + sql.append(" r.prefixo AS numero_linha, "); + sql.append(" r.descruta AS denominacao_linha, "); + sql.append(" ori.descparada AS local_origem, "); + sql.append(" des.descparada AS local_destino, "); + sql.append(" b.preciobase AS valor_passagem, "); + sql.append(" bpe.chbpe AS chave_acesso_bpe, "); + sql.append(" bpe.url_consulta AS imagem_bpe, "); + sql.append(" cs.descclase AS natureza_servico "); + sql.append("FROM "); + sql.append(" boleto b "); + sql.append(" LEFT JOIN BPE bpe ON (bpe.boleto_id = b.boleto_id AND bpe.activo = 1) "); + sql.append(" LEFT JOIN empresa e ON (e.empresa_id = b.empresacorrida_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 clase_servicio cs ON (r.claseservicio_id = cs.claseservicio_id and cs.activo = 1) "); + sql.append(" LEFT JOIN cliente c ON (c.cliente_id = b.cliente_id "); + sql.append(" AND c.activo = 1) "); + + sql.append("WHERE "); + sql.append(" ( b.motivocancelacion_id NOT IN ( 4 ) "); + sql.append(" OR b.motivocancelacion_id IS NULL ) "); + sql.append(" AND b.categoria_id in (5,7) "); + sql.append(" AND r.orgaoconcedente_id = 16 "); + + if( fecInicioVenda != null && fecFinalVenda !=null ){ + sql.append(" AND b.fechorventa BETWEEN :fecInicioVenda AND :fecFinalVenda "); + } + + if( fecInicioViagem != null && fecFinalViagem !=null ){ + sql.append(" AND b.fechorviaje BETWEEN :fecInicioViagem AND :fecFinalViagem "); + } + + if (!empresa.isEmpty()){ + sql.append("AND b.empresacorrida_id =:empresa_id "); + } + + if (linha != null && !linha.equals("Todas")) { + sql.append(" AND b.ruta_id in (").append(linha).append(") "); + } + + sql.append(" ORDER BY "); + sql.append(" b.fechorviaje, "); + sql.append(" ori.descparada, "); + sql.append(" des.descparada, "); + sql.append(" b.nombpasajero "); + + return sql.toString(); + } + +} \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioPassagensAGR_es.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioPassagensAGR_es.properties new file mode 100644 index 000000000..73bc5ed08 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioPassagensAGR_es.properties @@ -0,0 +1,39 @@ +#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.tipopassagem=Tipo Passagem\: + +#Labels label +label.bilhete=numero_bilhete +label.empresa=razao_social +label.cnpj=cnpj +label.pass=numero_passaporte +label.tipoDesconto=tipo_desconto_benefício +label.passageiro=nome_passageiro +label.identidade=numero_identidade +label.orgaoex=orgao_expedidor +label.cpf=cpf_passageiro +label.poltrona=cpf_passageiro +label.dataViagem=data_viagem +label.mesRef=mes_ano_referencia +label.hora=horario_viagem +label.numeroLinha=numero_linha +label.descLinha=denominacao_linha +label.origem=local_origem +label.destino=local_destino +label.tarifa=valor_passagem +label.cheBPE=chave_acesso_bpe +label.linkBPE=imagem_bpe +label.tipoServico=natureza_servico \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioPassagensAGR_pt_BR.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioPassagensAGR_pt_BR.properties new file mode 100644 index 000000000..4472a4de2 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioPassagensAGR_pt_BR.properties @@ -0,0 +1,39 @@ +#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.tipopassagem=Tipo Passagem\: + +#Labels label +label.bilhete=numero_bilhete +label.empresa=razao_social +label.cnpj=cnpj +label.pass=numero_passaporte +label.tipoDesconto=tipo_desconto_benefício +label.passageiro=nome_passageiro +label.identidade=numero_identidade +label.orgaoex=orgao_expedidor +label.cpf=cpf_passageiro +label.poltrona=cpf_passageiro +label.dataViagem=data_viagem +label.mesRef=mes_ano_referencia +label.hora=horario_viagem +label.numeroLinha=numero_linha +label.descLinha=denominacao_linha +label.origem=local_origem +label.destino=local_destino +label.tarifa=valor_passagem +label.cheBPE=chave_acesso_bpe +label.linkBPE=imagem_bpe +label.tipoServico=natureza_servico \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioPassagensAGR.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioPassagensAGR.jasper new file mode 100644 index 0000000000000000000000000000000000000000..a2dbb203bfa375b3a4e756e9eccf1e5891921ea2 GIT binary patch literal 50458 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 uXKaIcm2r`=)3^ei+l?5-YYazO4D + + + + + + + + +