From 476449859cc62edc76eda3ff5af444698f716725 Mon Sep 17 00:00:00 2001 From: valdevir Date: Sun, 3 Jan 2021 18:27:15 +0000 Subject: [PATCH] fixes bug#20983 qua: dev:Valdevir git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Web/trunk/ventaboletos@104921 d1611594-4594-4d17-8e1d-87c2c4800839 --- .../RelatorioLinhasHorarioSimplificado.java | 653 ++++++++++++++++++ ...LinhasHorarioSimplificado_pt_BR.properties | 60 ++ .../RelatorioLinhasHorario_pt_BR.properties | 1 + .../templates/RelatorioLinhasHorario.jasper | Bin 112209 -> 113585 bytes .../templates/RelatorioLinhasHorario.jrxml | 543 ++++++++------- .../RelatorioLinhasHorarioSimplificado.jasper | Bin 0 -> 65821 bytes .../RelatorioLinhasHorarioSimplificado.jrxml | 611 ++++++++++++++++ .../RelatorioLinhasHorarioBean.java | 9 + .../RelatorioLinhasHorarioController.java | 27 +- web/WEB-INF/i3-label_pt_BR.label | 5 +- .../filtroRelatorioLinhasHorario.zul | 32 +- 11 files changed, 1667 insertions(+), 274 deletions(-) create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioLinhasHorarioSimplificado.java create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioLinhasHorarioSimplificado_pt_BR.properties create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhasHorarioSimplificado.jasper create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhasHorarioSimplificado.jrxml diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioLinhasHorarioSimplificado.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioLinhasHorarioSimplificado.java new file mode 100644 index 000000000..f9b643834 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioLinhasHorarioSimplificado.java @@ -0,0 +1,653 @@ +package com.rjconsultores.ventaboletos.relatorios.impl; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import org.apache.log4j.Logger; + +import com.rjconsultores.ventaboletos.entidad.Corrida; +import com.rjconsultores.ventaboletos.entidad.Empresa; +import com.rjconsultores.ventaboletos.entidad.GrupoRuta; +import com.rjconsultores.ventaboletos.entidad.Ruta; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.DataSource; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.RelatorioLinhasHorarioBean; +import com.rjconsultores.ventaboletos.service.ConstanteService; +import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement; +import com.rjconsultores.ventaboletos.web.utilerias.spring.AppContext; + +import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; + +@SuppressWarnings({"unused", "unchecked"}) +public class RelatorioLinhasHorarioSimplificado extends Relatorio { + + private static Logger log = Logger.getLogger(RelatorioLinhasHorarioSimplificado.class); + private List lsDadosRelatorio; + private static String CONSTANTE_GRATUIDADE_CRIANCA; + + public RelatorioLinhasHorarioSimplificado(Map parametros, Connection conexao) throws Exception { + super(parametros, conexao); + + this.setCustomDataSource(new DataSource(this) { + @Override + public void initDados() throws Exception { + + CONSTANTE_GRATUIDADE_CRIANCA = buscarConstante("GRATUIDADE_CRIANCA"); + + Connection conexao = this.relatorio.getConexao(); + + Map parametros = this.relatorio.getParametros(); + + ArrayList lsNumLinha = (ArrayList) parametros.get("lsNumLinha"); + ArrayList lsNumServico = (ArrayList) parametros.get("lsNumServico"); + + String servicoFiltro = ""; + if (lsNumServico.size() > 0) { + for (Corrida corrida : lsNumServico) { + if (lsNumServico.indexOf(corrida) == 0) { + servicoFiltro = "" + corrida.getId().getCorridaId(); + } else { + servicoFiltro += ", " + corrida.getId().getCorridaId(); + } + } + } else { + servicoFiltro = "TODOS"; + } + parametros.put("SERVICO_FILTRO", servicoFiltro); + + String linhaFiltro = ""; + if (lsNumLinha.size() > 0) { + for (Ruta ruta : lsNumLinha) { + if (lsNumLinha.indexOf(ruta) == 0) { + linhaFiltro = "" + ruta.getRutaId(); + } else { + linhaFiltro += ", " + ruta.getRutaId(); + } + } + } else { + linhaFiltro = "TODOS"; + } + parametros.put("LINHA_FILTRO", linhaFiltro); + + Empresa empresa = (Empresa) parametros.get("EMPRESA"); + + GrupoRuta grupoRuta = (GrupoRuta) parametros.get("GRUPORUTA"); + + Integer tipoServico = (Integer) parametros.get("TIPOSERVICIO_ID"); + + String sql = getSql(lsNumLinha, lsNumServico, empresa, tipoServico, grupoRuta); + + NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql); + ResultSet rset = null; + if (parametros.get("HORA_INICIAL") == null) { + stmt.setTimestamp("DATA_INICIO", (Timestamp) parametros.get("DATA_INICIO")); + stmt.setTimestamp("DATA_FINAL", (Timestamp) parametros.get("DATA_FINAL")); + + }else { + setaParametroDataHora(parametros, stmt); + } + + rset = stmt.executeQuery(); + + lsDadosRelatorio = new ArrayList(); + + BigDecimal totalPassagens = BigDecimal.ZERO; + BigDecimal totalSeguro = BigDecimal.ZERO; + BigDecimal totalBagagens = BigDecimal.ZERO; + BigDecimal totalSeuroOpcional = BigDecimal.ZERO; + BigDecimal totalTotal = BigDecimal.ZERO; + BigDecimal totalOrdinario = BigDecimal.ZERO; + BigDecimal totalExtra = BigDecimal.ZERO; + BigDecimal totalViagem = BigDecimal.ZERO; + BigDecimal totalKmRodado = BigDecimal.ZERO; + BigDecimal totalAbsoluto = BigDecimal.ZERO; + BigDecimal totalEquivalente = BigDecimal.ZERO; + BigDecimal mediaMPA = BigDecimal.ZERO; + BigDecimal mediaMPE = BigDecimal.ZERO; + BigDecimal mediaRsPorKm = BigDecimal.ZERO; + BigDecimal totalEQ = BigDecimal.ZERO; + BigDecimal mediaRSPorViagem = BigDecimal.ZERO; + BigDecimal totalPaxKMOfertado = BigDecimal.ZERO; + BigDecimal totalPaxKMTransportado = BigDecimal.ZERO; + BigDecimal totalIAP = BigDecimal.ZERO; + + BigDecimal totalTxEmbarque = BigDecimal.ZERO; + BigDecimal totalPedagio = BigDecimal.ZERO; + + String group = null; + while (rset.next()) { + RelatorioLinhasHorarioBean horarioBean = new RelatorioLinhasHorarioBean(); + + group = ((String) rset.getObject("GRUPO_RUTA")); + horarioBean.setGrupoRuta(group); + horarioBean.setTipoLinha((String) rset.getObject("TIPO_LINHA")); + horarioBean.setHora((String) rset.getObject("HORA")); + horarioBean.setServico((BigDecimal) rset.getObject("SERVICO")); + + if (rset.getObject("SENTIDO") != null) { + horarioBean.convetSentido((BigDecimal) rset.getObject("SENTIDO")); + } else { + horarioBean.convetSentido(null); + } + + horarioBean.setLot((BigDecimal) rset.getObject("LOT")); + horarioBean.setCla((String) rset.getObject("CLA")); + horarioBean.setExtensao((BigDecimal) rset.getObject("EXTENSAO")); + horarioBean.setTarifa((BigDecimal) rset.getObject("TARIFA")); + horarioBean.setPassagens((BigDecimal) rset.getObject("PASSAGENS")); + horarioBean.setSeguro((BigDecimal) rset.getObject("SEGURO")); + horarioBean.setBagagens((BigDecimal) rset.getObject("BAGAGENS")); + + horarioBean.setTxEmbarque((BigDecimal) rset.getObject("TX_EMBARQUE")); + horarioBean.setPedagio((BigDecimal) rset.getObject("PEDAGIO")); + + // Substituir a coluna Seg. Opcional por Tx. Embarque + horarioBean.setSegOpc(horarioBean.getTxEmbarque()); + + horarioBean.setOrd((BigDecimal) rset.getObject("ORD")); + horarioBean.setExtra((BigDecimal) rset.getObject("EXTRA")); + horarioBean.setAbsol((BigDecimal) rset.getObject("ABSOL")); + + horarioBean.setOrigem((String) rset.getObject("ORIGEM")); + horarioBean.setDestino((String) rset.getObject("DESTINO")); + horarioBean.setSomaExtensaoTrecho((BigDecimal) rset.getObject("EXTENSAO_TRECHO")); + horarioBean.setPaxKmTransportado((BigDecimal) rset.getObject("KM_REAL")); + horarioBean.setDescRuta((String) rset.getObject("DESCRUTA")); + horarioBean = trecho(horarioBean); + + horarioBean = calcTotal(horarioBean); + horarioBean = calcMediaReceitaTotal(horarioBean); + + horarioBean = calcTotalViagem(horarioBean); + horarioBean = calcKmRodado(horarioBean); + horarioBean = calcEquivalente(horarioBean); + horarioBean = calcMpa(horarioBean); + horarioBean = calcMpe(horarioBean); + horarioBean = calcRsKm(horarioBean); + horarioBean = calcEq(horarioBean); + horarioBean = calcRsViagem(horarioBean); + horarioBean = calcPaxKmOfertado(horarioBean); + horarioBean = calcIap(horarioBean); + + lsDadosRelatorio.add(horarioBean); + + totalPassagens = totalPassagens.add(horarioBean.getPassagens() != null ? horarioBean.getPassagens() : BigDecimal.ZERO); + totalSeguro = totalSeguro.add(horarioBean.getSeguro() != null ? horarioBean.getSeguro() : BigDecimal.ZERO); + totalBagagens = totalBagagens.add(horarioBean.getBagagens() != null ? horarioBean.getBagagens() : BigDecimal.ZERO); + totalSeuroOpcional = totalSeuroOpcional.add(horarioBean.getSegOpc() != null ? horarioBean.getSegOpc() : BigDecimal.ZERO); + totalTotal = totalTotal.add(horarioBean.getTotal() != null ? horarioBean.getTotal() : BigDecimal.ZERO); + totalOrdinario = totalOrdinario.add(horarioBean.getOrd() != null ? horarioBean.getOrd() : BigDecimal.ZERO); + totalExtra = totalExtra.add(horarioBean.getExtra() != null ? horarioBean.getExtra() : BigDecimal.ZERO); + totalViagem = totalViagem.add(horarioBean.getTotalViagem() != null ? horarioBean.getTotalViagem() : BigDecimal.ZERO); + totalKmRodado = totalKmRodado.add(horarioBean.getKmRodado() != null ? horarioBean.getKmRodado() : BigDecimal.ZERO); + totalAbsoluto = totalAbsoluto.add(horarioBean.getAbsol() != null ? horarioBean.getAbsol() : BigDecimal.ZERO); + totalEquivalente = totalEquivalente.add(horarioBean.getEquivalente() != null ? horarioBean.getEquivalente() : BigDecimal.ZERO); + + totalTxEmbarque = totalTxEmbarque.add(horarioBean.getTxEmbarque() != null ? horarioBean.getTxEmbarque() : BigDecimal.ZERO); + totalPedagio = totalPedagio.add(horarioBean.getPedagio() != null ? horarioBean.getPedagio() : BigDecimal.ZERO); + + mediaMPA = mediaMPA.add(horarioBean.getMpa() != null ? horarioBean.getMpa() : BigDecimal.ZERO); + mediaMPE = mediaMPE.add(horarioBean.getMpe() != null ? horarioBean.getMpe() : BigDecimal.ZERO); + + mediaRsPorKm = mediaRsPorKm.add(horarioBean.getRsKm() != null ? horarioBean.getRsKm() : BigDecimal.ZERO); + + totalEQ = totalEQ.add(horarioBean.getEq() != null ? horarioBean.getEq() : BigDecimal.ZERO); + + mediaRSPorViagem = mediaRSPorViagem.add(horarioBean.getRsViagem() != null ? horarioBean.getRsViagem() : BigDecimal.ZERO); + + totalPaxKMOfertado = totalPaxKMOfertado.add(horarioBean.getPaxKmOfertado() != null ? horarioBean.getPaxKmOfertado() : BigDecimal.ZERO); + totalPaxKMTransportado = totalPaxKMTransportado.add(horarioBean.getPaxKmTransportado() != null ? horarioBean.getPaxKmTransportado() : BigDecimal.ZERO); + + totalIAP = totalIAP.add(horarioBean.getIap()); + + } + + BigDecimal qtdeRegistros = new BigDecimal(lsDadosRelatorio.size()); + + if (lsDadosRelatorio.size() > 0) { + + setLsDadosRelatorio(lsDadosRelatorio); + parametros.put("TOTAL_PASSAGENS", totalPassagens); + parametros.put("TOTAL_SEGURO", totalSeguro); + parametros.put("TOTAL_BAGAGENS", totalBagagens); + parametros.put("TOTAL_SEURO_OPCIONAL", totalSeuroOpcional); + parametros.put("TOTAL_TOTAL", totalTotal); + parametros.put("TOTAL_ORDINARIO", totalOrdinario); + parametros.put("TOTAL_EXTRA", totalExtra); + parametros.put("TOTAL_VIAGEM", totalViagem); + parametros.put("TOTAL_KM_RODADO", totalKmRodado); + parametros.put("TOTAL_ABSOLUTO", totalAbsoluto); + parametros.put("TOTAL_EQUIVALENTE", totalEquivalente); + parametros.put("MEDIA_MPA", mediaMPA); + parametros.put("MEDIA_MPE", mediaMPE); + parametros.put("MEDIA_RS_POR_KM", mediaRsPorKm); + parametros.put("TOTAL_EQ", totalEQ); + parametros.put("TOTAL_TX_EMBARQUE", totalTxEmbarque); + parametros.put("TOTAL_PEDAGIO", totalPedagio); + parametros.put("MEDIA_RS_POR_VIAGEM", mediaRSPorViagem); + parametros.put("TOTAL_PAX_KM_OFERTADO", totalPaxKMOfertado); + parametros.put("TOTAL_PAX_KM_TRANSPORTADO", totalPaxKMTransportado); + parametros.put("TOTAL_IAP", totalIAP); + + } + } + + }); + + } + + private void setaParametroDataHora(Map parametros, NamedParameterStatement stmt) throws SQLException { + Calendar dataInicial = Calendar.getInstance(); + dataInicial.setTime((Date) parametros.get("DATA_INICIO")); + Calendar horaInicialCal = Calendar.getInstance(); + horaInicialCal.setTime((Date) parametros.get("HORA_INICIAL")); + mesclarDataHora(dataInicial, horaInicialCal); + stmt.setTimestamp("DATA_INICIO", new Timestamp(dataInicial.getTimeInMillis())); + if (parametros.get("HORA_FINAL") != null) { + Calendar dataFinal = Calendar.getInstance(); + dataFinal.setTime((Date) parametros.get("DATA_FINAL")); + Calendar horaFinalCal = Calendar.getInstance(); + horaFinalCal.setTime((Date) parametros.get("HORA_FINAL")); + mesclarDataHora(dataFinal, horaFinalCal); + stmt.setTimestamp("DATA_FINAL", new Timestamp( dataFinal.getTimeInMillis())); + }else { + stmt.setTimestamp("DATA_FINAL", (Timestamp) parametros.get("DATA_FINAL")); + } + } + + public List getLsDadosRelatorio() { + + return lsDadosRelatorio; + } + + public void setLsDadosRelatorio(List lsDadosRelatorio) { + this.setCollectionDataSource(new JRBeanCollectionDataSource(lsDadosRelatorio)); + this.lsDadosRelatorio = lsDadosRelatorio; + } + + private RelatorioLinhasHorarioBean trecho(RelatorioLinhasHorarioBean horarioBean) { + horarioBean.setTrecho(horarioBean.getOrigem() + " - " + horarioBean.getDestino()); + return horarioBean; + } + + private RelatorioLinhasHorarioBean calcTotal(RelatorioLinhasHorarioBean horarioBean) { + BigDecimal total = horarioBean.getPassagens(); + total = total.add(horarioBean.getBagagens()); + total = total.add(horarioBean.getSeguro()); + total = total.add(horarioBean.getPedagio()); + total = total.add(horarioBean.getTxEmbarque()); + horarioBean.setTotal(total); + return horarioBean; + } + + private RelatorioLinhasHorarioBean calcMediaReceitaTotal(RelatorioLinhasHorarioBean horarioBean) { + BigDecimal mediaTotal = horarioBean.getPassagens(); + horarioBean.setMediaReceitaViagem(mediaTotal); + return horarioBean; + } + + private RelatorioLinhasHorarioBean calcTotalViagem(RelatorioLinhasHorarioBean horarioBean) { + BigDecimal totalViagem = horarioBean.getOrd().add(horarioBean.getExtra()); + horarioBean.setTotalViagem(totalViagem); + return horarioBean; + } + + private RelatorioLinhasHorarioBean calcKmRodado(RelatorioLinhasHorarioBean horarioBean) { + BigDecimal kmRodado = horarioBean.getTotalViagem().multiply(horarioBean.getExtensao()); + horarioBean.setKmRodado(kmRodado); + return horarioBean; + } + + private RelatorioLinhasHorarioBean calcEquivalente(RelatorioLinhasHorarioBean horarioBean) { + BigDecimal equivalente = new BigDecimal(0); + try { + equivalente = horarioBean.getSomaExtensaoTrecho().divide(horarioBean.getExtensao(), 2, RoundingMode.HALF_UP); + } catch (ArithmeticException e) { + equivalente = BigDecimal.ZERO; + } catch (NullPointerException nex) { + equivalente = BigDecimal.ZERO; + } catch (Exception ex) { + log.error("", ex); + } + horarioBean.setEquivalente(equivalente); + + return horarioBean; + } + + private RelatorioLinhasHorarioBean calcMpa(RelatorioLinhasHorarioBean horarioBean) { + BigDecimal mpa = new BigDecimal(0); + try { + mpa = horarioBean.getAbsol().divide(horarioBean.getTotalViagem(), 2, 4); + } catch (ArithmeticException e) { + mpa = BigDecimal.ZERO; + } catch (NullPointerException nex) { + mpa = BigDecimal.ZERO; + } catch (Exception ex) { + log.error("", ex); + } + horarioBean.setMpa(mpa); + return horarioBean; + } + + private RelatorioLinhasHorarioBean calcMpe(RelatorioLinhasHorarioBean horarioBean) { + BigDecimal mpe = horarioBean.getEquivalente().divide(horarioBean.getTotalViagem(), 2, 4); + horarioBean.setMpe(mpe); + return horarioBean; + } + + private RelatorioLinhasHorarioBean calcRsKm(RelatorioLinhasHorarioBean horarioBean) { + BigDecimal rsKm = horarioBean.getTotal().divide(horarioBean.getKmRodado(), 2, 4); + horarioBean.setRsKm(rsKm); + return horarioBean; + } + + private RelatorioLinhasHorarioBean calcEq(RelatorioLinhasHorarioBean horarioBean) { + BigDecimal eq = null; + try { + eq = horarioBean.getMediaReceitaViagem().divide(horarioBean.getTarifa(), 2, 4); + } catch (ArithmeticException e) { + eq = BigDecimal.ZERO; + } catch (NullPointerException nex) { + eq = BigDecimal.ZERO; + } catch (Exception ex) { + log.error("", ex); + } + horarioBean.setEq(eq); + return horarioBean; + } + + private RelatorioLinhasHorarioBean calcRsViagem(RelatorioLinhasHorarioBean horarioBean) { + BigDecimal RSViagem = horarioBean.getPassagens().divide(horarioBean.getTotalViagem(), 2, 4); + horarioBean.setRsViagem(RSViagem); + return horarioBean; + } + + private RelatorioLinhasHorarioBean calcPaxKmOfertado(RelatorioLinhasHorarioBean horarioBean) { + BigDecimal paxKmOfertado = horarioBean.getLot().multiply(horarioBean.getTotalViagem()); + paxKmOfertado = paxKmOfertado.multiply(horarioBean.getExtensao()); + horarioBean.setPaxKmOfertado(paxKmOfertado); + return horarioBean; + } + + private RelatorioLinhasHorarioBean calcIap(RelatorioLinhasHorarioBean horarioBean) { + BigDecimal iap = null; + BigDecimal CENTO = BigDecimal.TEN.multiply(BigDecimal.TEN); + try { + iap = (horarioBean.getPaxKmTransportado().multiply(CENTO)).divide(horarioBean.getPaxKmOfertado(), 2, 4); + } catch (ArithmeticException e) { + iap = BigDecimal.ZERO; + } catch (NullPointerException nex) { + iap = BigDecimal.ZERO; + } catch (Exception ex) { + log.error("", ex); + } + horarioBean.setIap(iap); + return horarioBean; + } + + private BigDecimal calcTotalIap(BigDecimal totalPaxKMTransportado, BigDecimal totalPaxKMOfertado) { + BigDecimal iap = null; + BigDecimal CENTO = BigDecimal.TEN.multiply(BigDecimal.TEN); + try { + iap = (totalPaxKMTransportado.multiply(CENTO)).divide(totalPaxKMOfertado, 2, 4); + } catch (ArithmeticException e) { + iap = BigDecimal.ZERO; + } catch (NullPointerException nex) { + iap = BigDecimal.ZERO; + } catch (Exception ex) { + log.error("", ex); + } + return iap; + } + + @Override + protected void processaParametros() throws Exception { + } + + private String getSql(ArrayList lsNumLinha, ArrayList lsNumServico, Empresa empresa, Integer tipoServico, GrupoRuta grupoRuta) { + + StringBuffer sql = new StringBuffer(); + sql.append(" SELECT "); + sql.append(" GRUPO_RUTA, "); + sql.append(" HORA, "); + sql.append(" DESCRUTA, "); + sql.append(" SERVICO, "); + sql.append(" SENTIDO , "); + sql.append(" LOT, "); + sql.append(" CLA, "); + sql.append(" TARIFA, "); + sql.append(" ORIGEM, "); + sql.append(" DESTINO, "); + sql.append(" EXTENSAO, "); + sql.append(" COALESCE(SUM(EQUIVALENTE * EXTENSAO) ,0) AS EXTENSAO_TRECHO, "); + sql.append(" COALESCE(BAGAGENS, 0) AS BAGAGENS, "); + sql.append(" COALESCE(SUM(SEGURO), 0) AS SEGURO, "); + sql.append(" COALESCE(SUM(TX_EMBARQUE), 0) AS TX_EMBARQUE, "); + sql.append(" COALESCE(SUM(PEDAGIO), 0) AS PEDAGIO, "); + sql.append(" COALESCE(SUM(PASSAGENS), 0) AS PASSAGENS, "); + sql.append(" ORD, "); + sql.append(" EXTRA, "); + sql.append(" TIPO_LINHA, "); + sql.append(" ABSOL, "); + sql.append(" COALESCE(SUM(KM_REAL), 0) AS KM_REAL "); + sql.append(" FROM "); + sql.append(" (SELECT "); + sql.append(" R.RUTA_ID, "); + sql.append(" R.DESCRUTA AS DESCRUTA, "); + sql.append(" NVL(GR.DESCGRUPO, 'Não Definido') AS GRUPO_RUTA, "); + sql.append(" TO_CHAR(C.FECHORSALIDA, 'HH24:MI') AS HORA, "); + sql.append(" C.CORRIDA_ID AS SERVICO, "); + sql.append(" R.INDSENTIDOIDA AS SENTIDO, "); + sql.append(" DA.CANTASIENTOS AS LOT, "); + sql.append(" NVL(CS.DESCCLASE, '') AS CLA, "); + sql.append(" MAX(NVL(TF.PRECIOORIGINAL, 0)) AS TARIFA, "); + sql.append(" ORIGEM.CVEPARADA AS ORIGEM, "); + sql.append(" DESTINO.CVEPARADA AS DESTINO, "); + sql.append(" EXTENSAO AS EXTENSAO, "); + sql.append(" CJ.EQUIVALENTE AS EQUIVALENTE, "); + sql.append(" SUM(EE.IMPINGRESO) AS BAGAGENS, "); + sql.append(" CJ.IMPORTESEGURO AS SEGURO, "); + sql.append(" CJ.IMPORTETAXAEMBARQUE AS TX_EMBARQUE, "); + sql.append(" CJ.IMPORTEPEDAGIO AS PEDAGIO, "); + sql.append(" CJ.PRECIOPAGADO AS PASSAGENS, "); + sql.append(" CJ.BOLETO_ID, "); + sql.append(" TB2.ORD, "); + sql.append(" TB2.EXTRA, "); + sql.append(" CASE WHEN CO.ESTADO_ID <> CD.ESTADO_ID THEN 'INTERESTADUAL' ELSE 'INTERMUNICIPAL' END TIPO_LINHA, "); + sql.append(" ABSOL, "); + sql.append(" CJ.KM_REAL AS KM_REAL "); + sql.append(" FROM CORRIDA C "); + sql.append(" INNER JOIN ("); + sql.append(" SELECT "); + sql.append(" C.CORRIDA_ID, "); + sql.append(" c.ruta_id as c_ruta_id, "); + sql.append(" Destino.Cveparada AS DESTINO, "); + sql.append(" ORIGEM.CVEPARADA AS ORIGEM, "); + sql.append(" C.ROLOPERATIVO_ID, "); + sql.append(" TO_CHAR(C.FECHORSALIDA, 'HH24:MI') AS HORASALIDA, "); + sql.append(" COUNT(CASE WHEN C.TIPOSERVICIO_ID = 1 THEN 1 ELSE NULL END) AS ORD, "); + sql.append(" COUNT(CASE WHEN C.TIPOSERVICIO_ID = 2 THEN 1 ELSE NULL END) AS EXTRA "); + sql.append(" FROM CORRIDA C "); + sql.append(" INNER JOIN PARADA ORIGEM ON C.Origen_Id = ORIGEM.PARADA_ID "); + sql.append(" INNER JOIN PARADA DESTINO ON C.DESTINO_ID = DESTINO.PARADA_ID "); + + sql.append(empresa == null ? "" : " INNER JOIN MARCA M ON (C.MARCA_ID = M.MARCA_ID AND M.EMPRESA_ID=" + empresa.getEmpresaId() + ")"); + + sql.append(" WHERE "); + sql.append(" EXISTS (SELECT * FROM CAJA CA WHERE CA.CORRIDA_ID = C.CORRIDA_ID AND CA.FECCORRIDA = C.FECCORRIDA AND CA.MOTIVOCANCELACION_ID IS NULL) "); + sql.append(" AND C.FECCORRIDA BETWEEN :DATA_INICIO AND :DATA_FINAL "); + sql.append(" GROUP BY C.CORRIDA_ID, "); + sql.append(" C.ROLOPERATIVO_ID, "); + sql.append(" c.ruta_id, "); + sql.append(" Destino.Cveparada, "); + sql.append(" ORIGEM.CVEPARADA, "); + sql.append(" TO_CHAR(C.FECHORSALIDA, 'HH24:MI') "); + sql.append(" ) TB2 ON (TB2.CORRIDA_ID = C.CORRIDA_ID and tb2.c_ruta_id = c.ruta_id ) "); + sql.append(" AND TB2.ROLOPERATIVO_ID = C.ROLOPERATIVO_ID "); + sql.append(" AND TB2.HORASALIDA = TO_CHAR(C.FECHORSALIDA, 'HH24:MI') "); + sql.append(" INNER JOIN ("); + sql.append(" SELECT "); + sql.append(" C.CORRIDA_ID, "); + sql.append(" c.ruta_id as c_ruta_id, "); + sql.append(" C.ROLOPERATIVO_ID, "); + sql.append(" C.DESTINO_ID, "); + sql.append(" C.ORIGEN_ID, "); + sql.append(" TO_CHAR(C.FECHORSALIDA, 'HH24:MI') AS HORASALIDA, "); + sql.append(" COUNT(B.BOLETO_ID) AS ABSOL "); + sql.append(" FROM CORRIDA C "); + + sql.append(empresa == null ? "" : " INNER JOIN MARCA M ON (C.MARCA_ID = M.MARCA_ID AND M.EMPRESA_ID=" + empresa.getEmpresaId() + ")"); + + sql.append(" LEFT JOIN BOLETO B ON (B.CORRIDA_ID = C.CORRIDA_ID AND B.FECCORRIDA = C.FECCORRIDA AND B.ACTIVO = 1 AND B.MOTIVOCANCELACION_ID IS NULL "); + sql.append(" AND B.CATEGORIA_ID <> ").append(CONSTANTE_GRATUIDADE_CRIANCA).append(") "); + sql.append(" WHERE C.ACTIVO = 1 AND C.FECCORRIDA BETWEEN :DATA_INICIO AND :DATA_FINAL "); + + if (lsNumServico.size() > 0) { + for (Corrida corrida : lsNumServico) { + if (lsNumServico.indexOf(corrida) == 0) { + sql.append(" AND B.CORRIDA_ID IN ( " + corrida.getId().getCorridaId()); + } else { + sql.append(" , " + corrida.getId().getCorridaId() + " "); + } + } + sql.append(" ) "); + } + + sql.append(" GROUP BY C.CORRIDA_ID, c.ruta_id, C.ROLOPERATIVO_ID, C.DESTINO_ID, C.ORIGEN_ID, TO_CHAR(C.FECHORSALIDA, 'HH24:MI') "); + sql.append(" ) TB4 ON (TB4.CORRIDA_ID = C.CORRIDA_ID and tb4.c_ruta_id = c.ruta_id) "); + sql.append(" AND c.DESTINO_ID = TB4.DESTINO_ID "); + sql.append(" AND c.ORIGEN_ID = TB4.ORIGEN_ID "); + sql.append(" AND TB4.ROLOPERATIVO_ID = C.ROLOPERATIVO_ID "); + sql.append(" AND TB4.HORASALIDA = TO_CHAR(C.FECHORSALIDA, 'HH24:MI') "); + + sql.append("LEFT JOIN "); + sql.append(" (SELECT CO.FECCORRIDA, "); + sql.append(" CO.CORRIDA_ID, "); + sql.append(" CO.ROLOPERATIVO_ID, "); + sql.append(" CO.RUTA_ID, "); + sql.append(" CO.EMPRESACORRIDA_ID, "); + sql.append(" BO.BOLETO_ID, "); + sql.append(" BO.NUMKMVIAJE * COUNT(1) AS KM_REAL, "); + sql.append(" CASE "); + sql.append("WHEN T.CANTKMREAL<>0 AND BO.NUMKMVIAJE<>0 "); + sql.append("THEN ROUND(BO.NUMKMVIAJE * COUNT(1) / T.CANTKMREAL, 3) "); + sql.append("ELSE 0 "); + sql.append("END AS EQUIVALENTE, "); + sql.append(" NVL(BO.IMPORTESEGURO, 0) AS IMPORTESEGURO, "); + sql.append(" NVL(BO.IMPORTETAXAEMBARQUE, 0) AS IMPORTETAXAEMBARQUE, "); + sql.append(" NVL(BO.IMPORTEPEDAGIO, 0) AS IMPORTEPEDAGIO, "); + sql.append(" NVL(BO.PRECIOPAGADO, 0) AS PRECIOPAGADO "); + sql.append(" FROM CORRIDA CO "); + sql.append(empresa == null ? "" : " INNER JOIN MARCA M ON (CO.MARCA_ID = M.MARCA_ID AND M.EMPRESA_ID=" + empresa.getEmpresaId() + ")"); + sql.append(" INNER JOIN BOLETO BO ON CO.CORRIDA_ID = BO.CORRIDA_ID AND CO.FECCORRIDA = BO.FECCORRIDA AND BO.ACTIVO = 1 "); + sql.append(" INNER JOIN RUTA_COMBINACION RC ON RC.RUTA_ID = CO.RUTA_ID "); + sql.append(" INNER JOIN TRAMO T ON RC.TRAMO_ID = T.TRAMO_ID AND T.ORIGEN_ID = BO.ORIGEN_ID AND T.DESTINO_ID = BO.DESTINO_ID "); + sql.append(" WHERE CO.ACTIVO = 1 "); + sql.append(" AND RC.ACTIVO = 1"); + sql.append(" AND T.ACTIVO = 1"); + sql.append(" AND BO.INDSTATUSBOLETO != 'S' AND BO.MOTIVOCANCELACION_ID IS NULL "); + sql.append(" AND BO.CATEGORIA_ID <> ").append(CONSTANTE_GRATUIDADE_CRIANCA); + sql.append(" AND BO.FECCORRIDA BETWEEN :DATA_INICIO AND :DATA_FINAL "); + + if (lsNumServico.size() > 0) { + for (Corrida corrida : lsNumServico) { + if (lsNumServico.indexOf(corrida) == 0) { + sql.append(" AND BO.CORRIDA_ID IN ( " + corrida.getId().getCorridaId()); + } else { + sql.append(" , " + corrida.getId().getCorridaId() + " "); + } + } + sql.append(" ) "); + } + + sql.append(" GROUP BY CO.FECCORRIDA, CO.CORRIDA_ID, CO.ROLOPERATIVO_ID, CO.RUTA_ID, CO.EMPRESACORRIDA_ID, BO.NUMKMVIAJE, BO.BOLETO_ID, T.CANTKMREAL, "); + sql.append(" NVL(BO.IMPORTESEGURO, 0), NVL(BO.IMPORTETAXAEMBARQUE, 0), NVL(BO.IMPORTEPEDAGIO, 0), NVL(BO.PRECIOPAGADO, 0)) CJ "); + sql.append(" ON (CJ.CORRIDA_ID = C.CORRIDA_ID AND CJ.FECCORRIDA = C.FECCORRIDA AND CJ.ROLOPERATIVO_ID = C.ROLOPERATIVO_ID "); + sql.append(" AND CJ.RUTA_ID = C.RUTA_ID AND CJ.EMPRESACORRIDA_ID = C.EMPRESACORRIDA_ID) "); + sql.append("INNER JOIN PARADA ORIGEM ON (C.ORIGEN_ID = ORIGEM.PARADA_ID ) "); + sql.append("INNER JOIN PARADA DESTINO ON ( C.DESTINO_ID = DESTINO.PARADA_ID ) "); + sql.append("INNER JOIN CIUDAD CO ON (CO.CIUDAD_ID = ORIGEM.CIUDAD_ID ) "); + sql.append("INNER JOIN CIUDAD CD ON (CD.CIUDAD_ID = DESTINO.CIUDAD_ID ) "); + sql.append("INNER JOIN RUTA R ON (C.RUTA_ID = R.RUTA_ID ) "); + sql.append("LEFT JOIN GRUPO_RUTA GR ON (R.GRUPORUTA_ID = GR.GRUPORUTA_ID ) "); + sql.append("LEFT JOIN ROL_OPERATIVO RO ON (C.ROLOPERATIVO_ID = RO.ROLOPERATIVO_ID ) "); + sql.append("LEFT JOIN DIAGRAMA_AUTOBUS DA ON (DA.DIAGRAMAAUTOBUS_ID = RO.DIAGRAMAAUTOBUS_ID ) "); + sql.append("LEFT JOIN CLASE_SERVICIO CS ON (CS.CLASESERVICIO_ID = C.CLASESERVICIO_ID ) "); + sql.append("LEFT JOIN EVENTO_EXTRA EE ON (EE.CORRIDA_ID = C.CORRIDA_ID AND EE.FECCORRIDA = C.FECCORRIDA AND EE.TIPOEVENTOEXTRA_ID = 1 ) "); + sql.append("LEFT JOIN TARIFA TF ON (TF.CLASESERVICIO_ID = C.CLASESERVICIO_ID AND TF.DESTINO_ID = C.DESTINO_ID AND TF.ORIGEN_ID = C.ORIGEN_ID AND TF.MARCA_ID = C.MARCA_ID AND TF.RUTA_ID = C.RUTA_ID ) "); + sql.append("LEFT JOIN VIGENCIA_TARIFA VTF ON (TF.VIGENCIATARIFA_ID = VTF.VIGENCIATARIFA_ID AND C.FECCORRIDA BETWEEN VTF.FECINICIOVIGENCIA AND VTF.FECFINVIGENCIA ) "); + sql.append("INNER JOIN "); + sql.append("( "); + sql.append("SELECT RC.RUTA_ID, T.ORIGEN_ID, T.DESTINO_ID, NVL(T.CANTKMREAL,0) AS EXTENSAO "); + sql.append("FROM RUTA_COMBINACION RC "); + sql.append("INNER JOIN TRAMO T ON RC.TRAMO_ID = T.TRAMO_ID "); + sql.append("WHERE RC.ACTIVO = 1 "); + sql.append(") TB5 ON TB5.RUTA_ID = C.RUTA_ID "); + sql.append("AND TB5.ORIGEN_ID = ORIGEM.PARADA_ID "); + sql.append("AND TB5.DESTINO_ID = DESTINO.PARADA_ID "); + sql.append("WHERE C.FECCORRIDA BETWEEN :DATA_INICIO AND :DATA_FINAL "); + + sql.append(" "); + + if (lsNumServico.size() > 0) { + for (Corrida corrida : lsNumServico) { + if (lsNumServico.indexOf(corrida) == 0) { + sql.append(" AND C.CORRIDA_ID IN ( " + corrida.getId().getCorridaId()); + } else { + sql.append(" , " + corrida.getId().getCorridaId() + " "); + } + } + sql.append(" ) "); + } + + sql.append(grupoRuta == null ? "" : " AND R.GRUPORUTA_ID IN ( " + grupoRuta.getGrupoRutaId() + " ) "); + + if (lsNumLinha.size() > 0) { + for (Ruta ruta : lsNumLinha) { + if (lsNumLinha.indexOf(ruta) == 0) { + sql.append(" AND R.RUTA_ID IN ( " + ruta.getRutaId()); + } else { + sql.append(" , " + ruta.getRutaId() + " "); + } + } + sql.append(" ) "); + } + + sql.append(tipoServico > 0 ? " AND C.TIPOSERVICIO_ID = " + tipoServico + " " : ""); + + sql.append(" AND C.ACTIVO <> 0 AND ORIGEM.ACTIVO = 1 AND DESTINO.ACTIVO = 1 AND TB2.ORIGEM = ORIGEM.CVEPARADA AND TB2.DESTINO = DESTINO.CVEPARADA "); + sql.append("AND R.ACTIVO = 1 AND RO.ACTIVO = 1 AND DA.ACTIVO = 1 AND CS.ACTIVO = 1 "); + sql.append("GROUP BY R.RUTA_ID, R.DESCRUTA, NVL(GR.DESCGRUPO, 'Não Definido'), TO_CHAR(C.FECHORSALIDA, 'HH24:MI'), C.CORRIDA_ID, R.INDSENTIDOIDA, "); + sql.append(" DA.CANTASIENTOS, CS.DESCCLASE, TB5.EXTENSAO, TB2.ORD, TB2.EXTRA, ABSOL, "); + sql.append(" CO.ESTADO_ID, CD.ESTADO_ID, ORIGEM.CVEPARADA, DESTINO.CVEPARADA, CJ.PRECIOPAGADO, "); + sql.append(" CJ.IMPORTESEGURO, CJ.IMPORTETAXAEMBARQUE, CJ.IMPORTEPEDAGIO, "); + sql.append(" CJ.EQUIVALENTE, CJ.KM_REAL , CJ.BOLETO_ID ) "); + sql.append("GROUP BY GRUPO_RUTA, HORA, DESCRUTA, SERVICO, SENTIDO, LOT, CLA, TARIFA, ORIGEM, DESTINO, "); + sql.append(" EXTENSAO, BAGAGENS, ORD, EXTRA, TIPO_LINHA, ABSOL "); + sql.append("ORDER BY TIPO_LINHA, GRUPO_RUTA, SERVICO, ORIGEM, DESTINO "); + + return sql.toString(); + } + + + private String buscarConstante(String nomeConstante) { + ConstanteService constanteService = (ConstanteService) AppContext.getApplicationContext().getBean("constanteService"); + return constanteService.buscarPorNomeConstante(nomeConstante).getValorconstante(); + } + + protected void mesclarDataHora(Calendar pData, Calendar pHora) { + pData.set(Calendar.HOUR_OF_DAY, pHora.get(Calendar.HOUR_OF_DAY)); + pData.set(Calendar.MINUTE, pHora.get(Calendar.MINUTE)); + pData.set(Calendar.SECOND, pHora.get(Calendar.SECOND)); + + } +} diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioLinhasHorarioSimplificado_pt_BR.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioLinhasHorarioSimplificado_pt_BR.properties new file mode 100644 index 000000000..86c7ababb --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioLinhasHorarioSimplificado_pt_BR.properties @@ -0,0 +1,60 @@ +#geral +msg.noData=Não foi possivel obter dados com os parâmetros informados. +msg.a=à + +#Labels header +header.titulo.relatorio=Resumo de Linhas por Horário - RLH +header.periodo=Per\u00EDodo\: +header.data.hora=Data/Hora\: +header.pagina=P\u00E1gina\: +header.filtro=Filtro\: +header.filtro.servico=Servi\u00E7o\: +header.filtro.linha=Linha\: +header.filtro.grupo=Grupo de Linhas\: +cabecalho.impressorPor=Impresso por + +#Labels detail + +detail.receita=RECEITA +detail.viagens=VIAGENS +detail.passageiros=PASSAGEIROS +detail.parametrosOperacionais=PARÂMETROS OPERACIONAIS +detail.hora=Hora +detail.servico=Serviço +detail.trecho=Trecho +detail.setido=Sentido +detail.lot=Lot. +detail.cal=Cla. +detail.extensao=Extensão +detail.tarifa=Tarifa +detail.passagens=Passagens +detail.seguro=Seguro +detail.bagagens=Bagagens +detail.segOpc=Tx. Embarque +detail.total=Total +detail.ord=Ord. +detail.extra=Extra +detail.totalViagem=Total +detail.km.rodad=Km Rodad. +detail.absol=Absol. +detail.equivalente=Equivalente +detail.mpa=MPA +detail.mpe=MPE +detail.rsKm=R$/Km +detail.eq=Eq. +detail.rsViagem=R$/Viagem +detail.paxOfer=Pax.Km Ofer. +detail.paxTrans=Pax.Km Transportado +detail.iap=IAP% +detail.pedagio=Pedágio +detail.linha=Linha + +#Group + +group.total=Total do Grupo +sub.total=Sub Total +total.geral=Total Geral + +linhas=Linhas + + diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioLinhasHorario_pt_BR.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioLinhasHorario_pt_BR.properties index 0c458ecbc..160257214 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioLinhasHorario_pt_BR.properties +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioLinhasHorario_pt_BR.properties @@ -11,6 +11,7 @@ header.filtro=Filtro\: header.filtro.servico=Servi\u00E7o\: header.filtro.linha=Linha\: header.filtro.grupo=Grupo de Linhas\: +cabecalho.impressorPor=Impresso por #Labels detail diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhasHorario.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhasHorario.jasper index 4bb74426e63d768eb65eb2c0ce44feccca256854..f0ce5917023364bfab864a1488c1f7cd0847295e 100644 GIT binary patch delta 31728 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 BGbI23 delta 31173 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

