From 2f714cc36f8f91f3b618ff0f12b662880e652d05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aristides=20dos=20Reis=20J=C3=BAnior?= Date: Wed, 15 May 2024 11:44:15 -0300 Subject: [PATCH] fixes bug#AL-4727 --- pom.xml | 2 +- .../impl/RelatorioOCDReembolsoPix.java | 213 +++++++ .../impl/RelatorioOCDReembolsoPixBean.java | 203 ++++++ .../RelatorioOCDReembolsoPix_es.properties | 49 ++ .../RelatorioOCDReembolsoPix_pt_BR.properties | 52 ++ .../templates/RelatorioOCDReembolsoPix.jasper | Bin 0 -> 59001 bytes .../templates/RelatorioOCDReembolsoPix.jrxml | 596 ++++++++++++++++++ .../relatorios/RelatorioOCDController.java | 22 +- web/WEB-INF/i3-label_en.label | 3 +- web/WEB-INF/i3-label_es_MX.label | 1 + web/WEB-INF/i3-label_fr_FR.label | 3 +- web/WEB-INF/i3-label_pt_BR.label | 1 + web/gui/relatorios/filtroRelatorioOCD.zul | 10 +- 13 files changed, 1149 insertions(+), 6 deletions(-) create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioOCDReembolsoPix.java create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioOCDReembolsoPixBean.java create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioOCDReembolsoPix_es.properties create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioOCDReembolsoPix_pt_BR.properties create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioOCDReembolsoPix.jasper create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioOCDReembolsoPix.jrxml diff --git a/pom.xml b/pom.xml index 1d535bda4..1bd9f9408 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 br.com.rjconsultores ventaboletosadm - 1.73.0 + 1.74.0 war diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioOCDReembolsoPix.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioOCDReembolsoPix.java new file mode 100644 index 000000000..f50115b6c --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioOCDReembolsoPix.java @@ -0,0 +1,213 @@ +package com.rjconsultores.ventaboletos.relatorios.impl; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.apache.commons.lang.StringUtils; + +import com.rjconsultores.ventaboletos.entidad.PuntoVenta; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.DataSource; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.IndOrdenacion; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.RelatorioOCDBean; +import com.rjconsultores.ventaboletos.utilerias.OcdUtil; +import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement; + +import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; + +public class RelatorioOCDReembolsoPix extends Relatorio { + + private List lsDadosRelatorio; + + public RelatorioOCDReembolsoPix(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 fecInicio = parametros.get("fecInicio") != null ? parametros.get("fecInicio").toString() + " 00:00" : null; + String fecFinal = parametros.get("fecFinal") != null ? parametros.get("fecFinal").toString() + " 23:59" : null; + String fecPagoInicio = parametros.get("fecPagoInicio") != null ? parametros.get("fecPagoInicio").toString() + " 00:00" : null; + String fecPagoFinal = parametros.get("fecPagoFinal") != null ? parametros.get("fecPagoFinal").toString() + " 23:59" : null; + List lsPuntoVenta = parametros.get("puntoventas") == null ? new ArrayList() : (ArrayList) parametros.get("puntoventas"); + + String puntoVentas = null; + for (PuntoVenta pv : lsPuntoVenta) { + if (lsPuntoVenta.indexOf(pv) == 0) { + puntoVentas = "" + pv.getPuntoventaId(); + } else { + puntoVentas += ", " + pv.getPuntoventaId(); + } + } + + String localizador = parametros.get("numOperacao").toString(); + String numoperacion = null; + Long ocdId = null; + if(OcdUtil.validarLocalizadorOcd(localizador)) { + numoperacion = OcdUtil.getNumOcdByLocalizadorOcd(localizador); + ocdId = OcdUtil.getOcdIdByLocalizadorOcd(localizador); + } + + Integer empresaId = parametros.get("empresa") != null ? Integer.parseInt(parametros.get("empresa").toString()) : null; + + IndOrdenacion ordenacion = (IndOrdenacion) parametros.get("ordenacion"); + + String sql = getSql(fecInicio, fecFinal, empresaId, ordenacion, numoperacion, ocdId, fecPagoInicio, fecPagoFinal, puntoVentas); + + NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql); + ResultSet rset = null; + + if(StringUtils.isNotBlank(fecInicio)) { + stmt.setString("fecInicio", fecInicio); + } + + if(StringUtils.isNotBlank(fecFinal)) { + stmt.setString("fecFinal", fecFinal); + } + + if(StringUtils.isNotBlank(fecPagoInicio)) { + stmt.setString("fecPagoInicio", fecPagoInicio); + } + + if(StringUtils.isNotBlank(fecPagoFinal)) { + stmt.setString("fecPagoFinal", fecPagoFinal); + } + + if (empresaId != null) { + stmt.setInt("empresaId", empresaId); + } + + if(ocdId != null){ + stmt.setLong("ocdId", ocdId); + } + + rset = stmt.executeQuery(); + + lsDadosRelatorio = new ArrayList(); + + while (rset.next()) { +// RelatorioOCDBean ocdBean = new RelatorioOCDBean(); + RelatorioOCDReembolsoPixBean ocdBean = new RelatorioOCDReembolsoPixBean(); + + ocdBean.setFecinc(rset.getDate("FECINC")); + ocdBean.setFechorventa(rset.getDate("FECHORVENTA")); + ocdBean.setEmpresa(rset.getString("NOMBEMPRESA")); + ocdBean.setNombpuntoventa(rset.getString("PV_VENDA") != null ? rset.getString("PV_VENDA") : ""); + ocdBean.setNombpuntoventainc(rset.getString("PV_OCD") != null ? rset.getString("PV_OCD") : ""); + ocdBean.setNombusuarioinc(rset.getString("USUARIOINC") != null ? rset.getString("USUARIOINC") : ""); + ocdBean.setNumoperacion(rset.getString("NUMOPERACION")); + ocdBean.setPenalizacion(rset.getBigDecimal("PENALIZACION")); + ocdBean.setValorOcd(rset.getBigDecimal("VALOR_OCD")); + ocdBean.setAsiento(rset.getString("NUMASIENTO")); + ocdBean.setOrigem(rset.getString("ORIGEM")); + ocdBean.setDestino(rset.getString("DESTINO")); + ocdBean.setNumfoliosistema(rset.getString("NUMFOLIOSISTEMA")); + ocdBean.setFeccorrida(rset.getDate("FECCORRIDA")); + ocdBean.setOcdId(rset.getLong("OCD_ID")); + ocdBean.setMotivocancelacionId(rset.getInt("MOTIVOCANCELACION_ID")); + ocdBean.setTotalBilhete(rset.getBigDecimal("TOTAL_BILHETE")); + ocdBean.setNumoperacion(OcdUtil.generaLocalizadorOCD(ocdBean.getNumoperacion(), ocdBean.getOcdId())); + ocdBean.setNomePix(rset.getString("NOME_PIX")); + ocdBean.setCpfCnpjPix(rset.getString("CPF_CNPJ_PIX")); + ocdBean.setTelefonePix(rset.getString("TELEFONE_PIX")); + ocdBean.setTipoChavePix(rset.getString("TIPO_CHAVE_PIX")); + ocdBean.setChavePix(rset.getString("CHAVE_PIX")); + lsDadosRelatorio.add(ocdBean); + } + + if (lsDadosRelatorio.size() > 0) { + + setLsDadosRelatorio(lsDadosRelatorio); + } + } + }); + } + + public void setLsDadosRelatorio(List lsDadosRelatorio) { + this.setCollectionDataSource(new JRBeanCollectionDataSource(lsDadosRelatorio)); + this.lsDadosRelatorio = lsDadosRelatorio; + } + + @Override + protected void processaParametros() throws Exception { + } + + private String getSql(String fecInicio, String fecFinal, Integer empresaId, IndOrdenacion ordenacion, String numoperacion, Long ocdId, + String fecPagoInicio, String fecPagoFinal, String puntoVentas) { + StringBuffer sql = new StringBuffer(); + + sql.append("SELECT O.OCD_ID, O.NUMOPERACION, E.NOMBEMPRESA, B.NUMFOLIOSISTEMA, "); + sql.append("O.FECINC, PVO.NOMBPUNTOVENTA AS PV_OCD, O.PENALIZACION, O.VALOR_ESTORNO_PIX AS VALOR_OCD, "); + sql.append("PVV.NOMBPUNTOVENTA AS PV_VENDA, B.FECHORVENTA, B.FECCORRIDA, ORI.DESCPARADA AS ORIGEM, DES.DESCPARADA AS DESTINO, B.NUMASIENTO, "); + sql.append("B.MOTIVOCANCELACION_ID, "); + sql.append("UI.CVEUSUARIO AS USUARIOINC, "); + sql.append("NVL(B.PRECIOPAGADO,0) + NVL(B.IMPORTETAXAEMBARQUE,0) + NVL(B.IMPORTEOUTROS,0) + NVL(B.IMPORTEPEDAGIO,0) + NVL(B.IMPORTESEGURO,0) AS TOTAL_BILHETE, "); + sql.append("ECP.NOME AS NOME_PIX, ECP.CPF_CNPJ AS CPF_CNPJ_PIX, ECP.TELEFONE AS TELEFONE_PIX, ECP.TIPO_CHAVE_PIX AS TIPO_CHAVE_PIX, ECP.CHAVE_PIX AS CHAVE_PIX " ); + sql.append("FROM OCD O "); + sql.append("JOIN ESTORNO_OCD_PIX ECP ON ECP.OCD_ID=O.OCD_ID "); + sql.append("JOIN BOLETO B ON B.BOLETO_ID = O.BOLETO_ID "); + sql.append("JOIN MARCA M ON B.MARCA_ID = M.MARCA_ID "); + sql.append("JOIN EMPRESA E ON E.EMPRESA_ID = M.EMPRESA_ID "); + sql.append("JOIN PUNTO_VENTA PVO ON PVO.PUNTOVENTA_ID = O.PUNTOVENTA_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 PUNTO_VENTA PVV ON PVV.PUNTOVENTA_ID = B.PUNTOVENTA_ID "); + sql.append("LEFT JOIN USUARIO UI ON UI.USUARIO_ID = O.USUARIO_ID "); + sql.append("WHERE O.ACTIVO = 1 "); + + sql.append(puntoVentas == null ? "" : "AND PVO.PUNTOVENTA_ID IN (" + puntoVentas + ") "); + + if(StringUtils.isNotBlank(fecInicio)) { + sql.append("AND O.FECINC >= TO_DATE(:fecInicio,'DD/MM/YYYY HH24:MI') "); + } + + if(StringUtils.isNotBlank(fecFinal)) { + sql.append("AND O.FECINC <= TO_DATE(:fecFinal,'DD/MM/YYYY HH24:MI') "); + } + + if(StringUtils.isNotBlank(fecPagoInicio)) { + sql.append("AND O.FECPAGO >= TO_DATE(:fecPagoInicio,'DD/MM/YYYY HH24:MI') "); + } + + if(StringUtils.isNotBlank(fecPagoFinal)) { + sql.append("AND O.FECPAGO <= TO_DATE(:fecPagoFinal,'DD/MM/YYYY HH24:MI') "); + } + + if (empresaId != null) { + sql.append(" and M.EMPRESA_ID = :empresaId "); + } + + if(StringUtils.isNotBlank(numoperacion)){ + sql.append(" and O.NUMOPERACION like '%"+numoperacion+"%' "); + } + + if(ocdId != null){ + sql.append(" and O.OCD_ID = :ocdId "); + } + sql.append(" ORDER BY "); + switch (ordenacion) { + case NUM_OPERACION: + sql.append(" O.NUMOPERACION "); + break; + case FECHA_CREACION: + sql.append(" O.FECINC "); + break; + case FECHA_PAGAMENTO: + sql.append(" O.FECPAGO "); + break; + default: + sql.append(" B.NUMFOLIOSISTEMA "); + break; + } + + return sql.toString(); + } +} \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioOCDReembolsoPixBean.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioOCDReembolsoPixBean.java new file mode 100644 index 000000000..60a14b228 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioOCDReembolsoPixBean.java @@ -0,0 +1,203 @@ +package com.rjconsultores.ventaboletos.relatorios.impl; + +import java.math.BigDecimal; +import java.util.Date; + +import com.rjconsultores.ventaboletos.constantes.Constantes; + +public class RelatorioOCDReembolsoPixBean { + private Long ocdId; + + private Long boletoId; + + private String numoperacion; + private String numfoliosistema; + + private Date fechorventa; + + private BigDecimal valorOcd; + private BigDecimal penalizacion; + private Date fecinc; + private String empresa; + private String nombusuario; + private String nombusuarioinc; + private String nombpuntoventa; + private String nombpuntoventainc; + private String origem; + private String destino; + private String asiento; + private Date feccorrida; + private BigDecimal totalBilhete; + private Integer motivocancelacionId; + private String nomePix; + private String cpfCnpjPix; + private String telefonePix; + private String tipoChavePix; + private String chavePix; + public Long getOcdId() { + return ocdId; + } + public void setOcdId(Long ocdId) { + this.ocdId = ocdId; + } + public Long getBoletoId() { + return boletoId; + } + public void setBoletoId(Long boletoId) { + this.boletoId = boletoId; + } + public String getNumoperacion() { + return numoperacion; + } + public void setNumoperacion(String numoperacion) { + this.numoperacion = numoperacion; + } + public String getNumfoliosistema() { + return numfoliosistema; + } + public void setNumfoliosistema(String numfoliosistema) { + this.numfoliosistema = numfoliosistema; + } + public Date getFechorventa() { + return fechorventa; + } + public void setFechorventa(Date fechorventa) { + this.fechorventa = fechorventa; + } + public BigDecimal getValorOcd() { + return valorOcd; + } + public void setValorOcd(BigDecimal valorOcd) { + this.valorOcd = valorOcd; + } + public BigDecimal getPenalizacion() { + return penalizacion; + } + public void setPenalizacion(BigDecimal penalizacion) { + this.penalizacion = penalizacion; + } + public Date getFecinc() { + return fecinc; + } + public void setFecinc(Date fecinc) { + this.fecinc = fecinc; + } + public String getEmpresa() { + return empresa; + } + public void setEmpresa(String empresa) { + this.empresa = empresa; + } + public String getNombusuario() { + return nombusuario; + } + public void setNombusuario(String nombusuario) { + this.nombusuario = nombusuario; + } + public String getNombusuarioinc() { + return nombusuarioinc; + } + public void setNombusuarioinc(String nombusuarioinc) { + this.nombusuarioinc = nombusuarioinc; + } + public String getNombpuntoventa() { + return nombpuntoventa; + } + public void setNombpuntoventa(String nombpuntoventa) { + this.nombpuntoventa = nombpuntoventa; + } + public String getNombpuntoventainc() { + return nombpuntoventainc; + } + public void setNombpuntoventainc(String nombpuntoventainc) { + this.nombpuntoventainc = nombpuntoventainc; + } + public String getOrigem() { + return origem; + } + public void setOrigem(String origem) { + this.origem = origem; + } + public String getDestino() { + return destino; + } + public void setDestino(String destino) { + this.destino = destino; + } + public String getAsiento() { + return asiento; + } + public void setAsiento(String asiento) { + this.asiento = asiento; + } + public Date getFeccorrida() { + return feccorrida; + } + public void setFeccorrida(Date feccorrida) { + this.feccorrida = feccorrida; + } + public BigDecimal getTotalBilhete() { + return totalBilhete; + } + public void setTotalBilhete(BigDecimal totalBilhete) { + this.totalBilhete = totalBilhete; + } + public Integer getMotivocancelacionId() { + return motivocancelacionId; + } + public void setMotivocancelacionId(Integer motivocancelacionId) { + this.motivocancelacionId = motivocancelacionId; + } + public String getNomePix() { + return nomePix; + } + public void setNomePix(String nomePix) { + this.nomePix = nomePix; + } + public String getCpfCnpjPix() { + return cpfCnpjPix; + } + public void setCpfCnpjPix(String cpfCnpjPix) { + this.cpfCnpjPix = cpfCnpjPix; + } + + public String getTelefonePix() { + return telefonePix; + } + public void setTelefonePix(String telefonePix) { + this.telefonePix = telefonePix; + } + public String getTipoChavePix() { + return tipoChavePix; + } + public void setTipoChavePix(String tipoChavePix) { + this.tipoChavePix = tipoChavePix; + } + public String getChavePix() { + return chavePix; + } + public void setChavePix(String chavePix) { + this.chavePix = chavePix; + } + + public String getMotivo() { + if(motivocancelacionId != null && Constantes.MVO_CANCEL_GERACAO_OCD.intValue() == motivocancelacionId.intValue()) { + return "Geração OCD"; + } else if(motivocancelacionId != null && Constantes.MVO_CANCEL_TRANSFERENCIA.intValue() == motivocancelacionId.intValue()) { + return "Transferência"; + } else if(motivocancelacionId != null && Constantes.MVO_CANCEL_TROCA.intValue() == motivocancelacionId.intValue()) { + return "Troca"; + } + return null; + } + + public BigDecimal getMulta() { + if(motivocancelacionId != null && Constantes.MVO_CANCEL_GERACAO_OCD.intValue() == motivocancelacionId.intValue()) { + return getTotalBilhete().subtract(getValorOcd()); + } + return BigDecimal.ZERO; + } + + + +} diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioOCDReembolsoPix_es.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioOCDReembolsoPix_es.properties new file mode 100644 index 000000000..ad7492268 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioOCDReembolsoPix_es.properties @@ -0,0 +1,49 @@ +#geral +msg.noData=No se pudo obtener datos con los parámetros reportados. +msg.a=à + +#Labels header +label.periodo=Período +label.ate=até +label.de=de +label.filtros=Fitros: +label.dataHora=Emitido em: +label.impressorPor=Emitido Por: +label.pagina=Página: +detail.periodoFecpago=Data Pagamento: +detail.periodoFecinc=Data OCD: + +#Labels detail + +detail.numfoliosistema=Boleto +detail.numoperacion=Num. Operacion +detail.fecvenda=Fecha Venta +detail.valorOcd=Valor OCD +detail.penalizacion=Penalizacion +detail.multa=Multa +detail.motivo=Motivo +detail.nombusuarioinc=Usuário Inc. + +detail.fecinc=Fecha OCD +detail.nombempresa=Empresa +detail.nombusuario=Usuário +detail.nombpuntoventainc=Punto Venta Emissão +detail.nombpuntoventa=Punto Venta + +detail.origem=Origem +detail.destino=Destino +detail.feccorrida=Data Viagem +detail.Asiento=Asientos +detail.dadosOcd=Dados OCD +detail.dadosVenda=Dados da Venda/Passagem +detail.totalBilhete=Valor Total +detail.total=Total + +detail.dadosPix=Dados do Pix para Reembolso +detail.nomePix=Nome +detail.cpfCnpjPix= Cpf/Cnpj +detail.telefonePix=Telefone +detail.tipoChavePix=Tipo da Chave +detail.chavePix=Chave + +linhas=Líneas \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioOCDReembolsoPix_pt_BR.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioOCDReembolsoPix_pt_BR.properties new file mode 100644 index 000000000..e48601c3d --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioOCDReembolsoPix_pt_BR.properties @@ -0,0 +1,52 @@ +#geral +msg.noData=Não foi possivel obter dados com os parâmetros informados. +msg.a=à + +#Labels header +label.periodo=Período +label.ate=até +label.de=de +label.filtros=Fitros: +label.dataHora=Emitido em: +label.impressorPor=Emitido Por: +label.pagina=Página: +detail.periodoFecpago=Data Pagamento: +detail.periodoFecinc=Data OCD: + +#Labels detail + +detail.numfoliosistema=Nº Bilhete +detail.numoperacion=Localizador +detail.fecpago=Data Pagamento +detail.fecvenda=Data Venda +detail.valorOcd=Valor OCD +detail.penalizacion=Penalização +detail.multa=Multa +detail.motivo=Motivo +detail.nombusuarioinc=Usuário Geração + +detail.fecinc=Data OCD +detail.nombempresa=Empresa +detail.nombusuario=Usuário +detail.nombpuntoventainc=Agência Emissão +detail.nombpuntoventa=Agência Venda + + +detail.origem=Origem +detail.destino=Destino +detail.feccorrida=Data Viagem +detail.asiento=Assento +detail.dadosOcd=Dados OCD +detail.dadosVenda=Dados da Venda/Passagem +detail.totalBilhete=Valor Total +detail.total=Total + + +detail.dadosPix=Dados do Pix para Reembolso +detail.nomePix=Nome +detail.cpfCnpjPix= Cpf/Cnpj +detail.telefonePix=Telefone +detail.tipoChavePix=Tipo da Chave +detail.chavePix=Chave + +linhas=Linhas \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioOCDReembolsoPix.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioOCDReembolsoPix.jasper new file mode 100644 index 0000000000000000000000000000000000000000..d00050ce6be6ec04afd639073315b3cd4dc6683a GIT binary patch literal 59001 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 literal 0 HcmV?d00001 diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioOCDReembolsoPix.jrxml b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioOCDReembolsoPix.jrxml new file mode 100644 index 000000000..422c94c3b --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioOCDReembolsoPix.jrxml @@ -0,0 +1,596 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioOCDController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioOCDController.java index a04a17dc7..87ce45ebe 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioOCDController.java +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioOCDController.java @@ -16,16 +16,19 @@ 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.Comboitem; import org.zkoss.zul.Datebox; import org.zkoss.zul.Paging; import org.zkoss.zul.Radio; +import org.zkoss.zul.Row; import org.zkoss.zul.Textbox; import com.rjconsultores.ventaboletos.entidad.Empresa; import com.rjconsultores.ventaboletos.entidad.PuntoVenta; import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioOCDNaoResgatadaEmpresa; +import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioOCDReembolsoPix; import com.rjconsultores.ventaboletos.relatorios.utilitarios.IndOrdenacion; import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado; @@ -67,6 +70,9 @@ public class RelatorioOCDController extends MyGenericForwardComposer { private MyTextbox txtNumOperacao; private IndOrdenacion ordenacion; + + private Checkbox chOcdReembolsoPix; + private Row rowStatusOCD; private void executarRelatorio() throws Exception { @@ -130,9 +136,13 @@ public class RelatorioOCDController extends MyGenericForwardComposer { parametros.put("usuario", UsuarioLogado.getUsuarioLogado().getClaveUsuario()); parametros.put("filtros", filtro.toString()); - - Relatorio relatorio = new RelatorioOCDNaoResgatadaEmpresa(parametros, dataSourceRead.getConnection()); + Relatorio relatorio =null; + if(chOcdReembolsoPix.isChecked()) { + relatorio = new RelatorioOCDReembolsoPix(parametros, dataSourceRead.getConnection()); + }else { + relatorio = new RelatorioOCDNaoResgatadaEmpresa(parametros, dataSourceRead.getConnection()); + } Map args = new HashMap(); args.put("relatorio", relatorio); @@ -169,6 +179,14 @@ public class RelatorioOCDController extends MyGenericForwardComposer { executarRelatorio(); } + public void onClick$chOcdReembolsoPix(Event ev) throws Exception { + if(chOcdReembolsoPix.isChecked()) { + rowStatusOCD.setVisible(false); + }else { + rowStatusOCD.setVisible(true); + } + } + private boolean validarDatas(Date dataInicial, Date dataFinal) { boolean isDataInicial = dataInicial != null; diff --git a/web/WEB-INF/i3-label_en.label b/web/WEB-INF/i3-label_en.label index d08ba9654..7fd79af13 100644 --- a/web/WEB-INF/i3-label_en.label +++ b/web/WEB-INF/i3-label_en.label @@ -9837,4 +9837,5 @@ winMovimentacionBilhetesPuntoVenta.tipoMovimentacion.label = Natureza editarEmpresaController.imprimirCupomEmbarqueSimplificado=Deseja Imprimir o cupom de embarque simplificado editarEmpresaController.imprimirCupomEmbarqueSimplificado.ajuda=A marcar esse campo, o cumpom de embarque impresso, será o cumpom simplificado editarPuntoVentaController.lbMotivoBloqueio.value=Motivo do Bloqueio -editarPuntoVentaController.lbMotivo.value=Motivo \ No newline at end of file +editarPuntoVentaController.lbMotivo.value=Motivo +relatorioOCDController.chOcdReembolsoPix.value=Exibir OCD com reembolso PIX \ No newline at end of file diff --git a/web/WEB-INF/i3-label_es_MX.label b/web/WEB-INF/i3-label_es_MX.label index dd9586af9..fb4cd0b3d 100644 --- a/web/WEB-INF/i3-label_es_MX.label +++ b/web/WEB-INF/i3-label_es_MX.label @@ -9979,3 +9979,4 @@ editarEmpresaController.imprimirCupomEmbarqueSimplificado=Deseja Imprimir o cupo editarEmpresaController.imprimirCupomEmbarqueSimplificado.ajuda=A marcar esse campo, o cumpom de embarque impresso, será o cumpom simplificado editarPuntoVentaController.lbMotivo.value=Motivo editarPuntoVentaController.lbMotivoBloqueio.value=Motivo do Bloqueio +relatorioOCDController.chOcdReembolsoPix.value=Exibir OCD com reembolso PIX diff --git a/web/WEB-INF/i3-label_fr_FR.label b/web/WEB-INF/i3-label_fr_FR.label index ecb93da9c..dae2dc625 100644 --- a/web/WEB-INF/i3-label_fr_FR.label +++ b/web/WEB-INF/i3-label_fr_FR.label @@ -9950,4 +9950,5 @@ winMovimentacionBilhetesPuntoVenta.tipoMovimentacion.label = Nature editarEmpresaController.imprimirCupomEmbarqueSimplificado=Deseja Imprimir o cupom de embarque simplificado editarEmpresaController.imprimirCupomEmbarqueSimplificado.ajuda=A marcar esse campo, o cumpom de embarque impresso, será o cumpom simplificado editarPuntoVentaController.lbMotivo.value=Motivo -editarPuntoVentaController.lbMotivoBloqueio.value=Motivo do Bloqueio \ No newline at end of file +editarPuntoVentaController.lbMotivoBloqueio.value=Motivo do Bloqueio +relatorioOCDController.chOcdReembolsoPix.value=Exibir OCD com reembolso PIX \ No newline at end of file diff --git a/web/WEB-INF/i3-label_pt_BR.label b/web/WEB-INF/i3-label_pt_BR.label index 29abb6672..b9027e685 100644 --- a/web/WEB-INF/i3-label_pt_BR.label +++ b/web/WEB-INF/i3-label_pt_BR.label @@ -10845,4 +10845,5 @@ abastoService.msg.semOrigem=Abasto Origem, não encontrado detAbastoService.msg.semOrigem=DetAbasto Origem, não encontrado editarPuntoVentaController.lbMotivo.value=Motivo editarPuntoVentaController.lbMotivoBloqueio.value=Motivo do Bloqueio +relatorioOCDController.chOcdReembolsoPix.value=Exibir OCD com reembolso PIX diff --git a/web/gui/relatorios/filtroRelatorioOCD.zul b/web/gui/relatorios/filtroRelatorioOCD.zul index cab71a6bf..4d39c03c4 100644 --- a/web/gui/relatorios/filtroRelatorioOCD.zul +++ b/web/gui/relatorios/filtroRelatorioOCD.zul @@ -111,7 +111,13 @@ - + + + + +