From 75724db699bbebc1dccc9cd003f0d2cc30702e8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aristides=20dos=20Reis=20J=C3=BAnior?= Date: Fri, 5 Jan 2024 12:04:23 -0300 Subject: [PATCH] fixes bug#AL-3451 --- pom.xml | 4 +- .../impl/RelatorioDesempenhoPorLinha.java | 242 ++++++++++++ ...latorioDesempenhoPorLinha_pt_BR.properties | 13 + .../RelatorioDesempenhoPorLinha.jasper | Bin 0 -> 38778 bytes .../RelatorioDesempenhoPorLinha.jrxml | 343 +++++++++++++++++ ...RelatorioDesempenhoPorLinhaController.java | 348 ++++++++++++++++++ .../ItemMenuRelatorioDesempenhoPorLinha.java | 26 ++ .../utilerias/menu/menu_original.properties | 1 + .../render/RenderDesempenhoPorLinha.java | 69 ++++ .../RenderDesempenhoPorLinhaTrecho.java | 61 +++ web/WEB-INF/i3-label_en.label | 20 + web/WEB-INF/i3-label_es_MX.label | 21 ++ web/WEB-INF/i3-label_pt_BR.label | 20 + .../filtroRelatorioDesempenhoPorLinha.zul | 170 +++++++++ 14 files changed, 1336 insertions(+), 2 deletions(-) create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDesempenhoPorLinha.java create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioDesempenhoPorLinha_pt_BR.properties create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDesempenhoPorLinha.jasper create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDesempenhoPorLinha.jrxml create mode 100644 src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioDesempenhoPorLinhaController.java create mode 100644 src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioDesempenhoPorLinha.java create mode 100644 src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderDesempenhoPorLinha.java create mode 100644 src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderDesempenhoPorLinhaTrecho.java create mode 100644 web/gui/relatorios/filtroRelatorioDesempenhoPorLinha.zul diff --git a/pom.xml b/pom.xml index 3e0aa151c..bc62f167c 100644 --- a/pom.xml +++ b/pom.xml @@ -4,12 +4,12 @@ 4.0.0 br.com.rjconsultores ventaboletosadm - 1.39.3 + 1.40.0 war 1.29.0 - 1.23.3 + 1.24.0 UTF-8 UTF-8 diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDesempenhoPorLinha.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDesempenhoPorLinha.java new file mode 100644 index 000000000..5cd66c00b --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDesempenhoPorLinha.java @@ -0,0 +1,242 @@ +package com.rjconsultores.ventaboletos.relatorios.impl; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.TreeSet; + +import org.apache.log4j.Logger; + +import com.rjconsultores.ventaboletos.relatorios.utilitarios.ArrayDataSource; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; +import com.rjconsultores.ventaboletos.utilerias.DateUtil; +import com.rjconsultores.ventaboletos.utilerias.MoneyHelper; +import com.rjconsultores.ventaboletos.vo.parada.ParadaVO; +import com.rjconsultores.ventaboletos.vo.ruta.RutaVO; +import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement; + +public class RelatorioDesempenhoPorLinha extends Relatorio { + + private static Logger log = Logger.getLogger(RelatorioDesempenhoPorLinha.class); + + public RelatorioDesempenhoPorLinha(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(); + @SuppressWarnings("unchecked") + Map> mapRutaTrecho = (Map>) parametros.get("MAPRUTATRECHO"); + + if (parametros.get("TRECHOS") != null) { + for (Entry> entry : mapRutaTrecho.entrySet()) { + String sqlCombinacoes = gerarCombinacaoTrechos(parametros); + StringBuilder sql = getSQL(parametros, sqlCombinacoes, entry.getKey()); + NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql.toString()); + setarParametrosDaConsulta(parametros, stmt); + ResultSet rset2 = stmt.executeQuery(); + setarResult(rset2); + } + } else { + StringBuilder sql = getSQL(parametros, null, null); + NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql.toString()); + setarParametrosDaConsulta(parametros, stmt); + ResultSet rset2 = stmt.executeQuery(); + setarResult(rset2); + } + } + + private void setarParametrosDaConsulta(Map parametros, NamedParameterStatement stmt) + throws SQLException { + 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())); + } + + private void setarResult(ResultSet rset2) throws SQLException { + while (rset2.next()) { + Map dataResult = new HashMap(); + + dataResult.put("DATA", rset2.getString("data")); + dataResult.put("PREFIXO", rset2.getString("prefixo")); + dataResult.put("ITINERARIO", rset2.getString("itinerario")); + dataResult.put("HORA", rset2.getString("hora")); + dataResult.put("TARIFASARRECADA", rset2.getBigDecimal("tarifasArrecada")); + dataResult.put("QTDPASSAGENS", rset2.getInt("qtdPassagens")); + dataResult.put("QTDVIAGENS", 1); + dataResult.put("EXTENSAO", rset2.getInt("extensao")); + dataResult.put("TOTALKM", rset2.getInt("extensao")); + dataResult.put("MEDIAKM", MoneyHelper.arredondar(rset2.getBigDecimal("mediaKm"))); + + this.dados.add(dataResult); + } + } + + private StringBuilder getSQL(Map parametros, String sqlCombinacoes, Integer rutaId) { + + StringBuilder sql = new StringBuilder(); + + sql.append(" SELECT "); + sql.append(" c.corrida_id, "); + sql.append(" to_char(c.fechorsalida,'DD/MM/YYYY') as data, "); + sql.append(" to_char(c.fechorsalida, 'HH24:MI') AS hora, "); + sql.append(" r.prefixo prefixo, "); + sql.append(" r.descruta itinerario, "); + sql.append(" coalesce(SUM(cj.preciopagado),0) tarifasArrecada, "); + sql.append(" COUNT(cj.boleto_id) qtdPassagens, "); + sql.append(" tr.cantkmreal extensao, "); + sql.append(" coalesce(SUM(cj.preciopagado),0) / coalesce(tr.cantkmreal,0) as mediaKm "); + sql.append(" FROM "); + sql.append(" corrida c "); + sql.append(" INNER JOIN ruta r ON r.ruta_id = c.ruta_id "); + sql.append(" INNER JOIN parada origem ON ( c.origen_id = origem.parada_id ) "); + sql.append(" INNER JOIN parada destino ON ( c.destino_id = destino.parada_id ) "); + sql.append(" INNER JOIN ruta_combinacion rc ON ( rc.ruta_id = c.ruta_id "); + sql.append(" AND rc.activo = 1 ) "); + sql.append(" INNER JOIN tramo tr ON ( tr.tramo_id = rc.tramo_id "); + sql.append(" AND tr.origen_id = c.origen_id "); + sql.append(" AND tr.destino_id = c.destino_id ) "); + 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 ( "); + sql.append(" SELECT "); + sql.append(" co.corrida_id corrida_id, "); + sql.append(" co.feccorrida feccorrida, "); + sql.append(" bo.boleto_id, "); + sql.append(" bo.preciopagado "); + sql.append(" FROM "); + sql.append(" corrida co "); + sql.append(" INNER JOIN boleto bo ON co.corrida_id = bo.corrida_id "); + sql.append(" AND co.feccorrida = bo.feccorrida "); + sql.append(" AND bo.activo = 1 "); + sql.append(" INNER JOIN ruta_combinacion rc ON rc.ruta_id = co.ruta_id "); + sql.append(" INNER JOIN tramo t ON rc.tramo_id = t.tramo_id "); + sql.append(" AND t.origen_id = bo.origen_id "); + sql.append(" AND t.destino_id = bo.destino_id "); + sql.append(" INNER JOIN ruta r ON r.ruta_id = co.ruta_id "); + sql.append(" INNER JOIN ruta_combinacion rc2 ON ( rc2.ruta_id = r.ruta_id "); + sql.append(" AND rc2.activo = 1 ) "); + sql.append(" INNER JOIN tramo tr ON ( tr.tramo_id = rc2.tramo_id "); + sql.append(" AND tr.origen_id = co.origen_id "); + sql.append(" AND tr.destino_id = co.destino_id ) "); + sql.append(" WHERE "); + sql.append(" co.activo NOT IN ( 0, 2 ) "); + sql.append(" AND rc.activo = 1 "); + sql.append(" AND t.activo = 1 "); + sql.append(" AND bo.indstatusboleto != 'S' "); + sql.append(" AND bo.motivocancelacion_id IS NULL "); +// sql.append(" AND bo.categoria_id <> :crianca_id "); + sql.append(" and co.FECCORRIDA >= :DATA_INICIAL "); + sql.append(" and co.FECCORRIDA <= :DATA_FINAL "); + sql.append(" GROUP BY "); + sql.append(" co.corrida_id, "); + sql.append(" co.feccorrida, "); + sql.append(" bo.boleto_id, "); + sql.append(" bo.preciopagado "); + sql.append(" ) cj ON ( cj.corrida_id = c.corrida_id "); + sql.append(" AND cj.feccorrida = c.feccorrida ) "); + sql.append(" WHERE "); + sql.append(" m.EMPRESA_ID = :EMPRESA_ID "); + sql.append(" and c.FECCORRIDA >= :DATA_INICIAL "); + sql.append(" and c.FECCORRIDA <= :DATA_FINAL "); + + if (parametros.get("LINHAS") != null && !possuiFiltroTodos("LINHAS") + && parametros.get("TRECHOS") != null) { + sql.append(" and c.ruta_id IN (" + rutaId + ")"); + } else if (parametros.get("LINHAS") != null && !possuiFiltroTodos("LINHAS")) { + sql.append(" and c.ruta_id IN (" + parametros.get("LINHAS").toString() + ")"); + } + if (sqlCombinacoes != null && !sqlCombinacoes.isEmpty()) { + sql.append(" " + sqlCombinacoes + " "); + } + + sql.append(" GROUP BY "); + sql.append(" c.corrida_id, "); + sql.append(" c.fechorsalida, "); + sql.append(" to_char(c.fechorsalida, 'HH24:MI'), "); + sql.append(" r.descruta, "); + sql.append(" r.prefixo, "); + sql.append(" tr.cantkmreal "); + sql.append(" order by c.fechorsalida asc "); + + return sql; + } + + }); + } + + @Override + protected void processaParametros() throws Exception { + + } + + private String gerarCombinacaoTrechos(Map parametros) { + + @SuppressWarnings("unchecked") + List trechos = (List) parametros.get("TRECHOS"); + + List listParada1 = new ArrayList<>(); + List listParada2 = new ArrayList<>(); + StringBuilder sql = new StringBuilder(); + + for (RutaVO tramoVO : trechos) { + listParada1.add(new ParadaVO(tramoVO.getOrigenId(), tramoVO.getRutaId().intValue())); + } + + listParada2.addAll(listParada1); + + if (trechos != null) { + + LinkedList> lists = new LinkedList>(); + + lists.add(listParada1); + lists.add(listParada2); + + Set combinacoes = new TreeSet(); + + sql.append("AND ("); + for (ParadaVO s : lists.removeFirst()) + combinacoes.add(s.getParadaId().toString()); + + while (!lists.isEmpty()) { + List next = lists.removeFirst(); + Set novasCombinacoes = new TreeSet(); + for (String s1 : combinacoes) { + for (ParadaVO s2 : next) { + novasCombinacoes.add(s1 + ";" + s2.getParadaId()); + sql.append("(c.origen_id = ").append(s1).append(" AND c.destino_id = ").append(s2.getParadaId()) + .append(" and c.ruta_id = " + s2.getRutaId() + " ) OR "); + } + } + combinacoes = novasCombinacoes; + } + + // Remover o último " OR " da string + if (combinacoes.size() > 0) { + sql.delete(sql.length() - 4, sql.length()); + } + sql.append(")"); + + } + + return sql.toString(); + + } + +} diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioDesempenhoPorLinha_pt_BR.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioDesempenhoPorLinha_pt_BR.properties new file mode 100644 index 000000000..f39ccac7e --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioDesempenhoPorLinha_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=Impressor 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/RelatorioDesempenhoPorLinha.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDesempenhoPorLinha.jasper new file mode 100644 index 0000000000000000000000000000000000000000..17b8526b6bdc92cfaa4749af3b21ba5948d4180a GIT binary patch literal 38778 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 fU?pG`1HS_4=|hq8{|RN+#bg + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioDesempenhoPorLinhaController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioDesempenhoPorLinhaController.java new file mode 100644 index 000000000..d18307ff3 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioDesempenhoPorLinhaController.java @@ -0,0 +1,348 @@ +package com.rjconsultores.ventaboletos.web.gui.controladores.relatorios; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import javax.sql.DataSource; + +import org.apache.commons.lang.StringUtils; +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.zk.ui.event.EventListener; +import org.zkoss.zul.Button; +import org.zkoss.zul.Comboitem; +import org.zkoss.zul.Datebox; +import org.zkoss.zul.Listcell; +import org.zkoss.zul.Listitem; +import org.zkoss.zul.ListitemRenderer; +import org.zkoss.zul.Radiogroup; +import org.zkoss.zul.Textbox; + +import com.rjconsultores.ventaboletos.entidad.Empresa; +import com.rjconsultores.ventaboletos.entidad.OrgaoConcedente; +import com.rjconsultores.ventaboletos.entidad.Ruta; +import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioDesempenhoPorLinha; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; +import com.rjconsultores.ventaboletos.service.RutaService; +import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado; +import com.rjconsultores.ventaboletos.vo.ruta.RutaVO; +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.RenderDesempenhoPorLinha; +import com.rjconsultores.ventaboletos.web.utilerias.render.RenderDesempenhoPorLinhaTrecho; + +@Controller("relatorioDesempenhoPorLinhaController") +@Scope("prototype") +public class RelatorioDesempenhoPorLinhaController extends MyGenericForwardComposer { + + private static final long serialVersionUID = 1L; + private static Logger log = Logger.getLogger(RelatorioDesempenhoPorLinhaController.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 trechoList; + private MyListbox linhaListSelList; + private Textbox txtPalavraPesquisaLinha; + private ArrayList lsNumLinha = new ArrayList(); + private Radiogroup rgLayout; + private Map> mapRutaTrecho = new HashMap<>(); + + @Override + public void doAfterCompose(Component comp) throws Exception { + super.doAfterCompose(comp); + + lsEmpresa = UsuarioLogado.getUsuarioLogado().getEmpresa(); + linhaList.setItemRenderer(new RenderDesempenhoPorLinha()); + renderizarListRuta(); + trechoList.setItemRenderer(new RenderDesempenhoPorLinhaTrecho()); + + } + + private void renderizarListRuta() { + linhaListSelList.setItemRenderer(new ListitemRenderer() { + @Override + public void render(Listitem lstm, Object o) throws Exception { + + Ruta ruta = (Ruta) o; + if (ruta == null) { + return; + } + + Listcell lc = new Listcell(ruta.getNumRuta() != null ? 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")); + List lsRutaVOAux = new ArrayList<>(trechoList.getListData()); + Ruta ruta = (Ruta) listItem.getAttribute("data"); + for (RutaVO rutaVO : (List) trechoList.getListData()) { + if (StringUtils.isNotBlank(ruta.getNumRuta()) && StringUtils.isNotBlank(rutaVO.getNumRuta()) + && ruta.getNumRuta().equals(rutaVO.getNumRuta())) { + lsRutaVOAux.remove(rutaVO); + mapRutaTrecho.remove(rutaVO.getRutaId().intValue()); + } + } + trechoList.setData(lsRutaVOAux); + } + }); + lc.appendChild(btn); + lstm.setAttribute("data", ruta); + } + }); + } + + public void carregarTramos(Ruta rutaSelecionada) { + + List lsRutaVO = rutaService.buscaRutaParadas(rutaSelecionada.getRutaId()); + RutaVO ultimaRuta = lsRutaVO.get(lsRutaVO.size() - 1); + RutaVO novaRuta = new RutaVO(ultimaRuta.getRutaId(), ultimaRuta.getNumRuta(), ultimaRuta.getPrefixo(), + ultimaRuta.getDescruta(), ultimaRuta.getDescDestino(), ultimaRuta.getNumSecuencia(), + ultimaRuta.getDestinoId(), ultimaRuta.getDestinoId()); + novaRuta.setDescOrigem(novaRuta.getDescParada()); + lsRutaVO.add(novaRuta); + + mapRutaTrecho.put(rutaSelecionada.getRutaId(), lsRutaVO); + List lsRutaVOAux = new ArrayList(); + lsRutaVOAux.addAll(trechoList.getListData()); + lsRutaVOAux.addAll(lsRutaVO); + trechoList.setData(lsRutaVOAux); + + } + + public void actualizarDados(List listaRutaVO) { + + } + + public List getLsEmpresa() { + return lsEmpresa; + } + + public void setLsEmpresa(List lsEmpresa) { + this.lsEmpresa = lsEmpresa; + } + + public void onDoubleClick$linhaList(Event ev) { + Ruta rutaAux = (Ruta) linhaList.getSelected(); + if (rutaAux == null) { + return; + } + linhaListSelList.addItemNovo(rutaAux); + + carregarTramos(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); + } + } else { + Collections.sort(linhaList.getListData(), new Comparator() { + @Override + public int compare(Ruta m1, Ruta m2) { + return m1.getDescruta().compareTo(m2.getDescruta()); + } + }); + } + } + + 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 { + + if (rgLayout.getSelectedItem().getValue().equals("EMISSAO_LINHA")) { + executarRelatorioLinha(); + } else { + executarRelatorioTrecho(); + } + } + + private void executarRelatorioLinha() throws Exception { + + 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("relatorioDesempenhoPorLinhaController.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 relatorio = new RelatorioDesempenhoPorLinha(parametros, dataSourceRead.getConnection()); + + Map args = new HashMap(); + args.put("relatorio", relatorio); + + openWindow("/component/reportView.zul", Labels.getLabel("relatorioDesempenhoPorLinhaController.window.title"), + args, MODAL); + } + + private void executarRelatorioTrecho() throws Exception { + + Map parametros = new HashMap(); + StringBuilder filtro = new StringBuilder(); + List lista = new ArrayList<>(); + Map> mapRutaTrechoAux = new HashMap<>(); + + for (Entry> entry : mapRutaTrecho.entrySet()) { + List listaAux = entry.getValue(); + for (RutaVO rutaVO2 : (List) trechoList.getListData()) { + for (RutaVO rutaVO : listaAux) { + if (rutaVO.getRutaId().equals(rutaVO2.getRutaId())) { + lista.add(rutaVO2); + break; + } + } + } + mapRutaTrechoAux.put(entry.getKey(), lista); + lista = new ArrayList<>(); + } + + 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("relatorioDesempenhoPorLinhaController.window.title")); + parametros.put("USUARIO", UsuarioLogado.getUsuarioLogado().getNombusuario()); + parametros.put("TRECHOS", trechoList.getListData()); + parametros.put("MAPRUTATRECHO", mapRutaTrechoAux); + + 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 relatorio = new RelatorioDesempenhoPorLinha(parametros, dataSourceRead.getConnection()); + + Map args = new HashMap(); + args.put("relatorio", relatorio); + + openWindow("/component/reportView.zul", Labels.getLabel("relatorioDesempenhoPorLinhaController.window.title"), + args, MODAL); + } +} \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioDesempenhoPorLinha.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioDesempenhoPorLinha.java new file mode 100644 index 000000000..4b57fd3f4 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioDesempenhoPorLinha.java @@ -0,0 +1,26 @@ +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 ItemMenuRelatorioDesempenhoPorLinha extends DefaultItemMenuSistema { + + public ItemMenuRelatorioDesempenhoPorLinha() { + super("indexController.mniRelatorioDesempenhoPorLinha.label"); + } + + @Override + public String getClaveMenu() { + return "COM.RJCONSULTORES.ADMINISTRACION.GUI.RELATORIOS.MENU.RELATORIODESEMPENHOPORLINHA"; + } + + @Override + public void ejecutar() { + PantallaUtileria.openWindow("/gui/relatorios/filtroRelatorioDesempenhoPorLinha.zul", + Labels.getLabel("relatorioDesempenhoPorLinhaController.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 6fcb97e45..f4c28624f 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 @@ -251,6 +251,7 @@ analitico.gerenciais.financeiro.relatorioOperacionalFinanceiro=com.rjconsultores analitico.gerenciais.financeiro.relatorioResumoVendaOrgaoConcedente=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioResumoVendaOrgaoConcedente analitico.gerenciais.financeiro.relatorioVendasConexaoRuta=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioVendasConexaoRuta analitico.gerenciais.financeiro.relatorioVendaBilhetePorEmpresaAutorizadora=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuVendaBilhetePorEmpresaAutorizadora +analitico.gerenciais.financeiro.relatorioDesempenhoPorLinha=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioDesempenhoPorLinha 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/RenderDesempenhoPorLinha.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderDesempenhoPorLinha.java new file mode 100644 index 000000000..bdc073394 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderDesempenhoPorLinha.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 RenderDesempenhoPorLinha implements ListitemRenderer { + + @Override + public void render(Listitem lstm, Object o) throws Exception { + Ruta ruta = (Ruta) o; + + Listcell lc = new Listcell(ruta.getNumRuta() != null ? 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/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderDesempenhoPorLinhaTrecho.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderDesempenhoPorLinhaTrecho.java new file mode 100644 index 000000000..02a8976ee --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderDesempenhoPorLinhaTrecho.java @@ -0,0 +1,61 @@ +/** + * + */ +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.vo.ruta.RutaVO; +import com.rjconsultores.ventaboletos.web.utilerias.MyListbox; + +/** + * @author Wallace + * + */ +public class RenderDesempenhoPorLinhaTrecho implements ListitemRenderer { + + @Override + public void render(Listitem lstm, Object o) throws Exception { + RutaVO ruta = (RutaVO) 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); + + lc = new Listcell(ruta.getDescOrigem()); + 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((RutaVO) listItem.getAttribute("data")); + } + }); + + lc.appendChild(btn); + + lstm.setAttribute("data", ruta); + } + +} diff --git a/web/WEB-INF/i3-label_en.label b/web/WEB-INF/i3-label_en.label index e9e1c8216..f532540ca 100644 --- a/web/WEB-INF/i3-label_en.label +++ b/web/WEB-INF/i3-label_en.label @@ -319,6 +319,7 @@ indexController.mniRelatoriosOperacionais.mniRelatorioMudancas.Pricing.label = R indexController.mniRelatorios.label = Relatórios indexController.mniRelatorioAproveitamento.label = Aproveitamento +indexController.mniRelatorioDesempenhoPorLinha.label = Desempenho por Linha indexController.mniRelatorioArquivoBGM.label = Arquivo BGM indexController.mniRelatorioReceitasDespesasDiversas.label=Receitas/Despesas Diversas e Depósitos Bancários indexController.mniLogReceitasDespesasDiversas.label=Log Receitas/Despesas Diversas e Depósitos Bancários @@ -599,6 +600,25 @@ relatorioKmProgramadaController.lbLote.value = Lote relatorioKmProgramadaController.lbAte.value = até relatorioKmProgramadaController.lbGrupoRuta.label = Grupo de Linhas +#DesempenhoPorLinha +relatorioDesempenhoPorLinhaController.window.title = Relatório de Desempenho por linha +relatorioDesempenhoPorLinhaController.window.title = Relatório de Aproveitamento Financeiro +relatorioDesempenhoPorLinhaController.lbDatInicial.value = Data inicial +relatorioDesempenhoPorLinhaController.lbDatFinal.value = Data final +relatorioDesempenhoPorLinhaController.lbPuntoVenta.value = Agência +relatorioDesempenhoPorLinhaController.lbEmpresa.value = Empresa +relatorioDesempenhoPorLinhaController.btnPesquisa.label = Buscar +relatorioDesempenhoPorLinhaController.btnLimpar.label = Limpar +relatorioDesempenhoPorLinhaController.lbNumero.value = Número Agência +relatorioDesempenhoPorLinhaController.window.title = Relatório de Aproveitamento Financeiro +relatorioDesempenhoPorLinhaController.linha = Relatório por Linha +relatorioDesempenhoPorLinhaController.trecho = Relatório por Trecho +relatorioDesempenhoPorLinhaController.lbOrigem.value = Origem +relatorioDesempenhoPorLinhaController.lbDestino.value = Destino +relatorioDesempenhoPorLinhaController.lbNumRuta.label = Num. Linha +relatorioDesempenhoPorLinhaController.lbPrefixo.label = Prefixo +relatorioDesempenhoPorLinhaController.lbOrgao.label = Orgão Concedente + #Aproveitamento relatorioAproveitamentoController.window.title = Relatório de Aproveitamento relatorioAproveitamentoController.lbFecCorrida.value = Data Serviço diff --git a/web/WEB-INF/i3-label_es_MX.label b/web/WEB-INF/i3-label_es_MX.label index c359c0c12..42eef5926 100644 --- a/web/WEB-INF/i3-label_es_MX.label +++ b/web/WEB-INF/i3-label_es_MX.label @@ -306,6 +306,7 @@ indexController.mniRelatoriosOperacionais.mniRelatorioMudancas.Pricing.label = R indexController.mniRelatorios.label = Reportes indexController.mniRelatorioAproveitamento.label = Aprovechamiento +indexController.mniRelatorioDesempenhoPorLinha.label = Desempenho por Linha indexController.mniRelatorioArquivoBGM.label = Arquivo BGM indexController.mniRelatorioReceitasDespesasDiversas.label=Receitas/Despesas Diversas e Depósitos Bancários indexController.mniLogReceitasDespesasDiversas.label=Log Receitas/Despesas Diversas e Depósitos Bancários @@ -532,6 +533,26 @@ relatorioResumoLinhasController.lbAte.value = Hasta relatorioResumoLinhasController.lblSumarizar.value = Sumarizar por linhas (Completo) relatorioResumoLinhasController.lblSimplificadoSumarizado.value = Sumarizar por linhas (Simplificado) + +#DesempenhoPorLinha +relatorioDesempenhoPorLinhaController.window.title = Relatório de Desempenho por linha +relatorioDesempenhoPorLinhaController.window.title = Relatório de Aproveitamento Financeiro +relatorioDesempenhoPorLinhaController.lbDatInicial.value = Data inicial +relatorioDesempenhoPorLinhaController.lbDatFinal.value = Data final +relatorioDesempenhoPorLinhaController.lbPuntoVenta.value = Agência +relatorioDesempenhoPorLinhaController.lbEmpresa.value = Empresa +relatorioDesempenhoPorLinhaController.btnPesquisa.label = Buscar +relatorioDesempenhoPorLinhaController.btnLimpar.label = Limpar +relatorioDesempenhoPorLinhaController.lbNumero.value = Número Agência +relatorioDesempenhoPorLinhaController.window.title = Relatório de Aproveitamento Financeiro +relatorioDesempenhoPorLinhaController.linha = Relatório por Linha +relatorioDesempenhoPorLinhaController.trecho = Relatório por Trecho +relatorioDesempenhoPorLinhaController.lbOrigem.value = Origem +relatorioDesempenhoPorLinhaController.lbDestino.value = Destino +relatorioDesempenhoPorLinhaController.lbNumRuta.label = Num. Linha +relatorioDesempenhoPorLinhaController.lbPrefixo.label = Prefixo +relatorioDesempenhoPorLinhaController.lbOrgao.label = Orgão Concedente + #Aproveitamento relatorioAproveitamentoController.window.title = Reporte de ocupación relatorioAproveitamentoController.lbFecCorrida.value = Fecha servicio diff --git a/web/WEB-INF/i3-label_pt_BR.label b/web/WEB-INF/i3-label_pt_BR.label index 60780ebcb..940a00ee5 100644 --- a/web/WEB-INF/i3-label_pt_BR.label +++ b/web/WEB-INF/i3-label_pt_BR.label @@ -319,6 +319,7 @@ indexController.mniRelatoriosOperacionais.mniRelatorioMudancas.Pricing.label = R indexController.mniRelatorios.label = Relatórios indexController.mniRelatorioAproveitamento.label = Aproveitamento +indexController.mniRelatorioDesempenhoPorLinha.label = Desempenho por Linha indexController.mniRelatorioArquivoBGM.label = Arquivo BGM indexController.mniRelatorioReceitasDespesasDiversas.label=Receitas/Despesas Diversas e Depósitos Bancários indexController.mniLogReceitasDespesasDiversas.label=Log Receitas/Despesas Diversas e Depósitos Bancários @@ -599,6 +600,25 @@ relatorioKmProgramadaController.lbLote.value = Lote relatorioKmProgramadaController.lbAte.value = até relatorioKmProgramadaController.lbGrupoRuta.label = Grupo de Linhas +#DesempenhoPorLinha +relatorioDesempenhoPorLinhaController.window.title = Relatório de Desempenho por linha +relatorioDesempenhoPorLinhaController.window.title = Relatório de Aproveitamento Financeiro +relatorioDesempenhoPorLinhaController.lbDatInicial.value = Data inicial +relatorioDesempenhoPorLinhaController.lbDatFinal.value = Data final +relatorioDesempenhoPorLinhaController.lbPuntoVenta.value = Agência +relatorioDesempenhoPorLinhaController.lbEmpresa.value = Empresa +relatorioDesempenhoPorLinhaController.btnPesquisa.label = Buscar +relatorioDesempenhoPorLinhaController.btnLimpar.label = Limpar +relatorioDesempenhoPorLinhaController.lbNumero.value = Número Agência +relatorioDesempenhoPorLinhaController.window.title = Relatório de Aproveitamento Financeiro +relatorioDesempenhoPorLinhaController.linha = Relatório por Linha +relatorioDesempenhoPorLinhaController.trecho = Relatório por Trecho +relatorioDesempenhoPorLinhaController.lbOrigem.value = Origem +relatorioDesempenhoPorLinhaController.lbDestino.value = Destino +relatorioDesempenhoPorLinhaController.lbNumRuta.label = Num. Linha +relatorioDesempenhoPorLinhaController.lbPrefixo.label = Prefixo +relatorioDesempenhoPorLinhaController.lbOrgao.label = Orgão Concedente + #Aproveitamento relatorioAproveitamentoController.window.title = Relatório de Aproveitamento relatorioAproveitamentoController.lbFecCorrida.value = Data Serviço diff --git a/web/gui/relatorios/filtroRelatorioDesempenhoPorLinha.zul b/web/gui/relatorios/filtroRelatorioDesempenhoPorLinha.zul new file mode 100644 index 000000000..a8cd61e54 --- /dev/null +++ b/web/gui/relatorios/filtroRelatorioDesempenhoPorLinha.zul @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +