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/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()); 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 000000000..a2dbb203b Binary files /dev/null and b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioPassagensAGR.jasper differ diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioPassagensAGR.jrxml b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioPassagensAGR.jrxml new file mode 100644 index 000000000..8d852df96 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioPassagensAGR.jrxml @@ -0,0 +1,538 @@ + + + + + + + + + +