From dfdb0caf097ef5f123c26b6024089b274253bbdf Mon Sep 17 00:00:00 2001 From: fabio Date: Tue, 16 Jun 2020 22:39:03 +0000 Subject: [PATCH] fixes bug#19272 dev: qua: git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Web/trunk/ventaboletos@102130 d1611594-4594-4d17-8e1d-87c2c4800839 --- .../RelatorioAproveitamentoFinanceiro.java | 240 +++ ...oAproveitamentoFinanceiro_pt_BR.properties | 13 + .../RelatorioAproveitamentoFinanceiro.jasper | Bin 0 -> 125872 bytes .../RelatorioAproveitamentoFinanceiro.jrxml | 1646 +++++++++++++++++ ...rioAproveitamentoFinanceiroController.java | 166 ++ .../RelatorioVendasBilheteiroController.java | 2 +- ...MenuRelatorioAproveitamentoFinanceiro.java | 25 + .../utilerias/menu/menu_original.properties | 1 + ...nderRelatorioAproveitamentoFinanceiro.java | 69 + web/WEB-INF/i3-label_es_MX.label | 15 +- ...iltroRelatorioAproveitamentoFinanceiro.zul | 130 ++ 11 files changed, 2305 insertions(+), 2 deletions(-) create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAproveitamentoFinanceiro.java create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioAproveitamentoFinanceiro_pt_BR.properties create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamentoFinanceiro.jasper create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamentoFinanceiro.jrxml create mode 100644 src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioAproveitamentoFinanceiroController.java create mode 100644 src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioAproveitamentoFinanceiro.java create mode 100644 src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderRelatorioAproveitamentoFinanceiro.java create mode 100644 web/gui/relatorios/filtroRelatorioAproveitamentoFinanceiro.zul diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAproveitamentoFinanceiro.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAproveitamentoFinanceiro.java new file mode 100644 index 000000000..7d9dcb3d5 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAproveitamentoFinanceiro.java @@ -0,0 +1,240 @@ +/** + * + */ +package com.rjconsultores.ventaboletos.relatorios.impl; + +import java.math.BigDecimal; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.Timestamp; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import com.rjconsultores.ventaboletos.relatorios.utilitarios.ArrayDataSource; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; +import com.rjconsultores.ventaboletos.utilerias.DateUtil; +import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement; + + +public class RelatorioAproveitamentoFinanceiro extends Relatorio { + + private final BigDecimal cem = new BigDecimal("100"); + + public RelatorioAproveitamentoFinanceiro(Map parametros, Connection conexao) throws Exception { + super(parametros, conexao); + + this.setCustomDataSource(new ArrayDataSource(this) { + @Override + public void initDados() throws Exception { + + Connection conexao = this.relatorio.getConexao(); + Map parametros = this.relatorio.getParametros(); + + StringBuilder sql = new StringBuilder(); + + sql.append("select * from ( "); + sql.append(" SELECT "); + sql.append(" r.DESCRUTA as linha, "); + sql.append(" count( c.caja_id) as passageiros, "); + sql.append(" sum( c.PRECIOPAGADO )as valor, "); + sql.append(" to_char( c.FECHORVENTA, 'DY') as dia, "); + sql.append(" count(DISTINCT to_char( c.FECHORVENTA, 'WW')) as qtde, "); + sql.append(" r.indsentidoida as sentido, "); + sql.append(" da.cantasientos as assentos, "); + sql.append(" TO_CHAR(c.fechorviaje ,'HH24:mi') as horario, "); + sql.append(" c.CORRIDA_ID as servico, "); + sql.append(" max(c.preciobase) as tarifa "); + sql.append(" FROM CAJA c "); + sql.append(" inner join corrida co "); + sql.append(" on c.CORRIDA_ID = co.CORRIDA_ID "); + sql.append(" and c.FECCORRIDA = co.FECCORRIDA "); + sql.append(" and co.ACTIVO = 1 "); + sql.append(" inner join ruta r "); + sql.append(" on c.RUTA_ID = r.RUTA_ID "); + sql.append(" and r.ACTIVO = 1 "); + sql.append(" inner join MARCA m "); + sql.append(" on m.marca_id = c.marca_id "); + sql.append(" and m.activo = 1 "); + sql.append(" left join rol_operativo ro "); + sql.append(" on ro.roloperativo_id = co.roloperativo_id "); + sql.append(" left join diagrama_autobus da "); + sql.append(" on ro.diagramaautobus_id = da.diagramaautobus_id "); + sql.append(" WHERE c.activo = 1 "); + sql.append(" AND m.EMPRESA_ID = :EMPRESA_ID "); + sql.append(" and c.FECHORVENTA >= :DATA_INICIAL "); + sql.append(" and c.FECHORVENTA <= :DATA_FINAL "); + + if (parametros.get("LINHAS") != null && !possuiFiltroTodos("LINHAS")) { + sql.append(" and c.ruta_id IN (" + parametros.get("LINHAS").toString() + ")"); + } + + sql.append(" and c.MOTIVOCANCELACION_ID is null "); + sql.append(" and c.INDSTATUSBOLETO = 'V' "); + sql.append(" GROUP by r.DESCRUTA, r.indsentidoida, da.cantasientos, "); + sql.append(" to_char( c.FECHORVENTA, 'DY'), TO_CHAR(c.fechorviaje ,'HH24:mi'), "); + sql.append(" c.CORRIDA_ID "); + sql.append(" ORDER by r.DESCRUTA, r.indsentidoida desc, to_char( c.FECHORVENTA, 'DY') "); + sql.append(" ) "); + sql.append("PIVOT "); + sql.append("( "); + sql.append(" max(valor) receita_ope, "); + sql.append(" count(qtde) qtde, "); + sql.append(" max(passageiros) tot "); + sql.append(" for dia in ('SEG', 'TER', 'QUA', 'QUI', 'SEX', 'SAB', 'DOM') "); + sql.append(") "); + + NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql.toString()); + + stmt.setInt("EMPRESA_ID", Integer.valueOf(parametros.get("EMPRESA_ID").toString())); + stmt.setTimestamp("DATA_INICIAL", new Timestamp(DateUtil.inicioFecha((Date) parametros.get("DATA_INICIAL")).getTime())); + stmt.setTimestamp("DATA_FINAL", new Timestamp(DateUtil.fimFecha((Date) parametros.get("DATA_FINAL")).getTime())); + + ResultSet rset = stmt.executeQuery(); + + rset.setFetchSize(500); + + while (rset.next()) { + + Map dataResult = new HashMap(); + + dataResult.put("LINHA", rset.getString("linha")); + dataResult.put("SENTIDO", rset.getString("sentido")); + dataResult.put("SERVICO", rset.getString("servico")); + dataResult.put("HORARIO", rset.getString("horario")); + + BigDecimal assentos = limpaNulo(rset.getBigDecimal("assentos")); + BigDecimal tarifa = limpaNulo(rset.getBigDecimal("tarifa")); + BigDecimal totPassageiros = BigDecimal.ZERO; + BigDecimal totReceita = BigDecimal.ZERO; + BigDecimal viagens = BigDecimal.ZERO; + + BigDecimal segReceitaOpe = limpaNulo(rset.getBigDecimal("'SEG'_RECEITA_OPE")); + BigDecimal segQtde = limpaNulo(rset.getBigDecimal("'SEG'_QTDE")); + BigDecimal segTot = limpaNulo(rset.getBigDecimal("'SEG'_TOT")); + totPassageiros = totPassageiros.add(segTot); + totReceita = totReceita.add(segReceitaOpe); + viagens = viagens.add(segQtde); + + BigDecimal terReceitaOpe = limpaNulo(rset.getBigDecimal("'TER'_RECEITA_OPE")); + BigDecimal terQtde = limpaNulo(rset.getBigDecimal("'TER'_QTDE")); + BigDecimal terTot = limpaNulo(rset.getBigDecimal("'TER'_TOT")); + totPassageiros = totPassageiros.add(terTot); + totReceita = totReceita.add(terReceitaOpe); + viagens = viagens.add(terQtde); + + BigDecimal quaReceitaOpe = limpaNulo(rset.getBigDecimal("'QUA'_RECEITA_OPE")); + BigDecimal quaQtde = limpaNulo(rset.getBigDecimal("'QUA'_QTDE")); + BigDecimal quaTot = limpaNulo(rset.getBigDecimal("'QUA'_TOT")); + totPassageiros = totPassageiros.add(quaTot); + totReceita = totReceita.add(quaReceitaOpe); + viagens = viagens.add(quaQtde); + + BigDecimal quiReceitaOpe = limpaNulo(rset.getBigDecimal("'QUI'_RECEITA_OPE")); + BigDecimal quiQtde = limpaNulo(rset.getBigDecimal("'QUI'_QTDE")); + BigDecimal quiTot = limpaNulo(rset.getBigDecimal("'QUI'_TOT")); + totPassageiros = totPassageiros.add(quiTot); + totReceita = totReceita.add(quiReceitaOpe); + viagens = viagens.add(quiQtde); + + BigDecimal sexReceitaOpe = limpaNulo(rset.getBigDecimal("'SEX'_RECEITA_OPE")); + BigDecimal sexQtde = limpaNulo(rset.getBigDecimal("'SEX'_QTDE")); + BigDecimal sexTot = limpaNulo(rset.getBigDecimal("'SEX'_TOT")); + totPassageiros = totPassageiros.add(sexTot); + totReceita = totReceita.add(sexReceitaOpe); + viagens = viagens.add(sexQtde); + + BigDecimal sabReceitaOpe = limpaNulo(rset.getBigDecimal("'SAB'_RECEITA_OPE")); + BigDecimal sabQtde = limpaNulo(rset.getBigDecimal("'SAB'_QTDE")); + BigDecimal sabTot = limpaNulo(rset.getBigDecimal("'SAB'_TOT")); + totPassageiros = totPassageiros.add(sabTot); + totReceita = totReceita.add(sabReceitaOpe); + viagens = viagens.add(sabQtde); + + BigDecimal domReceitaOpe = limpaNulo(rset.getBigDecimal("'DOM'_RECEITA_OPE")); + BigDecimal domQtde = limpaNulo(rset.getBigDecimal("'DOM'_QTDE")); + BigDecimal domTot = limpaNulo(rset.getBigDecimal("'DOM'_TOT")); + totPassageiros = totPassageiros.add(domTot); + totReceita = totReceita.add(domReceitaOpe); + viagens = viagens.add(domQtde); + + dataResult.put("VIAGENS", viagens); + dataResult.put("ASSENTOS", assentos); + dataResult.put("TARIFA", tarifa); + dataResult.put("TOT_PASSAGEIROS", totPassageiros); + dataResult.put("TOT_RECEITA", totReceita); + + dataResult.put("SEG_RECEITA_OPE", segReceitaOpe); + dataResult.put("SEG_QTDE", segQtde); + dataResult.put("SEG_TOT", segTot); + dataResult.put("SEG_FIN", calculaMedia(totReceita, segReceitaOpe, viagens)); + + dataResult.put("TER_RECEITA_OPE", terReceitaOpe); + dataResult.put("TER_QTDE", terQtde); + dataResult.put("TER_TOT", terTot); + dataResult.put("TER_FIN", calculaMedia(totReceita, terReceitaOpe, viagens)); + + dataResult.put("QUA_RECEITA_OPE", quaReceitaOpe); + dataResult.put("QUA_QTDE", quaQtde); + dataResult.put("QUA_TOT", quaTot); + dataResult.put("QUA_FIN", calculaMedia(totReceita, quaReceitaOpe, viagens)); + + dataResult.put("QUI_RECEITA_OPE", quiReceitaOpe); + dataResult.put("QUI_QTDE", quiQtde); + dataResult.put("QUI_TOT", quiTot); + dataResult.put("QUI_FIN", calculaMedia(totReceita, quiReceitaOpe, viagens)); + + dataResult.put("SEX_RECEITA_OPE", sexReceitaOpe); + dataResult.put("SEX_QTDE", sexQtde); + dataResult.put("SEX_TOT", sexTot); + dataResult.put("SEX_FIN", calculaMedia( totReceita, sexReceitaOpe, viagens)); + + dataResult.put("SAB_RECEITA_OPE", sabReceitaOpe); + dataResult.put("SAB_QTDE", sabQtde); + dataResult.put("SAB_TOT", sabTot); + dataResult.put("SAB_FIN", calculaMedia(totReceita, sabReceitaOpe, viagens)); + + dataResult.put("DOM_RECEITA_OPE", domReceitaOpe); + dataResult.put("DOM_QTDE", domQtde); + dataResult.put("DOM_TOT", domTot); + dataResult.put("DOM_FIN", calculaMedia(totReceita, domReceitaOpe, domQtde)); + + this.dados.add(dataResult); + } + + this.resultSet = rset; + } + }); + } + + @Override + protected void processaParametros() throws Exception { + + } + + private BigDecimal limpaNulo( BigDecimal val ) { + if( val == null ) { + return BigDecimal.ZERO; + }else { + return val; + } + } + + private BigDecimal calculaMedia(BigDecimal totReceita, BigDecimal receitaOpe, BigDecimal qtde) { + if( qtde.intValue() != 0 ) { + BigDecimal dividendo = receitaOpe.multiply(qtde); + + if(dividendo.intValue() == 0 ) { + return BigDecimal.ZERO; + } + + BigDecimal fin = totReceita.divide(dividendo, 4, BigDecimal.ROUND_HALF_UP); + fin = fin.multiply(cem); + fin.setScale(2); + return fin; + }else{ + return BigDecimal.ZERO; + } + } + +} diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioAproveitamentoFinanceiro_pt_BR.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioAproveitamentoFinanceiro_pt_BR.properties new file mode 100644 index 000000000..03412d849 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioAproveitamentoFinanceiro_pt_BR.properties @@ -0,0 +1,13 @@ +#geral +msg.noData=Não foi possivel obter dados com os parâmetros informados. + + +#Labels cabeçalho +cabecalho.relatorio=Relatório: +cabecalho.periodo=Período: +cabecalho.periodoA=à +cabecalho.dataHora=Data/Hora: +cabecalho.impressorPor=Impresso por: +cabecalho.pagina=Página +cabecalho.de=de +cabecalho.filtros=Filtros: \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamentoFinanceiro.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamentoFinanceiro.jasper new file mode 100644 index 0000000000000000000000000000000000000000..d0e3789630c86232d82415c98d23f5addf1291dd GIT binary patch literal 125872 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 ThVA>c?@+f#x0m35OZWOO!8tFQ literal 0 HcmV?d00001 diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamentoFinanceiro.jrxml b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamentoFinanceiro.jrxml new file mode 100644 index 000000000..a1d7fc381 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamentoFinanceiro.jrxml @@ -0,0 +1,1646 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioAproveitamentoFinanceiroController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioAproveitamentoFinanceiroController.java new file mode 100644 index 000000000..1e81c42f5 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioAproveitamentoFinanceiroController.java @@ -0,0 +1,166 @@ +/** + * + */ +package com.rjconsultores.ventaboletos.web.gui.controladores.relatorios; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.sql.DataSource; + +import org.apache.log4j.Logger; +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.zhtml.Messagebox; +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.Textbox; + +import com.rjconsultores.ventaboletos.entidad.Empresa; +import com.rjconsultores.ventaboletos.entidad.Ruta; +import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioAproveitamentoFinanceiro; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; +import com.rjconsultores.ventaboletos.service.RutaService; +import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado; +import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEstandar; +import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer; +import com.rjconsultores.ventaboletos.web.utilerias.MyListbox; +import com.rjconsultores.ventaboletos.web.utilerias.render.RenderRelatorioAproveitamentoFinanceiro; + + +@Controller("relatorioAproveitamentoFinanceiroController") +@Scope("prototype") +@SuppressWarnings({ "rawtypes", "unchecked" }) +public class RelatorioAproveitamentoFinanceiroController extends MyGenericForwardComposer { + + private static final long serialVersionUID = 1L; + private static Logger log = Logger.getLogger(RelatorioAproveitamentoFinanceiroController.class); + + @Autowired + private DataSource dataSourceRead; + + private Datebox datInicial; + private Datebox datFinal; + + private MyComboboxEstandar cmbEmpresa; + private List lsEmpresa; + + @Autowired + private RutaService rutaService; + + private MyListbox linhaList; + private MyListbox linhaListSelList; + private Textbox txtPalavraPesquisaLinha; + private ArrayList lsNumLinha = new ArrayList(); + + @Override + public void doAfterCompose(Component comp) throws Exception { + super.doAfterCompose(comp); + + lsEmpresa = UsuarioLogado.getUsuarioLogado().getEmpresa(); + linhaList.setItemRenderer(new RenderRelatorioAproveitamentoFinanceiro()); + linhaListSelList.setItemRenderer(new RenderRelatorioAproveitamentoFinanceiro()); + } + + public List getLsEmpresa() { + return lsEmpresa; + } + + public void setLsEmpresa(List lsEmpresa) { + this.lsEmpresa = lsEmpresa; + } + + public void onDoubleClick$linhaList(Event ev) { + Ruta rutaAux = (Ruta) linhaList.getSelected(); + linhaListSelList.addItemNovo(rutaAux); + } + + private void executarPesquisaLinha() { + + String palavraPesquisaRuta = txtPalavraPesquisaLinha.getText(); + linhaList.setData(rutaService.buscaRuta(palavraPesquisaRuta)); + + if (linhaList.getData().length == 0) { + try { + Messagebox.show(Labels.getLabel("MSG.ningunRegistro"), + Labels.getLabel("relatorioLinhasHorarioController.window.title"), + Messagebox.OK, Messagebox.INFORMATION); + } catch (InterruptedException ex) { + log.error(ex); + } + } + } + + public void onClick$btnPesquisaLinha(Event ev) { + executarPesquisaLinha(); + } + + public void onClick$btnLimparLinha(Event ev) { + linhaList.clearSelection(); + lsNumLinha.clear(); + } + + public void onClick$btnExecutarRelatorio(Event ev) throws Exception { + executarRelatorio(); + } + + private void executarRelatorio() throws Exception { + Relatorio relatorio; + Map parametros = new HashMap(); + StringBuilder filtro = new StringBuilder(); + + filtro.append("Linha: "); + String linhaIds = ""; + String linhas = ""; + List lslinhaSelecionados = new ArrayList(Arrays.asList(linhaListSelList.getData())); + if (lslinhaSelecionados.isEmpty()) { + linhas = "Todas"; + } else { + for (int i = 0; i < lslinhaSelecionados.size(); i++) { + Ruta linha = lslinhaSelecionados.get(i); + linhas = linhas + linha.getDescruta() + ", "; + + linhaIds = linhaIds + linha.getRutaId() + ", "; + } + + // removendo ultima virgula + linhaIds = linhaIds.substring(0, linhaIds.length() - 2); + linhas = linhas.substring(0, linhas.length() - 2); + parametros.put("LINHAS", linhaIds); + } + filtro.append(linhas).append(";"); + + parametros.put("DATA_INICIAL", (java.util.Date) this.datInicial.getValue()); + parametros.put("DATA_FINAL", (java.util.Date) this.datFinal.getValue()); + parametros.put("NOME_RELATORIO", Labels.getLabel("relatorioAproveitamentoFinanceiroController.window.title")); + parametros.put("USUARIO", UsuarioLogado.getUsuarioLogado().getNombusuario()); + + filtro.append(" Empresa: "); + + Comboitem itemEmpresa = cmbEmpresa.getSelectedItem(); + if (itemEmpresa != null) { + Empresa empresa = (Empresa) itemEmpresa.getValue(); + parametros.put("EMPRESA_ID", empresa.getEmpresaId()); + parametros.put("EMPRESA", empresa.getNombempresa()); + filtro.append(empresa.getNombempresa() + ";"); + } else { + filtro.append(" Todas;"); + } + + parametros.put("FILTROS", filtro.toString()); + relatorio = new RelatorioAproveitamentoFinanceiro(parametros, dataSourceRead.getConnection()); + + Map args = new HashMap(); + args.put("relatorio", relatorio); + + openWindow("/component/reportView.zul", + Labels.getLabel("relatorioAproveitamentoFinanceiroController.window.title"), args, MODAL); + } +} diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioVendasBilheteiroController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioVendasBilheteiroController.java index 30cde89d0..c49a8b083 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioVendasBilheteiroController.java +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioVendasBilheteiroController.java @@ -109,7 +109,7 @@ public class RelatorioVendasBilheteiroController extends MyGenericForwardCompose Labels.getLabel("relatorioVendasBilheteiroController.window.title"), Messagebox.OK, Messagebox.INFORMATION); } catch (InterruptedException ex) { - ex.printStackTrace(); + log.error(ex); } } } diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioAproveitamentoFinanceiro.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioAproveitamentoFinanceiro.java new file mode 100644 index 000000000..942e512ff --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioAproveitamentoFinanceiro.java @@ -0,0 +1,25 @@ +package com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios; + +import org.zkoss.util.resource.Labels; + +import com.rjconsultores.ventaboletos.web.utilerias.PantallaUtileria; +import com.rjconsultores.ventaboletos.web.utilerias.menu.DefaultItemMenuSistema; + +public class ItemMenuRelatorioAproveitamentoFinanceiro extends DefaultItemMenuSistema { + + public ItemMenuRelatorioAproveitamentoFinanceiro() { + super("indexController.mniRelatorioAproveitamentoFinanceiro.label"); + } + + @Override + public String getClaveMenu() { + return "COM.RJCONSULTORES.ADMINISTRACION.GUI.RELATORIOS.MENU.RELATORIOAPROVEITAMENTOFINANCEIRO"; + } + + @Override + public void ejecutar() { + PantallaUtileria.openWindow("/gui/relatorios/filtroRelatorioAproveitamentoFinanceiro.zul", + Labels.getLabel("relatorioAproveitamentoFinanceiroController.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 46ad71360..e0955afab 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 @@ -216,6 +216,7 @@ analitico.gerenciais.financeiro.relatorioDocumentosFiscais=com.rjconsultores.ven analitico.gerenciais.financeiro.relatorioVendasPercurso=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioVendasPercurso analitico.gerenciais.financeiro.vendasConexao=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioVendasConexao analitico.gerenciais.financeiro.vendasRequisicao=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioVendasRequisicao +analitico.gerenciais.financeiro.aproveitamentoFinanceiro=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioAproveitamentoFinanceiro analitico.gerenciais.pacote=com.rjconsultores.ventaboletos.web.utilerias.menu.item.analitico.gerenciais.pacote.SubMenuRelatorioPacote analitico.gerenciais.pacote.boletos=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioVendasPacotesBoletos analitico.gerenciais.pacote.detalhado=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioVendasPacotesDetalhado diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderRelatorioAproveitamentoFinanceiro.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderRelatorioAproveitamentoFinanceiro.java new file mode 100644 index 000000000..8dc4a2a6d --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderRelatorioAproveitamentoFinanceiro.java @@ -0,0 +1,69 @@ +/** + * + */ +package com.rjconsultores.ventaboletos.web.utilerias.render; + +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zk.ui.event.EventListener; +import org.zkoss.zul.Button; +import org.zkoss.zul.Listcell; +import org.zkoss.zul.Listitem; +import org.zkoss.zul.ListitemRenderer; + +import com.rjconsultores.ventaboletos.entidad.Empresa; +import com.rjconsultores.ventaboletos.entidad.OrgaoConcedente; +import com.rjconsultores.ventaboletos.entidad.PuntoVenta; +import com.rjconsultores.ventaboletos.entidad.Ruta; +import com.rjconsultores.ventaboletos.web.utilerias.MyListbox; + +/** + * @author Thiago + * + */ +public class RenderRelatorioAproveitamentoFinanceiro implements ListitemRenderer { + + @Override + public void render(Listitem lstm, Object o) throws Exception { + Ruta ruta = (Ruta) o; + + Listcell lc = new Listcell(ruta.getNumRuta().toString()); + lc.setParent(lstm); + + lc = new Listcell(ruta.getPrefixo()); + lc.setParent(lstm); + + lc = new Listcell(ruta.getDescruta()); + lc.setParent(lstm); + + OrgaoConcedente orgaoConcedente = ruta.getOrgaoConcedente(); + if (orgaoConcedente != null) { + lc = new Listcell(orgaoConcedente.getDescOrgao()); + } else { + lc = new Listcell("-"); + } + lc.setParent(lstm); + + Button btn = new Button(); + + lc = new Listcell(); + lc.setParent(lstm); + + btn.setWidth("16"); + btn.setHeight("16"); + btn.setImage("/gui/img/remove.png"); + + btn.addEventListener("onClick", new EventListener() { + @Override + public void onEvent(Event event) throws Exception { + MyListbox listBox = (MyListbox) event.getTarget().getParent().getParent().getParent(); + Listitem listItem = (Listitem) event.getTarget().getParent().getParent(); + listBox.removeItem((Ruta) listItem.getAttribute("data")); + } + }); + + lc.appendChild(btn); + + lstm.setAttribute("data", ruta); + } + +} diff --git a/web/WEB-INF/i3-label_es_MX.label b/web/WEB-INF/i3-label_es_MX.label index 44fe81e21..1762e49a5 100644 --- a/web/WEB-INF/i3-label_es_MX.label +++ b/web/WEB-INF/i3-label_es_MX.label @@ -299,6 +299,7 @@ indexController.mniRelatorioGratuidade.label = Gratuidades indexController.mniRelatorioGratuidadeANTT.label = Gratuidades ANTT indexController.mniRelatorioExportacaoIdosoARTESP.label = Reporte Exportación Ancianos ARTESP indexController.mniRelatorioGratuidadeIdosoDeficiente.label = Gratuidades Idoso/Deficiente +indexController.mniRelatorioAproveitamentoFinanceiro.label = Aproveitamento Financeiro indexController.mniRelatorioVendasBilheteiro.label = Ventas por agente de pasajes indexController.mniRelatorioVendasBilheteiroSintetico.label = Ventas por agentes sintético indexController.mniRelatorioAgenciasNaoImportadas.label = Reporte puntos venta no importados @@ -1369,8 +1370,10 @@ editarEmpresaController.emiteDABpeVdaCallCenter.ajuda = Emite DABP-e em uma Vend editarEmpresaController.outrasFPVdaCallCenter.ajuda = Permite várias formas de pagamento para uma Venda Call Center editarEmpresaController.emiteDABpeVdaInternet = Emite DABP-e Venda Internet editarEmpresaController.emiteDABpeVdaIntJ3 = Emite DABP-e Venda Internet J3 +editarEmpresaController.emiteDABpeVdaFidelidade = Emite DABP-e Venda Fidelidade editarEmpresaController.emiteDABpeVdaInternet.ajuda = Emite DABP-e Venda Internet editarEmpresaController.emiteDABpeVdaIntJ3.ajuda = Emite DABP-e Venda Internet J3 +editarEmpresaController.emiteDABpeVdaFidelidade.ajuda = Emite DABP-e Venda Fidelidade editarEmpresaController.exigeClienteCompradorVdaCallCenter = Cliente Comprador Obrigatório Venda Call Center editarEmpresaController.exigeClienteCompradorVdaCallCenter.ajuda = Cliente Comprador Obrigatório Venda Call Center editarEmpresaController.habilitaIEDescentralizadaText.label = Permite Descentralizar Inscrição Estadual para Emissão BP-e por Origem @@ -8633,4 +8636,14 @@ filtroTaxaEmbarqueW2i.labelAviso.value= Atenção. Certifique-se que todos os da indexController.mniLimparCacheLocalidadesAPI.label = Recarregar Cache de Localidades (API) limparCacheLocalidadesAPI.title = Localidades (API) -limparCacheLocalidadesAPI.message.naoconfigurado=A constante de configuração da URL da API não foi encontrada. \ No newline at end of file +limparCacheLocalidadesAPI.message.naoconfigurado=A constante de configuração da URL da API não foi encontrada. + +#Relatório de Aproveitamento Financeiro +relatorioAproveitamentoFinanceiroController.window.title = Relatório de Aproveitamento Financeiro +relatorioAproveitamentoFinanceiroController.lbDatInicial.value = Data inicial +relatorioAproveitamentoFinanceiroController.lbDatFinal.value = Data final +relatorioAproveitamentoFinanceiroController.lbPuntoVenta.value = Agência +relatorioAproveitamentoFinanceiroController.lbEmpresa.value = Empresa +relatorioAproveitamentoFinanceiroController.btnPesquisa.label = Buscar +relatorioAproveitamentoFinanceiroController.btnLimpar.label = Limpar +relatorioAproveitamentoFinanceiroController.lbNumero.value = Número Agência \ No newline at end of file diff --git a/web/gui/relatorios/filtroRelatorioAproveitamentoFinanceiro.zul b/web/gui/relatorios/filtroRelatorioAproveitamentoFinanceiro.zul new file mode 100644 index 000000000..e481fa8c2 --- /dev/null +++ b/web/gui/relatorios/filtroRelatorioAproveitamentoFinanceiro.zul @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +