From ab0759edab1bb2d6993a8bf6a4f58c8950cfa79c Mon Sep 17 00:00:00 2001 From: Leonardo Oliveira Date: Wed, 14 Aug 2024 14:33:44 -0300 Subject: [PATCH 01/25] =?UTF-8?q?Bolivariano=20-=20Institucionales=20ADM:?= =?UTF-8?q?=20Relat=C3=B3rio=20Saldo=20Contrato=20fixes=20bug#AL-4341?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/RelatorioDetalheContrato.java | 47 +-- .../impl/RelatorioSaldosDeContratos.java | 149 ++++++++ ...elatorioSaldosDeContratos_pt_BR.properties | 16 + .../templates/RelatorioDetalheContrato.jasper | Bin 41940 -> 44426 bytes .../templates/RelatorioDetalheContrato.jrxml | 44 ++- .../RelatorioSaldosDeContratos.jasper | Bin 0 -> 31431 bytes .../RelatorioSaldosDeContratos.jrxml | 326 ++++++++++++++++++ .../RelatorioDetalheContratoBean.java | 26 +- .../RelatorioSaldosContratosBean.java | 65 ++++ .../RelatorioDetalheContratoController.java | 12 + .../RelatorioSaldosContratosController.java | 111 ++++++ .../ItemMenuRelatorioSaldosContratos.java | 25 ++ .../utilerias/menu/menu_original.properties | 1 + web/WEB-INF/i3-label_en.label | 10 + web/WEB-INF/i3-label_es_MX.label | 10 + web/WEB-INF/i3-label_fr_FR.label | 10 + web/WEB-INF/i3-label_pt_BR.label | 10 + .../filtroRelatorioSaldosContratos.zul | 73 ++++ 18 files changed, 907 insertions(+), 28 deletions(-) create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioSaldosDeContratos.java create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioSaldosDeContratos_pt_BR.properties create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioSaldosDeContratos.jasper create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioSaldosDeContratos.jrxml create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioSaldosContratosBean.java create mode 100644 src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioSaldosContratosController.java create mode 100644 src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/negcorporativos/ItemMenuRelatorioSaldosContratos.java create mode 100644 web/gui/relatorios/filtroRelatorioSaldosContratos.zul diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDetalheContrato.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDetalheContrato.java index 631fdf63f..1aa7c8d8f 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDetalheContrato.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDetalheContrato.java @@ -59,21 +59,24 @@ public class RelatorioDetalheContrato extends Relatorio { while (rset.next()) { RelatorioDetalheContratoBean detalhe = new RelatorioDetalheContratoBean(); - detalhe.setBoleto(rset.getObject("contratoId").toString()); + detalhe.setTiquete(rset.getString("contratoId")); detalhe.setDataVenda((Date)rset.getObject("dataVenda")); - detalhe.setDestino(rset.getObject("destino").toString()); - detalhe.setOrigem(rset.getObject("origem").toString()); - detalhe.setEmpresa(rset.getObject("empresa").toString()); - detalhe.setEstado(rset.getObject("estado").toString()); - detalhe.setFatura(rset.getObject("fatura").toString()); - detalhe.setNomePassageiro(rset.getObject("cliente").toString()); - detalhe.setNomeUsuario(rset.getObject("usuario").toString()); + detalhe.setDestino(rset.getString("destino")); + detalhe.setOrigem(rset.getString("origem")); + detalhe.setEmpresa(rset.getString("empresa")); + detalhe.setEstado(rset.getString("estado")); + detalhe.setFatura(rset.getString("fatura")); + detalhe.setNomePassageiro(rset.getString("cliente")); + detalhe.setNomeUsuario(rset.getString("usuario")); detalhe.setPassageiroCod((Long)rset.getObject("clicod")); - detalhe.setPassagem(rset.getObject("passagem").toString()); + detalhe.setPassagem(rset.getString("passagem")); detalhe.setPrecioPagado((BigDecimal)rset.getBigDecimal("valorUnit")); detalhe.setPreco((BigDecimal)rset.getBigDecimal("valorTiquete")); - detalhe.setTipoDoc(rset.getObject("tipoDoc").toString()); - if (detalhe.getTipoDoc().equals("Evento Extra")) { + detalhe.setTipoDoc(rset.getString("tipoDoc")); + detalhe.setClienteId(rset.getLong("clientecorporativo_id")); + detalhe.setNomCliente(rset.getString("nomclientecorp")); + + if (detalhe.getTipoDoc() != null && detalhe.getTipoDoc().equals("Evento Extra")) { valorAdicionado.add(detalhe.getPrecioPagado()); } @@ -116,29 +119,33 @@ public class RelatorioDetalheContrato extends Relatorio { sb.append(" porigen.descparada as origem, "); sb.append(" pdestino.descparada as destino, "); sb.append(" 1 as passagem, "); - sb.append(" c.preciopagado as valorUnit, "); - sb.append(" c.preciobase as valorTiquete, "); + sb.append(" coalesce(c.preciopagado, 0) as valorUnit, "); + sb.append(" coalesce(c.preciobase, 0) as valorTiquete, "); sb.append(" t.nome_transportadora as empresa, "); sb.append(" c.cliente_id as clicod, "); sb.append(" cli.nombcliente cliente, "); - sb.append(" u.nombusuario as usuario "); + sb.append(" u.nombusuario as usuario, "); + sb.append(" clicorp.clientecorporativo_id, "); + sb.append(" clicorp.nomclientecorp "); sb.append("from caixa_contrato cc "); + sb.append("join contrato_corporativo corp on corp.contrato_id = cc.contrato_id "); + sb.append("join cliente_corporativo clicorp on clicorp.clientecorporativo_id = corp.clientecorporativo_id "); sb.append("left join caja c on cc.caja_id = c.caja_id "); sb.append("left join voucher v on v.voucher_id = cc.voucher_id "); sb.append("left join transportadora t on t.transportadora_id = v.transportadora_id "); sb.append("left join evento_extra e on e.eventoextra_id = cc.eventoextra_id "); - sb.append("join cliente cli on cli.cliente_id = c.cliente_id "); - sb.append("join parada porigen on c.origen_id = porigen.parada_id "); - sb.append("join parada pdestino on c.destino_id = pdestino.parada_id "); - sb.append("join usuario u on u.usuario_id = c.usuario_id "); + sb.append("left join cliente cli on cli.cliente_id = c.cliente_id "); + sb.append("left join parada porigen on c.origen_id = porigen.parada_id "); + sb.append("left join parada pdestino on c.destino_id = pdestino.parada_id "); + sb.append("left join usuario u on u.usuario_id = c.usuario_id "); sb.append("where 1 = 1 "); if(dataInicial != null && dataFinal != null){ sb.append(" and c.fechorventa between :dataInicial and :dataFinal "); if (geracao == DataGeracaoLegalizacaoEnum.GERACAO) { - sb.append(" and v.dataGeracao between :dataInicial and :dataFinal "); + sb.append(" and v.data_inclusao between :dataInicial and :dataFinal "); } else { - sb.append(" and v.dataLegalizacao between :dataInicial and :dataFinal "); + sb.append(" and v.data_legaliza between :dataInicial and :dataFinal "); } } diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioSaldosDeContratos.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioSaldosDeContratos.java new file mode 100644 index 000000000..2b10a18bc --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioSaldosDeContratos.java @@ -0,0 +1,149 @@ +package com.rjconsultores.ventaboletos.relatorios.impl; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import com.rjconsultores.ventaboletos.enums.EstadoBilheteConsultarEnum; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.DataSource; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.RelatorioSaldosContratosBean; +import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement; + +import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; + +public class RelatorioSaldosDeContratos extends Relatorio { + + private List lsDadosRelatorio; + + public RelatorioSaldosDeContratos(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(); + + Date dataInicial = (Date) parametros.get("DATA_DE"); + Date dataFinal = (Date) parametros.get("DATA_ATE"); + Integer empresaId = (Integer) parametros.get("EMPRESA_ID"); + String numContrato = parametros.get("NUM_CONTRATO") != null ? parametros.get("NUM_CONTRATO").toString() : null; + Long grupoContratoId = (Long) parametros.get("GRUPOCONTRATO_ID"); + Integer status = (Integer) parametros.get("STATUS"); + + NamedParameterStatement nps = new NamedParameterStatement(conexao, getSql(dataInicial, + dataFinal, empresaId, numContrato, grupoContratoId, status)); + + if(dataInicial != null && dataFinal != null){ + nps.setDate("dataInicial", new java.sql.Date(dataInicial.getTime())); + nps.setDate("dataFinal", new java.sql.Date(dataFinal.getTime())); + } + + if (empresaId != null) { + nps.setLong("clienteId", empresaId); + } + + if (numContrato != null) { + nps.setString("numContrato", numContrato); + } + + if (grupoContratoId != null) { + nps.setLong("grupoContratoId", grupoContratoId); + } + + if (status != null) { + nps.setInt("status", status); + } + + ResultSet rset = nps.executeQuery(); + + List ls = new ArrayList(); + + while (rset.next()) { + + RelatorioSaldosContratosBean saldo = new RelatorioSaldosContratosBean(); + saldo.setAdicional(rset.getBigDecimal("adicao")); + saldo.setDataInicio(rset.getDate("data_inicial")); + saldo.setExecutado(rset.getBigDecimal("executado")); + saldo.setNit(rset.getString("numContrato")); + saldo.setNumContrato(rset.getString("numContrato")); + saldo.setRazaoSocial(rset.getString("nomclientecorp")); + saldo.setValorContrato(rset.getBigDecimal("valor_contrato")); + saldo.setSaldoAtual(saldo.getValorContrato().add(saldo.getAdicional()).subtract(saldo.getExecutado()).abs()); + + + ls.add(saldo); + } + + setLsDadosRelatorio(ls); + } + }); + } + + private String getSql(Date dataInicial, Date dataFinal, Integer empresaId, + String numContrato, Long grupoContratoId, Integer status) { + StringBuilder sb = new StringBuilder(); + sb.append("select "); + sb.append(" c.numcontrato, "); + sb.append(" cli.nomclientecorp, "); + sb.append(" c.numcontrato, "); + sb.append(" c.data_inicial, "); + sb.append(" coalesce(c.valor_contrato,0) as valor_contrato, "); + sb.append(" coalesce((select sum(cc2.valor) "); + sb.append(" from caixa_contrato cc2 "); + sb.append(" where cc2.contrato_id = c.contrato_id "); + sb.append(" and cc2.eventoextra_id is not null), 0) as adicao, "); + sb.append(" sum(cc.valor) as executado "); + sb.append("from contrato_corporativo c "); + sb.append("join caixa_contrato cc on cc.contrato_id = c.contrato_id "); + sb.append("join cliente_corporativo cli on cli.clientecorporativo_id = cli.clientecorporativo_id "); + sb.append("where 1 = 1 "); + + if(dataInicial != null && dataFinal != null){ + sb.append(" and cc.data_lancamento between :dataInicial and :dataFinal "); + } + + if (empresaId != null) { + sb.append(" and c.clientecorporativo_id = :clienteId "); + } + + if (numContrato != null) { + sb.append(" and c.numcontrato in (:numContrato) "); + } + + if (grupoContratoId != null) { + sb.append(" and c.grupocontrato_id = :grupoContratoId "); + } + + if (status != null) { + sb.append(" and c.status_contrato = :status "); + } + + sb.append("group by "); + sb.append(" c.contrato_id, "); + sb.append(" c.numcontrato, "); + sb.append(" cli.nomclientecorp, "); + sb.append(" c.numcontrato, "); + sb.append(" c.data_inicial, "); + sb.append(" c.valor_contrato "); + return sb.toString(); + } + + @Override + protected void processaParametros() throws Exception { + } + + public List getLsDadosRelatorio() { + return lsDadosRelatorio; + } + + public void setLsDadosRelatorio(List lsDadosRelatorio) { + this.setCollectionDataSource(new JRBeanCollectionDataSource(lsDadosRelatorio)); + this.lsDadosRelatorio = lsDadosRelatorio; + } +} diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioSaldosDeContratos_pt_BR.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioSaldosDeContratos_pt_BR.properties new file mode 100644 index 000000000..b4506fad2 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioSaldosDeContratos_pt_BR.properties @@ -0,0 +1,16 @@ +#geral +msg.noData=Não foi possivel obter dados com os parâmetros informados. + +header.titulo.relatorio=CRÉDITOS - SALDOS DE CONTRATOS + +#Labels header +label.nit=Nit +label.razaoSocial=Razão Social +label.contrato=Contrato +label.inicio=Início +label.valorContrato=Valor Contrato +label.adicional=Adicional +label.recaudo=Recaudo +label.saldoInicial=Saldo Inicial +label.executado=Executado +label.saldo=Saldo \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDetalheContrato.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDetalheContrato.jasper index a75f031a4aa3586f8b12e9dd77d340c33163833e..92c6eca2c4269b8de98a6a60d9d93fba28662ab5 100644 GIT binary patch literal 44426 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 delta 12840 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 J!u^Y${|8@HCNKa1 diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDetalheContrato.jrxml b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDetalheContrato.jrxml index 7797fdada..709f1ddbf 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDetalheContrato.jrxml +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDetalheContrato.jrxml @@ -16,7 +16,7 @@ - + @@ -31,6 +31,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -314,7 +352,7 @@ - + @@ -325,7 +363,7 @@ - + diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioSaldosDeContratos.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioSaldosDeContratos.jasper new file mode 100644 index 0000000000000000000000000000000000000000..1031ed7d8da704cd1302e8ac338fa6b7e1fb51d8 GIT binary patch literal 31431 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <band height="62" splitType="Stretch"> + <textField> + <reportElement uuid="96572021-01f9-4d05-938c-11ca5721f81c" x="0" y="20" width="149" height="20"/> + <textElement textAlignment="Left"/> + <textFieldExpression><![CDATA[new java.util.Date()]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="f6fe1c2b-09af-45e6-9883-f6aa7fe3016c" x="0" y="0" width="1015" height="20"/> + <textElement markup="none"> + <font size="14" isBold="true"/> + </textElement> + <textFieldExpression><![CDATA[$R{header.titulo.relatorio}]]></textFieldExpression> + </textField> + </band> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioDetalheContratoBean.java b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioDetalheContratoBean.java index 09ce958a2..b15e2b9f6 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioDetalheContratoBean.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioDetalheContratoBean.java @@ -5,7 +5,7 @@ import java.util.Date; public class RelatorioDetalheContratoBean { - private String boleto; + private String tiquete; private Date dataVenda; private String tipoDoc; private String fatura; @@ -20,11 +20,14 @@ public class RelatorioDetalheContratoBean { private String nomePassageiro; private Integer legalizado; private String nomeUsuario; - public String getBoleto() { - return boleto; + private Long clienteId; + private String nomCliente; + + public String getTiquete() { + return tiquete; } - public void setBoleto(String boleto) { - this.boleto = boleto; + public void setTiquete(String tiquete) { + this.tiquete = tiquete; } public Date getDataVenda() { return dataVenda; @@ -109,5 +112,18 @@ public class RelatorioDetalheContratoBean { } public void setNomeUsuario(String nomeUsuario) { this.nomeUsuario = nomeUsuario; + } + public Long getClienteId() { + return clienteId; + } + public void setClienteId(Long clienteId) { + this.clienteId = clienteId; + } + public String getNomCliente() { + return nomCliente; + } + public void setNomCliente(String nomCliente) { + this.nomCliente = nomCliente; } + } diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioSaldosContratosBean.java b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioSaldosContratosBean.java new file mode 100644 index 000000000..91433ea00 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioSaldosContratosBean.java @@ -0,0 +1,65 @@ +package com.rjconsultores.ventaboletos.relatorios.utilitarios; + +import java.math.BigDecimal; +import java.util.Date; + +public class RelatorioSaldosContratosBean { + + private String nit; + private String razaoSocial; + private String numContrato; + private Date dataInicio; + private BigDecimal valorContrato; + private BigDecimal adicional; + private BigDecimal executado; + private BigDecimal saldoAtual; + + public String getNit() { + return nit; + } + public void setNit(String nit) { + this.nit = nit; + } + public String getRazaoSocial() { + return razaoSocial; + } + public void setRazaoSocial(String razaoSocial) { + this.razaoSocial = razaoSocial; + } + public String getNumContrato() { + return numContrato; + } + public void setNumContrato(String numContrato) { + this.numContrato = numContrato; + } + public Date getDataInicio() { + return dataInicio; + } + public void setDataInicio(Date dataInicio) { + this.dataInicio = dataInicio; + } + public BigDecimal getValorContrato() { + return valorContrato; + } + public void setValorContrato(BigDecimal valorContrato) { + this.valorContrato = valorContrato; + } + public BigDecimal getAdicional() { + return adicional; + } + public void setAdicional(BigDecimal adicional) { + this.adicional = adicional; + } + public BigDecimal getExecutado() { + return executado; + } + public void setExecutado(BigDecimal executado) { + this.executado = executado; + } + public BigDecimal getSaldoAtual() { + return saldoAtual; + } + public void setSaldoAtual(BigDecimal saldoAtual) { + this.saldoAtual = saldoAtual; + } +} diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioDetalheContratoController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioDetalheContratoController.java index 1312f73ef..ce94d90c5 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioDetalheContratoController.java +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioDetalheContratoController.java @@ -21,6 +21,8 @@ import org.zkoss.zul.Radio; import com.rjconsultores.ventaboletos.entidad.ContratoCorporativo; import com.rjconsultores.ventaboletos.entidad.Empresa; import com.rjconsultores.ventaboletos.entidad.Parada; +import com.rjconsultores.ventaboletos.enums.DataGeracaoLegalizacaoEnum; +import com.rjconsultores.ventaboletos.enums.EstadoBilheteConsultarEnum; import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioCorridas; import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioDetalheContrato; import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; @@ -58,6 +60,16 @@ public class RelatorioDetalheContratoController extends MyGenericForwardCompose Map parametros = new HashMap(); parametros.put("NUMCONTRATO", txtNumContrato.getValue()); + + if (datInicial.getValue() != null) { + parametros.put("DATA_DE", new java.sql.Date(((java.util.Date) datInicial.getValue()).getTime())); + } + if (datFinal.getValue() != null) { + parametros.put("DATA_ATE", new java.sql.Date(((java.util.Date) datFinal.getValue()).getTime())); + } + parametros.put("GERACAO", rdbCriacao.isChecked() ? DataGeracaoLegalizacaoEnum.GERACAO : DataGeracaoLegalizacaoEnum.LEGALIZACAO); + parametros.put("ESTADO_BILHETES", rdbFaturado.isChecked() ? EstadoBilheteConsultarEnum.FATURADO : rdbNaoFaturado.isChecked() ? EstadoBilheteConsultarEnum.NAO_FATURADO : EstadoBilheteConsultarEnum.TODOS); + Relatorio relatorio = new RelatorioDetalheContrato(parametros, dataSourceRead.getConnection()); Map args = new HashMap(); diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioSaldosContratosController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioSaldosContratosController.java new file mode 100644 index 000000000..40878465f --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioSaldosContratosController.java @@ -0,0 +1,111 @@ +package com.rjconsultores.ventaboletos.web.gui.controladores.relatorios; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.sql.DataSource; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Controller; +import org.zkoss.util.resource.Labels; +import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zul.Comboitem; +import org.zkoss.zul.Datebox; +import org.zkoss.zul.Radio; +import org.zkoss.zul.Radiogroup; + +import com.rjconsultores.ventaboletos.entidad.Empresa; +import com.rjconsultores.ventaboletos.entidad.GrupoContrato; +import com.rjconsultores.ventaboletos.enums.EstadoBilheteConsultarEnum; +import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioSaldosDeContratos; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; +import com.rjconsultores.ventaboletos.service.EmpresaService; +import com.rjconsultores.ventaboletos.service.GrupoContratoService; +import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEmpresa; +import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEstandar; +import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer; +import com.rjconsultores.ventaboletos.web.utilerias.MyTextbox; + +@Controller("relatorioSaldosContratosController") +@Scope("prototype") +public class RelatorioSaldosContratosController extends MyGenericForwardComposer { + @Autowired + private DataSource dataSourceRead; + @Autowired + private EmpresaService empresaService; + @Autowired + private GrupoContratoService grupoContratoService; + + private Datebox datInicial; + private Datebox datFinal; + private MyTextbox txtNumContrato; + private MyComboboxEmpresa cmbEmpresa; + private MyComboboxEstandar cmbGrupoContrato; + private Radiogroup rdgStatus; + + private List lsEmpresa; + private List lsGrupoContrato; + + @Override + public void doAfterCompose(Component comp) throws Exception { + lsEmpresa = empresaService.obtenerTodos(); + lsGrupoContrato = grupoContratoService.obtenerTodos(); + super.doAfterCompose(comp); + + } + + public void onClick$btnExecutarRelatorio(Event ev) throws Exception { + + Map parametros = new HashMap(); + parametros.put("NUMCONTRATO", txtNumContrato.getValue()); + + Comboitem cbiEmpresa = cmbEmpresa.getSelectedItem(); + if (cbiEmpresa != null) { + Empresa empresa = (Empresa) cbiEmpresa.getValue(); + parametros.put("EMPRESA_ID", empresa.getEmpresaId()); + } + + Comboitem cbiGrupoContrato = cmbGrupoContrato.getSelectedItem(); + if (cbiGrupoContrato != null) { + GrupoContrato grupo = (GrupoContrato) cbiGrupoContrato.getValue(); + parametros.put("GRUPOCONTRATO_ID", grupo.getGrupoContratoId()); + } + + if (datInicial.getValue() != null) { + parametros.put("DATA_DE", new java.sql.Date(((java.util.Date) datInicial.getValue()).getTime())); + } + + if (datFinal.getValue() != null) { + parametros.put("DATA_ATE", new java.sql.Date(((java.util.Date) datFinal.getValue()).getTime())); + } + parametros.put("STATUS", Integer.valueOf(rdgStatus.getSelectedItem().getValue())); + + + Relatorio relatorio = new RelatorioSaldosDeContratos(parametros, dataSourceRead.getConnection()); + + Map args = new HashMap(); + args.put("relatorio", relatorio); + + openWindow("/component/reportView.zul", + Labels.getLabel("relatorioSaldosContratosController.window.title"), args, MODAL); + } + + public List getLsEmpresa() { + return lsEmpresa; + } + + public void setLsEmpresa(List lsEmpresa) { + this.lsEmpresa = lsEmpresa; + } + + public List getLsGrupoContrato() { + return lsGrupoContrato; + } + + public void setLsGrupoContrato(List lsGrupoContrato) { + this.lsGrupoContrato = lsGrupoContrato; + } +} diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/negcorporativos/ItemMenuRelatorioSaldosContratos.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/negcorporativos/ItemMenuRelatorioSaldosContratos.java new file mode 100644 index 000000000..3f67619c3 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/negcorporativos/ItemMenuRelatorioSaldosContratos.java @@ -0,0 +1,25 @@ +package com.rjconsultores.ventaboletos.web.utilerias.menu.item.negcorporativos; + +import org.zkoss.util.resource.Labels; + +import com.rjconsultores.ventaboletos.web.utilerias.PantallaUtileria; +import com.rjconsultores.ventaboletos.web.utilerias.menu.DefaultItemMenuSistema; + +public class ItemMenuRelatorioSaldosContratos extends DefaultItemMenuSistema { + + public ItemMenuRelatorioSaldosContratos() { + super("indexController.mniRelatorioSaldosContratos.label"); + } + + @Override + public String getClaveMenu() { + return "COM.RJCONSULTORES.ADMINISTRACION.GUI.CONFIGURACIONECCOMERCIALES.MENU.RELATORIOSALDOSCONTRATOS"; + } + + @Override + public void ejecutar() { + PantallaUtileria.openWindow("/gui/relatorios/filtroRelatorioSaldosContratos.zul", + Labels.getLabel("relatorioSaldosContratosController.window.title"), getArgs(), desktop); + } + +} diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/menu_original.properties b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/menu_original.properties index 1d5f4395b..2a4bbf11a 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/menu_original.properties +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/menu_original.properties @@ -66,6 +66,7 @@ confComerciales.negCorporativos.Contrato=com.rjconsultores.ventaboletos.web.util confComerciales.negCorporativos.Transportadora=com.rjconsultores.ventaboletos.web.utilerias.menu.item.negcorporativos.ItemMenuTransportadora confComerciales.negCorporativos.Voucher=com.rjconsultores.ventaboletos.web.utilerias.menu.item.negcorporativos.ItemMenuVoucher confComerciales.negCorporativos.RelatorioDetalhesContrato=com.rjconsultores.ventaboletos.web.utilerias.menu.item.negcorporativos.ItemMenuRelatorioDetalheContrato +confComerciales.negCorporativos.RelatorioSaldosContratos=com.rjconsultores.ventaboletos.web.utilerias.menu.item.negcorporativos.ItemMenuRelatorioSaldosContratos confComerciales.impressaofiscal=com.rjconsultores.ventaboletos.web.utilerias.menu.item.impressaofiscal.SubMenuImpressaoFiscal confComerciales.impressaofiscal.totnaofiscalEmpresa=com.rjconsultores.ventaboletos.web.utilerias.menu.item.impressaofiscal.ItemMenuTotnaofiscalEmpresa confComerciales.impressaofiscal.formapagoEmpresa=com.rjconsultores.ventaboletos.web.utilerias.menu.item.impressaofiscal.ItemMenuFormapagoEmpresa diff --git a/web/WEB-INF/i3-label_en.label b/web/WEB-INF/i3-label_en.label index 25d91ec0a..6660c9d1f 100644 --- a/web/WEB-INF/i3-label_en.label +++ b/web/WEB-INF/i3-label_en.label @@ -7915,6 +7915,7 @@ indexController.mniRelatorioResumoLinhas.label = Line Summary indexController.mniRelatorioResumoVendaOrgaoConcedente.label = Sale Summary Report Granting Authority # Retorno Bancario indexController.mniRelatorioRetornoBancario.label = Bank Return +indexController.mniRelatorioSaldosContratos.label = Contract Balances Report indexController.mniRelatorioSap.label = SAP indexController.mniRelatorioSegundaVia.label = Second Copy indexController.mniRelatorioServicoBloqueadoVendaInternet.label = Service Blocked on Internet Sales @@ -9762,6 +9763,15 @@ relatorioRetornoBancario.MSG.extensaoInvalida = Only files in bank return format relatorioRetornoBancario.fileupload.label = Select File... relatorioRetornoBancario.lbEmpresa.value = Company relatorioRetornoBancario.window.title = Bank Return Processing +relatorioSaldosContratosController.lblDataFinal.value = End Date +relatorioSaldosContratosController.lblDataInicial.value = Start Date +relatorioSaldosContratosController.lblEstadoBilhete.value = Ticket Status +relatorioSaldosContratosController.lblFaturado.value = Invoiced +relatorioSaldosContratosController.lblGrupoContrato.value = Contract Group +relatorioSaldosContratosController.lblNaoFaturado.value = Not Billed +relatorioSaldosContratosController.lblNumContrato.value = Contract Number +relatorioSaldosContratosController.lblTodos.value = All +relatorioSaldosContratosController.window.title = Contract Balances Report relatorioSapController.MGS.alertaArquivoRemessaNaoGerado = Shipment file could not be created, please contact support. relatorioSapController.MGS.alertaCNABSemItens = There are no closing items to send to this company relatorioSapController.MGS.erroIntegraManual = Manual execution of integration with SAP diff --git a/web/WEB-INF/i3-label_es_MX.label b/web/WEB-INF/i3-label_es_MX.label index 03582a3b4..cf90efcf2 100644 --- a/web/WEB-INF/i3-label_es_MX.label +++ b/web/WEB-INF/i3-label_es_MX.label @@ -7923,6 +7923,7 @@ indexController.mniRelatorioResumoLinhas.label = Reporte resumen de rutas indexController.mniRelatorioResumoVendaOrgaoConcedente.label = Relatorio Resumo Venda Órgao Concedente # Retorno Bancario indexController.mniRelatorioRetornoBancario.label = Retorno Bancário +indexController.mniRelatorioSaldosContratos.label = Informe de saldos de contratos indexController.mniRelatorioSap.label = SAP indexController.mniRelatorioSegundaVia.label = Segunda Via indexController.mniRelatorioServicoBloqueadoVendaInternet.label = Corrida bloqueada en venta internet @@ -9788,6 +9789,15 @@ relatorioRetornoBancario.MSG.extensaoInvalida = Somente arquivos no formato de r relatorioRetornoBancario.fileupload.label = Selecionar Arquivo... relatorioRetornoBancario.lbEmpresa.value = Empresa relatorioRetornoBancario.window.title = Processamento de Retorno Bancário +relatorioSaldosContratosController.lblDataFinal.value = Fecha de finalización +relatorioSaldosContratosController.lblDataInicial.value = Fecha de inicio +relatorioSaldosContratosController.lblEstadoBilhete.value = Estado del billete +relatorioSaldosContratosController.lblFaturado.value = Facturado +relatorioSaldosContratosController.lblGrupoContrato.value = Grupo de contrato +relatorioSaldosContratosController.lblNaoFaturado.value = No facturado +relatorioSaldosContratosController.lblNumContrato.value = Número de contrato +relatorioSaldosContratosController.lblTodos.value = Todo +relatorioSaldosContratosController.window.title = Informe de saldos de contratos relatorioSapController.MGS.alertaArquivoRemessaNaoGerado = Arquivo de remessa não pôde ser criado, favor entrar em contato com o suporte. relatorioSapController.MGS.alertaCNABSemItens = Não há itens fechamento a enviar para esta empresa relatorioSapController.MGS.erroIntegraManual = Execução manual de integração com SAP diff --git a/web/WEB-INF/i3-label_fr_FR.label b/web/WEB-INF/i3-label_fr_FR.label index fd42fc343..86ed454cb 100644 --- a/web/WEB-INF/i3-label_fr_FR.label +++ b/web/WEB-INF/i3-label_fr_FR.label @@ -7913,6 +7913,7 @@ indexController.mniRelatorioResumoLinhas.label = Résumé de la ligne indexController.mniRelatorioResumoVendaOrgaoConcedente.label = Rapport sommaire de vente accordant le pouvoir # Retorno Bancario indexController.mniRelatorioRetornoBancario.label = Retour bancaire +indexController.mniRelatorioSaldosContratos.label = Rapport sur les soldes des contrats indexController.mniRelatorioSap.label = SAP indexController.mniRelatorioSegundaVia.label = Deuxième copie indexController.mniRelatorioServicoBloqueadoVendaInternet.label = Service bloqué sur les ventes Internet @@ -9754,6 +9755,15 @@ relatorioRetornoBancario.MSG.extensaoInvalida = Seuls les fichiers au format ret relatorioRetornoBancario.fileupload.label = Sélectionnez Fichier... relatorioRetornoBancario.lbEmpresa.value = Entreprise relatorioRetornoBancario.window.title = Traitement des retours bancaires +relatorioSaldosContratosController.lblDataFinal.value = Date de fin +relatorioSaldosContratosController.lblDataInicial.value = Date de début +relatorioSaldosContratosController.lblEstadoBilhete.value = Statut du billet +relatorioSaldosContratosController.lblFaturado.value = Facturé +relatorioSaldosContratosController.lblGrupoContrato.value = Groupe contractuel +relatorioSaldosContratosController.lblNaoFaturado.value = Non facturé +relatorioSaldosContratosController.lblNumContrato.value = Numéro de contrat +relatorioSaldosContratosController.lblTodos.value = Tous +relatorioSaldosContratosController.window.title = Rapport sur les soldes des contrats relatorioSapController.MGS.alertaArquivoRemessaNaoGerado = Le fichier d'expédition n'a pas pu être créé, veuillez contacter le support. relatorioSapController.MGS.alertaCNABSemItens = Il n'y a aucun élément de clôture à envoyer à cette société relatorioSapController.MGS.erroIntegraManual = Exécution manuelle de l'intégration avec SAP diff --git a/web/WEB-INF/i3-label_pt_BR.label b/web/WEB-INF/i3-label_pt_BR.label index e746c7e2f..0bc567e7c 100644 --- a/web/WEB-INF/i3-label_pt_BR.label +++ b/web/WEB-INF/i3-label_pt_BR.label @@ -7919,6 +7919,7 @@ indexController.mniRelatorioResumoLinhas.label = Resumo de Linhas indexController.mniRelatorioResumoVendaOrgaoConcedente.label = Relatorio Resumo Venda Órgao Concedente # Retorno Bancario indexController.mniRelatorioRetornoBancario.label = Retorno Bancário +indexController.mniRelatorioSaldosContratos.label = Relatório Saldos de Contratos indexController.mniRelatorioSap.label = SAP indexController.mniRelatorioSegundaVia.label = Segunda Via indexController.mniRelatorioServicoBloqueadoVendaInternet.label = Serviço Bloqueado na Venda Internet @@ -9768,6 +9769,15 @@ relatorioRetornoBancario.MSG.extensaoInvalida = Somente arquivos no formato de r relatorioRetornoBancario.fileupload.label = Selecionar Arquivo... relatorioRetornoBancario.lbEmpresa.value = Empresa relatorioRetornoBancario.window.title = Processamento de Retorno Bancário +relatorioSaldosContratosController.lblDataFinal.value = Data Final +relatorioSaldosContratosController.lblDataInicial.value = Data Inicial +relatorioSaldosContratosController.lblEstadoBilhete.value = Estado Bilhete +relatorioSaldosContratosController.lblFaturado.value = Faturado +relatorioSaldosContratosController.lblGrupoContrato.value = Grupo Contrato +relatorioSaldosContratosController.lblNaoFaturado.value = Não Faturado +relatorioSaldosContratosController.lblNumContrato.value = Num. Contrato +relatorioSaldosContratosController.lblTodos.value = Todos +relatorioSaldosContratosController.window.title = Relatório Saldos de Contratos relatorioSapController.MGS.alertaArquivoRemessaNaoGerado = Arquivo de remessa não pôde ser criado, favor entrar em contato com o suporte. relatorioSapController.MGS.alertaCNABSemItens = Não há itens fechamento a enviar para esta empresa relatorioSapController.MGS.erroIntegraManual = Execução manual de integração com SAP diff --git a/web/gui/relatorios/filtroRelatorioSaldosContratos.zul b/web/gui/relatorios/filtroRelatorioSaldosContratos.zul new file mode 100644 index 000000000..863844a57 --- /dev/null +++ b/web/gui/relatorios/filtroRelatorioSaldosContratos.zul @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +