diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioOrigemDestino.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioOrigemDestino.java index 995108a9e..2fc29dc43 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioOrigemDestino.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioOrigemDestino.java @@ -1,9 +1,18 @@ package com.rjconsultores.ventaboletos.relatorios.impl; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; import java.util.Map; import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.beans.PesoOperacional; public class RelatorioOrigemDestino extends Relatorio { @@ -22,9 +31,101 @@ public class RelatorioOrigemDestino extends Relatorio { String sql = getSQL(empresaIds, corridasIds, dataDe, dataAte, bilhetesGratuitos, trechosSemMovimento); + List lsPesoOperacionalRelatorio = getPesoOperacional(corridasIds, dataDe, dataAte); + getParametros().put("lsPesoOperacionalRelatorio", lsPesoOperacionalRelatorio); getParametros().put("SQL", sql); } + private List getPesoOperacional(String corridasIds, String dataDe, String dataAte) throws SQLException { + StringBuilder sql = new StringBuilder(); + sql.append(" SELECT "); + sql.append(" CA.CORRIDA_ID, "); + sql.append(" O.CVEPARADA CVE_ORIGEM, "); + sql.append(" O.DESCPARADA ORIGEM, "); + sql.append(" D.CVEPARADA CVE_DESTINO, "); + sql.append(" D.DESCPARADA DESTINO, "); + sql.append(" SUM(CA.PRECIOPAGADO) RECEITA "); + sql.append(" FROM CAJA CA INNER JOIN PARADA O ON O.PARADA_ID = CA.ORIGEN_ID "); + sql.append(" INNER JOIN PARADA D ON D.PARADA_ID = CA.DESTINO_ID "); + sql.append(" WHERE 1=1 "); + if (!corridasIds.equals("Todas")) { + sql.append(" AND CA.CORRIDA_ID IN (").append(corridasIds).append(")"); + } + sql.append(" AND CA.FECHORVENTA BETWEEN TO_DATE('").append(dataDe).append("','DD/MM/YYYY HH24:MI:SS') AND TO_DATE('").append(dataAte).append("','DD/MM/YYYY HH24:MI:SS') "); + sql.append(" GROUP BY "); + sql.append(" CA.CORRIDA_ID, "); + sql.append(" O.CVEPARADA, "); + sql.append(" O.DESCPARADA, "); + sql.append(" D.CVEPARADA, "); + sql.append(" D.DESCPARADA "); + + Connection conexao = getConexao(); + + PreparedStatement stmt = null; + stmt = conexao.prepareStatement(sql.toString()); + + ResultSet rset = null; + rset = stmt.executeQuery(); + + Map mapReceitaSaida = new HashMap(); + Map mapReceitaChegada = new HashMap(); + List lsParadas = new ArrayList(); + BigDecimal totalReceita = BigDecimal.ZERO; + while (rset.next()) { + BigDecimal receita = rset.getBigDecimal("RECEITA"); + totalReceita = totalReceita.add(receita); + + String cveOrigem = rset.getString("CVE_ORIGEM"); + String origem = rset.getString("ORIGEM"); + String chaveOrigem = cveOrigem + " - " + origem; + + String cveDestino = rset.getString("CVE_DESTINO"); + String destino = rset.getString("DESTINO"); + String chaveDestino = cveDestino + " - " + destino; + + if (!lsParadas.contains(chaveOrigem)) { + lsParadas.add(chaveOrigem); + } + + if (!lsParadas.contains(chaveDestino)) { + lsParadas.add(chaveDestino); + } + + BigDecimal receitaSaida = mapReceitaSaida.get(chaveOrigem); + if (receitaSaida != null) { + mapReceitaSaida.put(chaveOrigem, receita.add(receitaSaida)); + } else { + mapReceitaSaida.put(chaveOrigem, receita); + } + + BigDecimal receitaChegada = mapReceitaChegada.get(chaveDestino); + if (receitaChegada != null) { + mapReceitaChegada.put(chaveDestino, receita.add(receitaChegada)); + } else { + mapReceitaChegada.put(chaveDestino, receita); + } + } + + List lsPesoOperacionalRelatorio = new ArrayList(); + for (String parada : lsParadas) { + BigDecimal receitaSaida = mapReceitaSaida.get(parada) == null ? BigDecimal.ZERO : mapReceitaSaida.get(parada); + BigDecimal receitaChegada = mapReceitaChegada.get(parada) == null ? BigDecimal.ZERO : mapReceitaChegada.get(parada); + BigDecimal soma = receitaSaida.add(receitaChegada); + BigDecimal peso = soma.divide(totalReceita, 2, RoundingMode.HALF_EVEN); + + PesoOperacional pesoOperacional = new PesoOperacional(); + pesoOperacional.setLocalidade(parada); + pesoOperacional.setReceitaSaida(receitaSaida); + pesoOperacional.setReceitaChegada(receitaChegada); + pesoOperacional.setSoma(soma); + pesoOperacional.setPeso(peso); + + lsPesoOperacionalRelatorio.add(pesoOperacional); + } + + return lsPesoOperacionalRelatorio; + } + private String getSQL(String empresaIds, String corridasIds, String dataDe, String dataAte, Boolean bilhetesGratuitos, Boolean trechosSemMovimento) { diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioOrigemDestino.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioOrigemDestino.jasper index e608a2c0f..ecc8f102c 100644 Binary files a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioOrigemDestino.jasper and b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioOrigemDestino.jasper differ diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioOrigemDestino.jrxml b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioOrigemDestino.jrxml index a6b561095..1949d4ee9 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioOrigemDestino.jrxml +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioOrigemDestino.jrxml @@ -3,12 +3,19 @@ - + + + + + + + + @@ -238,7 +245,7 @@ - + @@ -397,8 +404,85 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/beans/PesoOperacional.java b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/beans/PesoOperacional.java new file mode 100644 index 000000000..6ef5761bc --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/beans/PesoOperacional.java @@ -0,0 +1,51 @@ +package com.rjconsultores.ventaboletos.relatorios.utilitarios.beans; + +import java.math.BigDecimal; + +public class PesoOperacional { + private String localidade; + private BigDecimal receitaSaida; + private BigDecimal receitaChegada; + private BigDecimal soma; + private BigDecimal peso; + + public String getLocalidade() { + return localidade; + } + + public void setLocalidade(String localidade) { + this.localidade = localidade; + } + + public BigDecimal getReceitaSaida() { + return receitaSaida; + } + + public void setReceitaSaida(BigDecimal receitaSaida) { + this.receitaSaida = receitaSaida; + } + + public BigDecimal getReceitaChegada() { + return receitaChegada; + } + + public void setReceitaChegada(BigDecimal receitaChegada) { + this.receitaChegada = receitaChegada; + } + + public BigDecimal getSoma() { + return soma; + } + + public void setSoma(BigDecimal soma) { + this.soma = soma; + } + + public BigDecimal getPeso() { + return peso; + } + + public void setPeso(BigDecimal peso) { + this.peso = peso; + } +} diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioLinhaOperacionalController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioLinhaOperacionalController.java index ac1270bd8..0650558e7 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioLinhaOperacionalController.java +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioLinhaOperacionalController.java @@ -39,6 +39,7 @@ import com.rjconsultores.ventaboletos.web.utilerias.MyListbox; import com.rjconsultores.ventaboletos.web.utilerias.paginacion.HibernateSearchObject; import com.rjconsultores.ventaboletos.web.utilerias.paginacion.PagedListWrapper; import com.rjconsultores.ventaboletos.web.utilerias.render.RenderRelatorioLinhaOperacionalRuta; +import com.rjconsultores.ventaboletos.web.utilerias.render.RenderRelatorioLinhaOperacionalRutaSelecionadas; @Controller("relatorioLinhaOperacionalController") @Scope("prototype") @@ -56,6 +57,7 @@ public class RelatorioLinhaOperacionalController extends MyGenericForwardCompose private Datebox datFinal; private Paging pagingRuta; private MyListbox rutaList; + private MyListbox rutaSelList; private Textbox txtPalavraPesquisa; private Combobox cmbEmpresa; private Combobox cmbEspecie; @@ -89,6 +91,7 @@ public class RelatorioLinhaOperacionalController extends MyGenericForwardCompose super.doAfterCompose(comp); rutaList.setItemRenderer(new RenderRelatorioLinhaOperacionalRuta()); + rutaSelList.setItemRenderer(new RenderRelatorioLinhaOperacionalRutaSelecionadas()); } private void limparPesquisa() { @@ -127,8 +130,19 @@ public class RelatorioLinhaOperacionalController extends MyGenericForwardCompose executarPesquisa(); } + public void onDoubleClick$rutaSelList(Event ev) { + Ruta ruta = (Ruta) rutaSelList.getSelected(); + rutaSelList.removeItem(ruta); + } + + public void onDoubleClick$rutaList(Event ev) { + Ruta ruta = (Ruta) rutaList.getSelected(); + rutaSelList.addItemNovo(ruta); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) private String getDescRutasSelecionadas() { - List lsRutasSelecionadas = new ArrayList(Arrays.asList(rutaList.getSelectedsItens().toArray(new Ruta[rutaList.getSelectedsItens().size()]))); + List lsRutasSelecionadas = new ArrayList(Arrays.asList(rutaSelList.getData())); StringBuilder selecionadas = new StringBuilder(""); if (!lsRutasSelecionadas.isEmpty()) { for (Ruta ruta : lsRutasSelecionadas) { @@ -139,12 +153,9 @@ public class RelatorioLinhaOperacionalController extends MyGenericForwardCompose return selecionadas.toString(); } - public void onClick$bbPesquisaPuntoVenta(Event ev) { - bbPesquisaPuntoVenta.setText(getDescRutasSelecionadas()); - } - + @SuppressWarnings({ "unchecked", "rawtypes" }) public void onClick$btnExecutarRelatorio(Event ev) throws InterruptedException, SQLException { - List lsRutasSelecionadas = new ArrayList(Arrays.asList(rutaList.getSelectedsItens().toArray(new Ruta[rutaList.getSelectedsItens().size()]))); + List lsRutasSelecionadas = new ArrayList(Arrays.asList(rutaSelList.getData())); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); Date dataDe = datInicial.getValue(); diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioOrigemDestinoController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioOrigemDestinoController.java index a19ff696d..55c1d0714 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioOrigemDestinoController.java +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioOrigemDestinoController.java @@ -36,6 +36,7 @@ import com.rjconsultores.ventaboletos.web.utilerias.MyListbox; import com.rjconsultores.ventaboletos.web.utilerias.paginacion.HibernateSearchObject; import com.rjconsultores.ventaboletos.web.utilerias.paginacion.PagedListWrapper; import com.rjconsultores.ventaboletos.web.utilerias.render.RenderRelatorioOrigemDestinoCorrida; +import com.rjconsultores.ventaboletos.web.utilerias.render.RenderRelatorioOrigemDestinoCorridaSelecionadas; import com.trg.search.Filter; @Controller("relatorioOrigemDestinoController") @@ -55,6 +56,7 @@ public class RelatorioOrigemDestinoController extends MyGenericForwardComposer { private Intbox txtCorridaId; private Paging pagingCorrida; private MyListbox corridaList; + private MyListbox corridaSelList; private Combobox cmbEmpresa; private Bandbox bbPesquisaCorrida; private Checkbox chkBilhetesGratuitos; @@ -74,6 +76,7 @@ public class RelatorioOrigemDestinoController extends MyGenericForwardComposer { super.doAfterCompose(comp); corridaList.setItemRenderer(new RenderRelatorioOrigemDestinoCorrida()); + corridaSelList.setItemRenderer(new RenderRelatorioOrigemDestinoCorridaSelecionadas()); } private void executarPesquisa() { @@ -112,21 +115,19 @@ public class RelatorioOrigemDestinoController extends MyGenericForwardComposer { executarPesquisa(); } - public void onClick$bbPesquisaCorrida(Event ev) { - List lsCorridasSelecionadas = new ArrayList(Arrays.asList(corridaList.getSelectedsItens().toArray(new Corrida[corridaList.getSelectedsItens().size()]))); - - if (!lsCorridasSelecionadas.isEmpty()) { - StringBuilder selecionadas = new StringBuilder(""); - for (Corrida corrida : lsCorridasSelecionadas) { - selecionadas.append(corrida.getId().getCorridaId()).append(", "); - } - - bbPesquisaCorrida.setText(selecionadas.toString()); - } + public void onDoubleClick$corridaSelList(Event ev) { + Corrida corrida = (Corrida) corridaSelList.getSelected(); + corridaSelList.removeItem(corrida); } + public void onDoubleClick$corridaList(Event ev) { + Corrida corrida = (Corrida) corridaList.getSelected(); + corridaSelList.addItemNovo(corrida); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) public void onClick$btnExecutarRelatorio(Event ev) throws Exception { - List lsCorridasSelecionadas = new ArrayList(Arrays.asList(corridaList.getSelectedsItens().toArray(new Corrida[corridaList.getSelectedsItens().size()]))); + List lsCorridasSelecionadas = new ArrayList(Arrays.asList(corridaSelList.getData())); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); Date dataDe = datInicial.getValue(); @@ -157,7 +158,6 @@ public class RelatorioOrigemDestinoController extends MyGenericForwardComposer { } } parametros.put("EMPRESA_IDS", empresaId); - // parametros.put("EMPRESAS", empresas.substring(1, empresas.length())); parametros.put("EMPRESAS", empresas); String corridaIds = ""; diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderRelatorioLinhaOperacionalRutaSelecionadas.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderRelatorioLinhaOperacionalRutaSelecionadas.java new file mode 100644 index 000000000..f1a21a4a4 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderRelatorioLinhaOperacionalRutaSelecionadas.java @@ -0,0 +1,45 @@ +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.Ruta; +import com.rjconsultores.ventaboletos.web.utilerias.MyListbox; + +public class RenderRelatorioLinhaOperacionalRutaSelecionadas implements ListitemRenderer { + + public void render(Listitem lstm, Object o) throws Exception { + Ruta puntoVenta = (Ruta) o; + + Listcell lc = new Listcell(puntoVenta.getRutaId().toString()); + lc.setParent(lstm); + + lc = new Listcell(puntoVenta.getDescruta()); + 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", puntoVenta); + } +} diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderRelatorioOrigemDestinoCorridaSelecionadas.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderRelatorioOrigemDestinoCorridaSelecionadas.java new file mode 100644 index 000000000..3df9919e8 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderRelatorioOrigemDestinoCorridaSelecionadas.java @@ -0,0 +1,55 @@ +package com.rjconsultores.ventaboletos.web.utilerias.render; + +import java.text.SimpleDateFormat; + +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.Corrida; +import com.rjconsultores.ventaboletos.web.utilerias.MyListbox; + +public class RenderRelatorioOrigemDestinoCorridaSelecionadas implements ListitemRenderer { + + private SimpleDateFormat sdfDia = new SimpleDateFormat("dd/MM/yyyy"); + + public void render(Listitem lstm, Object o) throws Exception { + Corrida corrida = (Corrida) o; + + Listcell lc = new Listcell(corrida.getId().getCorridaId().toString()); + lc.setParent(lstm); + + lc = new Listcell(sdfDia.format(corrida.getId().getFeccorrida())); + lc.setParent(lstm); + + lc = new Listcell(corrida.getOrigem().getDescparada()); + lc.setParent(lstm); + + lc = new Listcell(corrida.getDestino().getDescparada()); + 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((Corrida) listItem.getAttribute("data")); + } + }); + + lc.appendChild(btn); + lstm.setAttribute("data", corrida); + } +} diff --git a/web/gui/relatorios/filtroRelatorioLinhaOperacional.zul b/web/gui/relatorios/filtroRelatorioLinhaOperacional.zul index 87d45aa78..c2304fab7 100644 --- a/web/gui/relatorios/filtroRelatorioLinhaOperacional.zul +++ b/web/gui/relatorios/filtroRelatorioLinhaOperacional.zul @@ -78,45 +78,62 @@