^#np5_5P*e2)_$=D3asF-MIq!ssx3B3Q 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 QHr1VKM)B~n?WoZI09`_*PXGV_ diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhasHorario.jrxml b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhasHorario.jrxml index 24dc401af..807f48402 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhasHorario.jrxml +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhasHorario.jrxml @@ -1,8 +1,8 @@ - - + + @@ -32,6 +32,7 @@ + @@ -239,174 +240,160 @@ - - - - - - - - + - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -418,169 +405,169 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -594,298 +581,323 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -894,196 +906,196 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1103,149 +1115,149 @@

- + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1254,7 +1266,8 @@ - + + diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhasHorarioSimplificado.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhasHorarioSimplificado.jasper new file mode 100644 index 0000000000000000000000000000000000000000..c1fa77ba0c50a3a41af99452d66dd42fc6532ba0 GIT binary patch literal 65821 zcmeIb2b@$z@;KhzFU+tE%fgZbK|mzC3rJ9qlZ~*j$qgu=F2nA?j%;#f78V5+6;xDA zDCPht>KQ?T0Y&i)XE-sPCo1Y0F{i_D>aVK1-<#JnZ)a!W?*IAzKcCyrPQUJ|4%Jm1 zs;m3;yZcLGghOO#Lm-k7o}Y25Kim`ug#t~Dp-4C*(6Aub5XhL$fn^*>_}`E>8PN(! z$LhxVreIwl*B|jmNRPr({fqpW!N$z;Kq%<13!d(uR~ML6NV>>q#s2z0dGq}F!IlW= zDk9hU8x~}iM?%4d1rV{5j2OzP^M}KykuwQv36Ucc(KgQ?1_H~n;So#V@B(s3X?b2{ zZb?;nURgm_Vb#pMvhsqG;;PDm+ydg8*BFU3)))ChP{{(UOI>q)Lr!CJL!l*!$9G)(}u`v<|VZ?BGbA7!( zw4^w&7@`Melm0g7gkYo=VbcQsnm{P4p~gy;8VpwiBXt3prhuf>1?EQtq1mKkV<;GC z0ER=kfNJ771Q*l-)g3UvY0L%$Ff~#Vf~o!a?F+~S>7QENh)-X2sRvrPaW(1!3J5`2x*I~C|C3b z=#?^Ovw=4RS=BU0L!0TZYX+W;NmyGh){sTdl$pt|u(ICnsYL=@1FjH`Vzgm`7$?d5H0*LZ$#g84>KYvPS7@ z$C9-g*LJN=P&y>9SxXZkyDDJh?FK(8hG1==cnTmZCq$c$5RB4|z>q#7$zc=wu*eEW zbx-0!)2t2PNHUwi7**a>7mQ@p)io{-)D)6*Er2l3dNJ3)I6XJrxF05FY*^cNz5N>e^skO$cxnjl8QD2E%-e3OLe5$jF2g0{a}X zC$%(z)YEYe&cG})vO*#M63n+{`73>|ea3&IMrZ-i!@<)7*q{hmtfOl;E<&4{n$8T7 zj6_vLu4E`&!94J_so2A4~5YD`?ll6^& z4pLFZ^@J|m?Tt~~YK77JB^?pi0Gv$728Y@qrvgD83YpF!#ysd$Foqn_))>Mk(3Ym= zkc`^84kqT>tKK>Di;MrdVjL54BQ&N`DZKV6K>nyi{B@9D5on3z2LpAEF`#?mF`(1D z#>R!9(=03uEDF?RlhnW>m>sx2QW2~VWRuRd&`3gc!G?tupj-ta*`!kx0;t)fJB%KY zP#{uWi%L+*qCjXq3?qf4o4=vDwlRc?VsvCc;dKQiBU%jaRc+7UJQ{TT^k_;XF!`Z4 zPpKFm0${d=-Xq61N!cNG?Xo!eaisUOBjB_hgPudu9q15L9aKkXJ4dzEcBWZeF7?Y) zP}f84yvhRe12D`~$Cg(}dfRa-8XM~(!KN6B3Q3e;bwIa75e#QT7hlMys^+@72uXJi zw~%ST-vGp70@4uM+9g+sP8Q5Uh85HKDQa~lhDnn0BLYieL2p)#tV zAre>+2tk(K`JgmotCxJ>;c^(LF+2`hFm#IG=@7?XmsJOg51d*gxxHLavW1UNID7E< zZJL^|Y~m)!x3R7UOBe&h1;YhUaIjj2I|aj~HS_c8=LKqN0#>BXyhjHY1}bV{%3Dw? z^@Ae#0!LwJXI%2cv$G?DB{MNQ;Ef0K$!>%-Wm`&b zp@<0l?ucpR;tsO`v8Opel7C5PyO^cS$KoB1jLl7$E3|iL-(2vLR#>2g{0l<KlNFZi z$V^BuZ%$=02gwUuXe#8S+5l%CNdc%zN*9@S22Ylio4~j;^_U z?P*PrfP|T|EKuLLD1a>wWAK4EoA{abwjNnQy}23MkTo6hB}*lk(O}Ubm!>J!!jue#HR{PY`SL+94J$Pg zRBHH3O6`y3u9(Kf5(4uAwLd+-;KZu3yuz%Cf|+?$6(#UrD)UdM_F|LCh^d=P_9?|+ zF%%0GP^86*hOelw#*bdB?Z2jeMJ6ofrV}41I^jrpa6xu35}r;v);HRrmZsbKO}zQa zKYcZS|Lo^3IP>YEbYv7#$yXO$qU$8726X-4mJR!tpMNwgAfU%CLW2v8PifJ3#mz9~ zhF0EvRo{+l-n+kvg0ETM=%MCJaHA&F;@3M z*}-((K`KPJ08ZS&agl;H#>SS?0BVzfMCiH4A9>i9{_#A!|D(ZYqEtnmOy&*sKyNFL=VF0Yfdg$t%d)6%G(gmRbw zSq)FrW*iGdg$6UxtOvqHCCWLqbAUZ0!}y+xF*rbuMoAc9ux;@qaxCJRax-^?ba5;^ zxB(s;N>c#r_(?YusGuENj%V0Okx!MjlY=IKgfe8rfNa13^^$<}bAS*O4{e?IC-DDwhXC5Uwn zj2nE3pg>}k_@f~$Z(U;3##%nj2Gcv}0YaCy1>Ke{+o6BkX>b(bdb2`?FD%N-nhy(E z6e|$hNy4%NsP;&pFXEq94r2muxf14;Fy01w!YCmdUJmy;9XZW%R`HoM;b6kY{CM+) zV6-xqYQ-fdw4-T9Rg$RC^a8?yHDG?Pu5E5u2&&4cwoDh%Tyii8FgBG>czjpHu@3GU zg_Z^UbvB0EFU!DcCQ3?RHH$5&e%9aK4bE6!X-%IL>OMZnkuWB&C<9nF(UIeY@Q~|V z*3zU!U`GHJM0E}^!p7&}BM(1(RK}=Lla91}Vg$&DQ=|rgBDE7siBqJo_2gl;=$XbF z&-B$t4hwJobn1uiKm26NNxx1VV~sQ-QZbKOYLmj#l!=mOT2V2#X4?r1EU0oqZ?O^0 zE<=_`CJ=L5OEJ#{0TgjsYLGN6B5c!Wc`y~S0slmtTAt)o2$%DM(atPPp^d z2!-KAQ5pA zc-UgR{Y)f*6I~?GiA$ga_M8re`+b4?J(K4C)o(35>Xv8soO|(cFZT-cE8Kj5-2W?b zpF7XGa9?0uxbH+L+;<`r?n^`*_n)=7Zg~=Mf0hgP^-y?5y_FcA?HcWS0mGLk&Gc2v zw=dk8-O2mqVBYxaLz7nj zI5qR=(l^$<`EBvqSdL?9Z(5{_BHc8bPcR;LJ`#}>%|>7aLeXrT2!+p1gu-Wuu&Qrs zHXqqETAoCFp5wx2Z%rUvUDh126-}GbQ9CqhlnCyJy+B9vDHlQ;Cq&wF;zJ&u!yY4! z^>j&O6`M_9JGBUmmf57|V%V@L3xpe+L)C$zAe@nESWp4$Mp!z}$0Hc9bZ+zH8b7N6 z3+A->!8$NFMAxKP=dO^`0z7h*OitGEi0BExIe45jdIDj1Tg!Mf;PB%LK#zKO3yDdG z6LF_C2SQ8QKB;j$MnfwA9IW8X$%f;n;wT+#qNawcL%}9ES{I3)ngmj9C{(shQp>F@ zCSgiY5jY={N@+y~`uHvg)-4;(3NG@)DQ7t044DjTi&HaYT*%|lRvLk{hyJPUO)uQ` zb7@7~Ix6}BC14v7O(}tGL^LIK?A~XJhkw_^^t)#uSAMDpS-vOZs4>^Jj&v`;HN+%p$*U=6sTWPA?Z-aA(cw7#lJ!45# z59Y%0M6eXYUxaky8#HjRw>Bd?xF9!B9jph74-Pq$0=gr&0L=`-a;%;M^<+|Ytq;@$ z{bhmbKrrHOZ{iLMLd{K$I7&JSbnGL+1{jPxQ4(!)i6eR&wGwu%r6H zf;w>PLvm50t7Av}HtHL{yhuK+su(Aq&KnB1SMp{!u%J2An0y%>;P6)?nA&TTZ7SCM z>nI{#DtMf+&A~^^K2z3LonH7`%RX!HVeJ@vcn;A{ot9`4hEt03`8yfb?(%GM2%ewH>74LFH{GkZEl>s|k@N$Sa1T8@#oo`_v&{WX~ zXC7x4z;s1pxg#PBF4g#+i8U+0YYYiT{pn>^Oqf67&mX3%Rg)7*5=YI& zp?r%aa(AsGS0I%0`du9$dE6BTNiPid9OHO712$V6AT@GyBCxeJAwE2=o|)v7V{sxX z_=MUQ9EE{nMAgl3s2^q|IEfl;s1EU?*{FEUCU|abNf?g(!&w&Ca;nKD9Y6;O@KfZV zWI57GwkC0UA}3m)qP~XggySGxZ75PFOH6zU2lpK^3!IgbW%jZ23WS_5 zo!FZwh2*eSq9}VUg``KY0ge{=>o`3z3a2`~r*PgmYlIq|;HIoi68pWp>mdVVP1>s; zz!~tb@I47Q7?E%*5?PlKBP`h<`Du0(3Y<1Ea!M+TD{#akxZ}_vc3navq*p^=asTK^ z4SAwt=;&cE*#i{`53h16;soeIhhAJ#44XbSAt}idG71O*RfYG=3Tw!(;`M@R(E^|` z;Xw~hqaqd;`i!Y%C6%SHB_GF#D9wXoX@>2Z=p>ZnzGnQe=wNI=tV|U;l2+!>EvV|~2ksw)aZve;yDZ9;jYBNC?XG)1_BZaVaOt`N>(X_d2&L;f5lYvU2u@?3=H>YFpoye$+dVtJ`{&`sH+5*b zc+lOa<-ks)b!rmJmd6;9lg3pj4eng&A`O9ck%kkYNW+Oxq#+S;(zw!MoBd2AjSfelq8bGs@|(I&YWNLMex;G9hz6qxbh$*u^uJCom*WbA+Roz za3T~*I1!2@BqB}{x7rf0Jc%SR(nS*8ge0t^B?m8z_>IOy!dQ9EJ3l>^{=jMTG6sG8 zZ(m99AcXM%3WGcMxd=mGU4-F8D8g_e6k$k2oG|XQWMDrN3FAl?VH{!&Qn2Z3Z8;vi zMB+E!6G`OK6X%pXpg>mcOQgA9!H6AXNQYK1lC0&PJ|*6Cqj{kM8rvC zhb;-qlSm>NE)qG^ArZ$m{J{$)en&WwP}cvtu>7X8-Y(gfe%?F#9-Hy(K?vnV6bg5q zcM*!fx(LOIP=w+{C_<5lIH5dm$-;gn5=y3vPy5=qL9TOsH1yCt&oPeb<|l4Gj}e1Y0wu#jyPx8+LDr3A&QhXQEqFf zy(m2HyyGG~fprm{6QKytiBNG51PKEHLZQ0(Atrc=e8o(OcJ|~ok*_NjQX&nxpcs| zPfj^5ze_m#K#u|-8%A9FhJF{cCPKzye-9E#z8_EMJl1i$$S zm0U3FH^7bxq4s+wL8f^@zq%faS%G zdXH3w{v5pcFV}9|b?kR*X3W?f*E=xLrCheF;TSak;~|&vkM)4a!by+sClVXqPZY#l zivT;T9wLRapI9k?8cvHf{;_mPVf5i_wy`#(F|o}7#y_#O;ATZaM#S6dtVMrv++N*q z(uifN{&dNR>f25|eb-bt?0TTfOm;Xjh&uyZcrCClymlfKUON#AuO%Xm*8`$VmcB&1 zJ}Q>iu*~fIUs&!ZCx<((f1&2n9iRD!oISL|%$~U)9fTZ4qa3)C=^_V#b&-P;p~%6B zP~;#HadOCPmmJ2r$U&SIIC!PmTIeSygS&R`e(;Aq@9jI{oBWbZJ#u#(gba>D8E|K^ ziwp$TMFviUA_FHvk%2_S$zXE3WH8P}2C4t~C4O>Zc=W|D8*W|QrDed-C0AcDCiljJ z5JM4)fjcu?#2~OPVsIi9F*p&57$hQ23^Up#hVd?9NLS7iAAFav7Wc`?;?l#OT-9aH znakcgrPSQpVY>Z>RQqkhY!1qTJF{G5A+Rp8a3U00I1!30BqB~0v)Uz#2`;ke5qrA+ z;KgAr>ys15MJe@{-SOu~M!vD*AG>PPN+umd*9f9GxFhw;lda5bM9@VXBAGxa;&37q zaY#g*I2N=^97nr|Bkh0|^sT7L1Bv+Sn3R%w&EBW`b{+Bk-QiQGz85(y_s!O{W4!bZ zUfKhe(sS)qjV~!n0^?deE2T&Qh1|E3hu@#febbixZ)=7m0{#FH56DN*`yffT3oS%h*!SbAMf-|krBgq4a?~>uW<_=);Tx%xmJ|{d5;@Ew* za}iv|E$9yXxL1B-2+ow&!|~RJ1@VW6;HZqeNXPxCOdE$|QybtcFeL#)%cY*-{;v1e{<_wA(FiI>q@IUG z%__?(%7fQE%Bza9N}U;Z;-^9Q^(k;_R!Q7xdRBR9UK!lvf>b#ZC4C*Wl3$l-^@{Uy zD&VGPXP)9_%QsQ!c(A|}S@|?1Q(u%@7g(nFQ$W1THng=)iz}>?3L3btRPLkZhlANqU zg;H^Rlgp>D5steBlyp60y0Sb`$Exhg;#@U@UQq$V2_eVneI+A{xfKOPc~!IVAQK;Y zMC0ok%>plIoZZ-AZPL0)05lG1Tk5}u@2iZr1f_&%6}vk32=P^1}er;o|CTS0kM!BjXkmRD7pHMO7^E|*dV5XZST`9`}% z6`13|UR7LDlnv|zNo6@J8Gk++IRN7bH{J3hh1{G6Iq<=xptvBXpv0Mj=pHz7Vebe> z{BS_a$^%PI;py^$WO3Y0_K7x=RhCy~l@*j!734ZgYn@&!%U4)XJS_`E4>#{BL?%v_ z3ODf2EXXNocf!sUB^7XUe<^g$tf_g$N^5KV&^~gPQ!7%J=S{6tsck!Hsz{ohHT3|> z?Piq=#a5M+f;?kn({}kCMHbw3il^HMmre|C+Dy`>jIg4uS%JVYrQ+I4X`DxB>vKR2&DXKGnxsnWy}4}6_u*?GAzrzq*#rrQTIN?w&5 zrJVwEFA|1*oD~S(f-bk?VZ4Tuv3Mgw#_5fX^{~paf^c1~?O)OYOCvG6@kxK0KU@pC zy5V{2iCsPB?$!v)hwHaM>k+RJz;{L>wV^;5ZZfTDX*zBSUn6OYz3|krXrMtmK0?^o zqtOR%f@@yObcGaGEqZU*JP*L)#iYr0mC~M-`p90wng%L9sitPCF@8|E9E-&qqX)G7sn<&`SfBx+GnZu_yz}Nr_FDhN+bDF z_zNDGqjT5XOg_D!GKCA1zm36Z#207XBne_BCzMLY+Ht2UlQcmjaz{1uJ#!!cY2&_dbP@{oo2ub1B?@-&ZL)X4|X1#acr4 zWWgd81_PVlU0f)zZYznhI|a|B{U<8i)ulN5OpiDJ`TidA3yRmyhT+-fh! zA-_I5;WT&91nlVp>7*RJ+;ru<6h_tdYT_ zDReRJ3Ls3g9WrWyc-{HX{&u|B)rcMUu#x@8jO-tM%|8QPcq`5Yi%(&GRb^>^eA_SD zq~$Knf2v{kv@0ZDVQX|fw!wwRnKBd3H}MzpfT-5q>cH3q=p4{U+RKF^=ddZ5fg`o{ z2`3`{Wrl+z;1CxA;s?+;GJ1)Fl~t}o?SZqSw+l5fgK8Wpt}hiF98>zZk)d|7*2qv} z9S9ls@vegN`=KsmI0kt^0y0~+4gCBDymqAamID_?-`L_oy+|+~xBfoCfp8(JZ1jsI z13GOh!)}~V5}v3(II<3lB@4LYK1la=o*+N?_VJqCKKk1vM91e?Tc17d{@2E6<$(Ob zwY_N72K=9>T8fzL%F4k+gxzfZfhfxZ?W)L0r`3j{8vhQsz{6b%OwezoMF^})?X6=} zT!ZW)WlMxU>YT<}ZG{joW_-7!9*CmAk52Oe5Ic8!7dWqp@k6Yb?5n9pTWo2?Vx+8* zqAWSWg(dNmw_V%V?g@->o!IOI?P8D8M^z>zo*&?K<6{$T!}3cF65ORF%udQ>>3VTx zVIhczUBc@Uy+(lYLo1?_Scg`+*>6?HA4S&_TqCgQr9RJn_wwjXV~4$e?Z@X7JKlf= zEz17m1c==?NA6iw&gilrDD+< z6>8F-lI+K&FFr77Nx!oteQ}>Jl-n8Xo??R(z9t8U5a9Dm^tPVord@heGlO>#;0{2z zIIPxhef*^m?xBUN<@$&ZT;K=jsxgW93|%>Vb07d$*>#v7S}<>s_&6_{laCh(@(>E{ zJY*Lkf4unOi@-a8kTe9J1p(k(!o63{IqTa>E-W)kO0$lygf|#4*Vq>s)|a%*S$)UP z?;LS>&S4`*P9I@4CX`_GuhsUu3W?;-a?!Ay2lNDDl}q~-$pm7qRivGjOrf-2nF2^s z+wbxyk?YCzw|D<;Yd=I#}t}!EIon}%p=7q+!7BX70yC2fN0{Lr84I$^d z^ZX(5>IqBU^Lnm-;FZGOCuPHJuGZ@e&N5r&`C81HJ6E~zTwq;z?nEd&cOn#?O9T+5 z^86|%ncSa<=M!Cco+^0`UmguMMsH%}dAYNi0m+=*?PK-XXC67_u|s$MxbH7tdZ&-g zcD%9RtV64;-hiy;&N>%X3#<#Pod|{1PK3g0i2$NhRq| zXmS5?_-J`u01j!uXUOqn&Cr20HJL?4nM>er;IIt%?g;`#8nnGQ&NkQ?O&HdHME`;P zcijTci2etVtK;N@ohd~#O!SY#vw=1~3wCZ7vmbe8;6I+}6)gK(pXdK}-u9x)+R5yvu`upD<-%-%bz!y>p)lKt zP?#+dam;?IUCf^B!t74gnC4#)Y=Fa)j=xqo4ev^`S7BJgO^@W8_1!P`f9{$4|M|ez zZ+-UoxYGRoPEJEcq|`2$7we{VzKR8MXSWNt1=fYzPK3g3Cqm)2L;yu$B+YKxyKNdR zPok#%r&w;ou-47K#EtKQ|1>Lq{Iliv@NUfV;P1{#4%Mz5s!5P|I@y zydr3;of0brWcWZnCkp|@NJS|GVr2lCOxs=@Cr3uvTT8;3IW5K+nQ_O zD!PccLYQF3(?Bt^^NW{qy`zV+-#!Q8n&}RDgAL?j1p!q2$MnzT-+s8G(VVJ^E zKzFr(a3HiOSk3PC!d|iKzv@b-+&2xqmCw=wKiIvg3BJ>!5I-UMI=M5;##M378R^Y)H<{6))`eh`_}LeVQ0wC6F>tkfrXyG8t(M<2a~xY z1wSOlzbwP8;cX5`kEdT%aQ(8$8*jL9-r}D=$a<-j0m+!q+JF?5`xLlz6u+gFoZN5P zeB4pzeg5M19#=&ETJT2}jD*%g9)&m}S&<)$vAHwRMdSkOB624}5xEngh+HD#L_SgJ z5*SD%@*EeDr%I78!n^a8Pnn5udC8afYr&#`23M?ta^6vky}owxp(xMZ8Jix z$#`npGTsJ-K9RJHw`?BX|Gok9U)o$c?53T@w5tzL#)T+j?o4-)vB0{>*ojbN>_jLs zmWVhRPj8oua}&rIJ`ImwI#BY%an41?PfAuNC*wPZZ2tA(^M8EdsrLqK?3Gdcc55;| zp*0zIu*|sPdp%HiX;S0&^(%vaZya>hc{{%yv}ye1B?XF%;TlVx34a9>E6vArH^t&4 zlreW^yU18zU1aP;C^B{;6d6kd92LX(ax^UZxP`K?xDBPBa zR=8c;E^g<$aJ!S_He9{#_$n38R?$v6+N~RQnfMnUlWW~~OuF={iq&P0J^1qZtNowm z)Wz}}_()38X}g8voxTQl7P;_TU|o3bL?}FWA{3rWL@PXB)GnS+b>Vqu$#a)aK*p?9 zqg)>VTnEJ@$yR<}xc=m0)6$nM{b~QKU%!~PG?wd0jwvgVvVh2sM2!f_`;;kXl_ za9ko<;rMy&;`lTdj;BeEJC6-VGgTUTbYQV=BTlZNU)K5LHBTBHj|ojG?|H+&rw)u| zIkxdPlWXW}knP;L!iDVu>%w*?LSefTp|D*dT4DPYQ4UET)(P4m{}c04bfs9}!gilz zJ3l|C%wv;Vy;!Z zot50SQCKch05doX>}B~a3VSe+h}qL!m~D+J3+ppN_)TjiLxta7dn~u^RyjT?P36uV z4O!=Y-}Awrf2%Lff9qgw7B=ofCUNH;7k&$@3%{KRh2Ktu!f%NHW~ltWM_~^J;`pua z=Sk4+HN%D9mY#x#!IaEe;We!D8GbG{IbNUpaAnacdq3N^W5oW+$CS+g6R~4;*RIRW zjYpB!+;RD2ti-zTS|k$)h1X7m!fS~DW~jVQ;*+rsUKhIX+FIek?Lv5ob299<;`I$1e@f{)dH?5Yjgr*|!S3gf-Q0Ob@WFX1K_H%UVYf);!fq!*VYfuYvHKZ? zJrGFhYYH>rbG$*g)gh}cxS#>Q839d||8X{q;HeKX z%dT2;*#6rOy@UKVrBiI9Nm9#t8ygIF-g0R$0_)OXoQSzr(RNmEixf(Okttf4?%#3> zhWq10?Jx`%yNKGF?zy#B$xRs&?ek6~8-_&uhI#vrRophE;r{D0&stqoebkitCHc2o zbyrFh)puJc??WDO=TjGU3#<#fod|{9PK3g4i2$URTxm(`BS`&AuXjg>GCeT4(uw zWI1~QARO4GKs*W1^$S6nsc z_%1I@DtxQM?a%%_tzbd>nzo6XOTuy4T$0#$J}U?(pB03Y&lVz<&u05JmyWmjEN+9x zH?LBnSB-Ga;(n1aV&IVjM~EP96DcpdJ7r;?`kX@n49pubg2|KJXm*LJTKZs$2E^fesf1$Btx8Q zP>FTnw@4-s3csBQh2IhZ)TrZsiOn9%^Q|J-BB(+UaOY&f8$|>H>mmXtLJ@%zp@={t zfE-l>CtIAipAHegooA{D{4OGJyfY{BI1mX~hM43eaLHifj@f51O(Pa0#1Y?0VhI{fJDSeK)$(U^FQ%IZ(ghfKnY54A5}6EvGw5;TOSq` zjw-ONzqtgO^HE8?6j$7c7cf@9U9_!e&z*})s>JQ5;;vPAyJ>u)oZ-{)V1vq-US{1U zTi*n?Q(_^6|MBm<7LxR8INSqw9L~#uYj$M>5IHsA>)3ec9JVy$F+J-2!3NAK4oheY zXO32O+!S6+8o#J24gD?HwOkQ!`4gLyefRf0e=@xl?=f+MaLM|={{HY|kS>E=O34WK zJBq7Dj~{i+_@gHrHGbTUZc52vaS_y;g%zeKm(tBB zQcAWje&RPBD|Lw8mPtw9xbmF0z*2H(99}eee&H`AgW}LGH^3^@cDrPh;++5?e|-Qh zI+cZY)B;7Brd9_Bvr(*J|RO% ziU8ntBGkyr!SUHrO1cQB<2o8jItf@9zU&PLc!0Me%&$x;6Nlx*C1KFP9GN=4ya|aU z!S-j>Z1Sv&JZ$ptMJ`HwR-p@;Ly%n71?KH)yq4bvSO;8SP+bJq^84r21@OjX>pDV8 zMkmWz`~E~|A$C^E4TB(W8)5gF%Hj&(r45hXp6871ysr+%J3F@eMLluRJMdS)U5c2+8F+M7WF&0&|y`y zqiI+fM494t6&G|)I|mDI-O&bPiH#FC#KiF?$^;QX;m`mzbvXVmCa1_m2C?jlQZMka z?1@ru;iJ?KRLh62ojZD@#hxSFBDt{f@R)cOvz)j1ImIE!v0_DuippOMYVuPn2jwhs~r!&uOd)_(&}Yroe5l z3w^{OW(UGZy^nZ=uhB=m!grdFbP&FLUY$Z@rHU z6u#ShMZeE0dtP~m&PM}`UCW*-?Yd|P~Egz#QNs6xkBk<+T|P2K`2OM}M+x6EJ~CGLp7W7$ zWIRgsc^{b|d@uUQ(ZcsPA2~+&cKgUg;d|9bCJEo`K60$^{oO|<3*SF{3EyWvl24{0eV_ZtG~xTwM+$`R zYaf{|eBb)W4B`9UM+$}SM;|E?zWqK@EPOxvNQvLaDX_nVI#FMNOaNE!E0>LcaC zr};>Q@EJZ*DSRFu+{1!Y(GEU%6M_3W`pAjG*U3j_314R)nJs)>d}NOBrTfT9!q?pg zRz04!r;nT>e24f*mGJfPk-5Ux*GK%qcbJdN6TSgHQZ0Ok`$&!O9pNJZ;Tz&3^M!Ai zk1PG#X&K~h>ri}I?4_VcIqp#KQV^Zn=TN*9CKv0o z8;%vQm(GS|lg!j*>FcE@0r_rgUN1cb6i!iDF{OFw+$h)VRj!xLi$d+?t(Vq--Yil( z*0o+bALw^k(0XYt@Y=DG_0m&8YLalVg!R%oh~rqhdT9g15rxP_tCu!WV&B}K<)xu0 zTO7+&FNMY@D<{^cUb+Y}cPvc3w8fEAo|m2uE#9h-moAM~+FpZt>6suwb@Az?XTz*7 zX%y={=c?07&jCI~g)WzyUV0wT=Uiuc=}JoE7h1gZ0wB#^S$gRzXlP0i*7f~fdNGJs zpwzXbm#(%utG$TyQur)~)nwIg`FQCScH6g>jb6G2sC2Fuz4U53S9_u8rPlztf(Te4 zdg*m`x8h4fFTDYl7m^1tYeFx*i4t-9vzOkIoQ)29KOe0;bR86IE52U30fP2g&`WOz ziCRjlm)-%o6YBL|dKa`RMd9?)yMbiKTER>2rNko_e_nb&G%~I(Dl0!P-2}4b899{F zMlXF3$gtOZUb+>?uykWD-40~nYR^j_27!kIxYYB~M64TnzDQ=2gyEa74?XlLsI;=O^U|k5x^~m7EUxg6(42GPaq#L6yWN~OMkJ423Q|?>A!7WMwd8V`a49j*F;`MV)A!HWemH9 zFw%pj)O~1yi#h=$;2VLB4WRw-@6Kg%eWRi_)VLUxED!U5kht2y5e4vNJ=lZx zuny2YA=8<#!eSj$SPJt&fuPIG#4FxF5JO$c^RZOcIfbrgX%KviX4$;GULjhbcVJ|xr zbTIfJU5pMUVk$bA1o>D$b{HsxtUm}N+&oWw_ub0|LTBXyumFR=BqDDKh`nCT%LYSt zwC>Ci_kelXP!MO7)1tWS=J{~o+{1=LQ{y=NuwiEGl~x`$5@Z>@^To?DQ05K=(y9-a z*QgYBB!e|I|L#^Md|V{c{#=)b9R<7*cVfY=fm0ubU8{gQL&mZ3nBxSP3izFVCG%sr z>7vov+&qR&OksW4q!cy+Y0~kMEid~MP~mTC3N+NfT<2DixVi~WP4clREDQ6>hV~d~ z6vf20N4xM`mWOfkp_NE!;LaU?_tVR!!AxMuh~I1EWz#`yTnt=?M~-+{VG1iE3n3e_ zFoxDvtL>n*6w3#bz6Q6(cv(3m6lz}?Eg8(aaLa|4odEq)5+gw3QVTDe1$se$yvxGN z<{?PUv~ zFGv`l!dVb1Bmv@0PcH*zS!eU@DV%}nIqqFKF9Q>=b+(&N6kc{(G_m!*k(a>`W|hkI z7uFml4Muo0J9^pTXi9+bLEX!iL<``0>L!Sa?1TQ|H4VYemfqM}jb@1t38eNMHwLvWqa; zU)aS^nD{U!sCfY}=P>?Fqq*<|Ll^A*GBk7XCm6Z-6HHwE2?j3y1oIYuf^myK!L-Gn zVA$eMFl+HA7`6BlOj`U21}**sa~6MsF^fOJl*ON5$l^~hWAP^#vG@~ASo{eFEdB)Z z6@P;9ia)`0#h+lf;!iMJ@h2Fq_;Y}Kg29T1!Cb|kV65U#Fjes<7^?Ua%vAgdMk@XU z6BU1gfr>xDJjI`2oZ?R~P4OofruY-gQv3-ge}VyuKf(OOpJ06APcS|4Cm5di6Uee}VytKf!#&pI|)VPcR+vCm4?S z6U;{Z2}UFS1d|beg29MC!Cb_jU@YQKFcrZQ-!25BFSzjLoVFbL0foypJ{rD_)D5Rw zNCP@e=!DRTptA^_7IaQWXDK>oqH{Jn=b&>QIxEq+0G(CnT#U|YbS^{Z3Ut<>b2U2G zpmQBMH=uJ9I=7&+4xJ6?+>Xv2=-h?Q-RRtl&i&|YLgztrwxY8gorlqR6rIP=*@@1R z=sbna)95^l&R@}a0iBo7c^REo(0L7=H_&+#owv|=8=ZI2c@Lcr(D@LZkJ0%Qoqgzh zfzDUxe1pz+==^}rztH&!onO%TH#)zALkT(z9UUDL9WOd5==jh{MJElNuIO|_rw2N{ z(CLlNq3HBOr$0Ia(HVr!V04C}GaQ|f4}kb7JrbN%U}?nruywGTcL0ldD%i@?!Ajl> z?BjjGGCmM&;zPh1J`x7b(GVIBw(m(`^_~Lu?mVz`PX}xXShp*{u00DZ+NXdmyBcEG zg8jN4EZ17? z7Lz%&oSZ~YBq!68$tiRmsiF(WTv|u`^fWS$E+W#(MQQ?^a&E8Pm?fxo7SXrJV!D^K z&<{ZdlxEOO(H((9Vwy@DK4Kd^YWT=)bo}rmx6xy4$#Izxavn@#D_|#PCG4%755`xp z!HOL8G6G-ugN}XX@Db^B(nB}*^ zK~RYTIvqjBE1;zaDpx?9)Jg?(HpV(Z0iA=OSqkVp1kF)ED-m?E0=fV}RSIYog8T~T zVgywypw$QpD4@#_v_Jt}fuNuQT7#g43g~JC)hnQD5Y(uEu0zmi3g`v|g%!|E2x?Y9 zw;*V-0$PWlB?@Q*g3eGtwGGs}#^q1g%v-Pa^1A1@shxu2(=$ zBj`p2^elpIRzQD^_SYw26eQ$Q7+o)ear1H*@2-FytSez3Xbp^#S3xhnnp{KHl0Sp{ z7+l=48^*>D$@OGExq+sT8);v16O39n(;RXOok?z`L9&i6CF^1I*+AEk+h8WSojyx8 z(mmu3`W3ko%o=yGZsgBw2)Ub0B=^A5>s~gO+{eP?ezuZ4z^)~m*xh6^dz?JTULjl9 zM`SDeiEPt4lI>bQ@{l%~JgnuCN3;{jquQxthqer;Vz`+j#us{_7+>gUto5z3*6VlD z^*Emb=r#rP5`s1=pqCMJrviEfL4Q_2uOa9j1@s1j?o&W-BIp4H^cI3PE1(mKp!LMaRu}#f}T)7`=U)EA2z=Uc^aC;GteZSg(mSF zG>N}LlXxDQ#0$_QUWCT*5;Tdw0rOvmCb1iu#4FGwUWF#{8Z?R5p-H>}Vu9^6Ar>u7 zh=uW?dY3HuFFWa9P%Qyso>4$wA?P^;^bLZZS3ut(=tTwe1A_jhfc}M`-3sU@1ih+& zenHUd3h3Vm`nv-99YOzafjWE5cG}$(h;;*0htJTUjca$^iKtpf}oESkPkth zD4WZK*6;L+>eXW3cAn02K)C)o1E1=#8`cVNLilF@ps2_rURzUp` z^s53Ih#9J4=wux zXxaaSmi-~L?2n*je+(`A6KL6=Lc9J9p!=X@e-17C3uxJ2Ld*UN2D`6eu=@rEyKiBz z`wj-X?_sd}0S3DtVX*rb40iiru=@!HyPsjO`vnHOUtzHOHw<>a!C?1040eAI%5-Lc z84}l?I)uEq-syM*C{7yOxcM0^>T?%7KLjlPRfAG|BmCCE?_T&l48N!02X{Krci{&w zI?#WC(EwB{mI^=kG&36vzcKKe0>5JTodiE9gSEhKCH&UF5AtL8!|z4-!38+%Gx+TX z^~``@I{XH}FB5)~;Wq<*weVX3zboN)EBxS;x(4YqNT>Y(6@l{gPVnmkzhUs30KYu= z!JA*YAAXJSTL!-i;CD6rHo$Ka{C2|cCHTR;dHN^t`;HJ}BK#n&Q3}5~@PlipjOz$7 zA#W4vW{!s6vG9Xcqge*Oli>&SnPK>y3BL>B2X!=Wh9B_K+ycK{@cR~ie*kZRP7mbe z0XjWErw7XN0G%G7(*tyRfKJav@Pj)wJsaT%bb5eJ576m(n-*;}^B!R-v-EAO6ZnsD z_>Xk>2cTaQak@L;9injKw0sn^s{-Oi^gaf{1_=Du7t*pyVmR_{c*a)E) z?9jCkdeaVF1ff^#&@u?UW``Of^no4nL+A}VR1Tqc?NFW)a{`1GZDrk{bnrC@pW)fc zdI2%L0rbmOc8DO&2cdskA^mp<{ceZ884lZucIX2L>2~Nf2r)bKG^Ddh)3*c8Yvb+$ zoLve11_(XX3TgUTiIDS@d@3LmEioTLvKCRAWrg)&07?_&fUleISxBt^%bbmUiZ*J$ z4^L-(x3U4?{a!(Q1c<{0;w{J|)vBHLLNs$o^jNe22;C2%-geA&5IWQjt%1-;JG2rC zd(Wn#MG2h>MIRxGt^$NDI_-D}*`m{OAVXVN+BgWAcJ@OcWD7()1VTe?Tt~=$h{&FR zcNq7wA0J^OW}slWVsH!GlX~TBdloFHdYJ~F2;hku@WfZ3rFFYlZjE;5}7%Zvk(e@LmO8=$Dvm6?mJ3_bl*+gf{}-i0}r%yGVFX0dI@& zmV@_n;hhHFrNTQIyk`n83hg>UGn6ujGwMMCdBU*J$CBaMfhdywq21|_h)Iff`O);W4CSoa(Q9hd_jByZVyV*CHp4xI`i zIbsxTBqu=#n1MqZgo+^~hc^gKfyzT01f~*f{{yWyPO$wCwnNbV$-QKuCp2IUL3_e6ie7XFJrqte^rg?y0dTrtAbp(< zrti`r^nE%4Hr7W{P*3Q;=xF*g9S1weWb)m<>rs)*cm*&FOWgZ(w3)mPs zosFZ#Yzi%5IkcP=(+b$gI+2}3XTc`Z$?Q~m3hd|1V=c5Awo?|cm9&;!NbA@dTF=(f z)7Uy1Vz<#n?0&kKZKh|i7wJ;=GCiB^q08C3bOrm2u4G@(Rct@Ki2Xt@)eL%>1}AMa zSnFy%=(XAadYv|i-lS#Ho3$}?y*8O{(5BEkv>EhHt(e}U)zW*lg>;j)f^OC>pxd-7 z>2~dE`lxm*-JxxuPiT+PC$%T&)7l>TjP@>lUi*x`pnXAK)_$P7wf*#UozXXRgTAGA zqI>i-x>xT*-_!fi5A|X6BYhoquI&kSmrm6W%JDA*nD#;TVPIS z3(YcCXI8Q%^JI3KIhQq?wQP~OkezOZ*%{^{c9wZ2JKJ2&&NDA$E6j`8h2|Qz%3RA< zn>Vvd&2{Wb^Def=yoX(5ZeiD&+u4ogE_RdoG+SqW%hsDeu#M&)><$lOcY8Xqdpv3E z0Z$*c$~+uC>>r+s*jt{}>|M{bY_I1A_D|17_Mzu4_NiwR`^>Y2ed*cBzVhs1-+5kQ z-+Okm{hqhkPoBN(-=0r2RF_x$PkH{I@(haie_DCIKvAA$NGi`VB$a0wlFG9TN#$9F zr1C67QhAmksXWV2GRpIXit;Q%mhvn^QhAmksXWV&RGwu>D$k;LOL>+!sXR;EK`YNP zAE`XckW`+rM3^VZR)#)HKbFd~M0Qh=QhA1a+?8jEh*zFP?JVV4hNSW=LsEH`A*npe zkW`*!NGi{=FsVGtP`vUi6G`P+hNSW=LsEH`A*npekW`*!=>L@R3^cW=Jj*!$Q=b3( z$}_Y;R8gh!EJIRx7Om4#o+VBy&oU&HXBm>pvkXb)S%#$Y3?b-+u=&oFXBj#e-|B$a2a6Jc6sdJCwS>$Gn4Hmw(^kcZF*w7&FVtskh313_IpoIa-wp|5B|>Fe4^ z`mS~)eP0_*_kjxfr8b`aOPfG{)+RBg9m@=D3QN_pSQjmi_15xPUu`-Ytj%D%h+aZIeSq%hrO(=WP7yp*}K|B>@)3R_JwvC+pk^De$lSd4DD*o zt6it1Yu9T%w41d7+AZ23ZG)Dn-KLGv?$jo0cWG0!d$k$beOj@$S*z6^)D~*nwH4Y! z+6CGU?Mm%2$l*!tR&5ugdImzzYENh{XnV95wRg4M+GpA;+85dz+7H^_wf)*2ooR3D zhW4J`Nqb*U(>~JsXdmnSw0-(8?Q?yk_O(7i`$nIr{h;S*KkC!8pY?L>7k#GoyYAQi z&}(!}Z`5@?q!+B*^m*oJz1keBFEEeQ zYt7^II&-RCZ%)@wGt2alS*b5FPu3TkbM-UKT79XxP(RxY>&wkW`U>+*eWkfvUu9mX zUu0gaUuv$=FEiKbYs{PVtIT!!wdP&=b>=<#P39K;W^=o~-rS{cFrU`%Fu&FBG=I?V zG5^r-^)P*tr<1s8>Th^L`dgl5`X0~O`d-gP`g@+$`iGut^^ZI^=%0Bu>iax*>0fy^ z>0f)c=-+#G>OXjP=|6d1(tq~s)_?Q7t^e-XYcS6z23#-5R{c+T{-5&vUr?U^4_lru zQIuy9vXo~TlFG9TN#$9Fr1C67Qh65DwUlRx`~T4Lj3o-?8GSLzvqXaO>_i^0$0>w%aBx_Wk@Q|G9;B}8IsDg3`yk~_=hTdTb5^;NGi`VB$a0wlFG9TN#$9Fr1C67 z|EH8^ps7veS;qOF^8DXdo<)DQlxG?G|C8lev~f#$mZ2n-XCs|3qdUFDIE1bC?tA`kZkjeZ|P2uN!0NyT(!UeFN;M#?kak<5>DHV>12O z$YRXMW`>c^QjMvsi!p=sHVRo^uyYPJj%UM+N;bxr2{zE#Yzo*sbBrpmbIxVQ8#U}C zBfzSRAUoAKmDL*!ti@<#XBc6&(ulANjTW}XSi;sC%h)>OOm>@b4!hqtmu)uAXD=ET zu$PUC*&gE(_O5X``^>n4ePLY9_8V*2FUIwnVcej34OkW!w`x6%+q413?b;yYE-lme zvo^-KPn&GquT3!?)Mgl4v|{5St=4#0TWCC{tuP+fE--d!R~k=gR~yf2w;IoB8;lpV z$BdV>CyZCLJ;tlryT;$O&x|*dVZ|pn|6B z7nt2Z?d+vrZ5{%uW?xV(`{^6af%+!%aD9t8MBix+)pwaA^_R>e_1&Q2zHN@t_nPDN zPs|DWK68@(9jLoMnp2F4W|lG8%ro-Ld}Eq9-6%C@80BV(F~=-5PBANtrDmmZmO0C~ z&YW%BXr5yBF{{jeX0=2G)y zbD25UTn;hMF&COE0eil=$h^or)4Uj7%pc6n<{##R9%gR$bTS|Eq?tQBeay!^{mdsl!^~Zt zk>)d=3Ffn&iRKHQJo81*G;_D7+S6)v#j&hteaYyXzHv5i%yJ%L%8$RRY!Wg2B-L11q}JlK=n! literal 0 HcmV?d00001 diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhasHorarioSimplificado.jrxml b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhasHorarioSimplificado.jrxml new file mode 100644 index 000000000..7fb2c9171 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhasHorarioSimplificado.jrxml @@ -0,0 +1,611 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <band splitType="Stretch"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioLinhasHorarioBean.java b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioLinhasHorarioBean.java index fb6a46f76..fadf52629 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioLinhasHorarioBean.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioLinhasHorarioBean.java @@ -41,6 +41,8 @@ public class RelatorioLinhasHorarioBean { private BigDecimal ordLinha; private BigDecimal extraLinha; private BigDecimal somaExtensaoTrecho; + private String descRuta; + public RelatorioLinhasHorarioBean() { } @@ -354,4 +356,11 @@ public class RelatorioLinhasHorarioBean { public void setSomaExtensaoTrecho(BigDecimal somaExtensaoTrecho) { this.somaExtensaoTrecho = somaExtensaoTrecho; } + public String getDescRuta() { + return descRuta; + } + + public void setDescRuta(String descRuta) { + this.descRuta = descRuta; + } } diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioLinhasHorarioController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioLinhasHorarioController.java index 02ee43324..2673b6786 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioLinhasHorarioController.java +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioLinhasHorarioController.java @@ -17,23 +17,27 @@ 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.Checkbox; import org.zkoss.zul.Combobox; import org.zkoss.zul.Datebox; import org.zkoss.zul.Intbox; import org.zkoss.zul.Radio; import org.zkoss.zul.Textbox; +import org.zkoss.zul.Timebox; import com.rjconsultores.ventaboletos.entidad.Corrida; import com.rjconsultores.ventaboletos.entidad.Empresa; import com.rjconsultores.ventaboletos.entidad.GrupoRuta; import com.rjconsultores.ventaboletos.entidad.Ruta; import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioLinhasHorario; +import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioLinhasHorarioSimplificado; import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; import com.rjconsultores.ventaboletos.service.CorridaService; import com.rjconsultores.ventaboletos.service.EmpresaService; import com.rjconsultores.ventaboletos.service.GrupoRutaService; import com.rjconsultores.ventaboletos.service.RutaService; import com.rjconsultores.ventaboletos.utilerias.DateUtil; +import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado; import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer; import com.rjconsultores.ventaboletos.web.utilerias.MyListbox; import com.rjconsultores.ventaboletos.web.utilerias.render.RenderCorridaOrigemDestino; @@ -84,6 +88,9 @@ public class RelatorioLinhasHorarioController extends MyGenericForwardComposer { private Radio rdOrdinario; private Radio rdExtraOrdinario; private Radio rdTodos; + private Checkbox chkSimplificado; + private Timebox horaInicial; + private Timebox horaFinal; @SuppressWarnings({ "unchecked", "rawtypes" }) private void executarRelatorio() throws Exception { @@ -116,6 +123,11 @@ public class RelatorioLinhasHorarioController extends MyGenericForwardComposer { parametros.put("DATA_INICIO", dataInicio); parametros.put("DATA_FINAL", dataFinal); + + parametros.put("ISSIMPLIFICADO", chkSimplificado.isChecked()); + parametros.put("USUARIO_ID", UsuarioLogado.getUsuarioLogado().getUsuarioId().toString()); + parametros.put("NOME_USUARIO", UsuarioLogado.getUsuarioLogado().getNombusuario().toString()); + if(cmbEmpresa.getSelectedItem() != null && cmbEmpresa.getSelectedItem().getValue() != null) { Empresa empresa = (Empresa) cmbEmpresa.getSelectedItem().getValue(); @@ -145,8 +157,19 @@ public class RelatorioLinhasHorarioController extends MyGenericForwardComposer { parametros.put("lsNumLinha", lsNumLinha); parametros.put("lsNumServico", lsNumServico); - - Relatorio relatorio = new RelatorioLinhasHorario(parametros, dataSourceRead.getConnection()); + Relatorio relatorio = null; + if(!chkSimplificado.isChecked()) { + relatorio = new RelatorioLinhasHorario(parametros, dataSourceRead.getConnection()); + }else { + if(horaInicial.getValue() != null){ + parametros.put("HORA_INICIAL", horaInicial.getValue()); + } + if(horaFinal.getValue()!= null){ + parametros.put("HORA_FINAL", horaFinal.getValue()); + } + relatorio = new RelatorioLinhasHorarioSimplificado(parametros, dataSourceRead.getConnection()); + + } Map args = new HashMap(); args.put("relatorio", relatorio); diff --git a/web/WEB-INF/i3-label_pt_BR.label b/web/WEB-INF/i3-label_pt_BR.label index 6f6d153c8..e6dd80224 100644 --- a/web/WEB-INF/i3-label_pt_BR.label +++ b/web/WEB-INF/i3-label_pt_BR.label @@ -643,6 +643,9 @@ relatorioLinhasHorarioController.rdTipoServico.label = Tipos de Serviços relatorioLinhasHorarioController.rdOrdinario.label = Ordinários relatorioLinhasHorarioController.rdExtraOrdinario.label = Extraordinários relatorioLinhasHorarioController.rdTodos.label = Todos +relatorioLinhasHorarioController.lblSimplificado.value = Emite relatório Simplificado +relatorioLinhasHorarioController.lbHoraSaidaInicial.value = Hora Saída +relatorioLinhasHorarioController.lbHoraSaidaFinal.value = à #Relatorio Trecho Vendido relatorioTrechoVendidoController.lbDataIni.value = Data Inicial @@ -918,7 +921,7 @@ relatorioDemandasController.lbFiltrarGratuidadeCrianca.value = Excluir Gratuidad relatorioDemandasController.lbTipoRelatorioDetalhado.value = Detalhado relatorioDemandasController.lbTipoRelatorioDiario.value = Diário relatorioDemandasController.lbTipoRelatorioConsolidado.value = Consolidado -relatorioDemandasController.ConstanteGratuidadeError = A constante 'GRATUIDADE CRIANÇA' não esta definida no banco de dados +relatorioDemandasController.ConstanteGratuidadeError = A constante 'GRATUIDADE CRIANÇA' não esta definida no banco de dadosf #Relatorio de Cancelamento de Passagem por Cartão relatorioCancelamentoVendaCartaoController.window.title = Relatório de Cancelamento de Venda por Cartão diff --git a/web/gui/relatorios/filtroRelatorioLinhasHorario.zul b/web/gui/relatorios/filtroRelatorioLinhasHorario.zul index b3024164b..ebe830c87 100644 --- a/web/gui/relatorios/filtroRelatorioLinhasHorario.zul +++ b/web/gui/relatorios/filtroRelatorioLinhasHorario.zul @@ -7,15 +7,15 @@ - - - - + + + + @@ -32,6 +32,20 @@ format="dd/MM/yyyy" constraint="no empty" maxlength="10" /> + + @@ -82,7 +96,6 @@ - @@ -220,6 +233,13 @@ + + + + + +