From 32cd36cb0dc841174172e3fa14c4a3801c65e491 Mon Sep 17 00:00:00 2001 From: rodrigo Date: Thu, 1 Aug 2013 22:03:55 +0000 Subject: [PATCH] git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Web/trunk/ventaboletos@29665 d1611594-4594-4d17-8e1d-87c2c4800839 --- .../impl/RelatorioOrigemDestino.java | 101 +++++++++++++++ .../templates/RelatorioOrigemDestino.jasper | Bin 59630 -> 66227 bytes .../templates/RelatorioOrigemDestino.jrxml | 90 +++++++++++++- .../utilitarios/beans/PesoOperacional.java | 51 ++++++++ .../RelatorioLinhaOperacionalController.java | 23 +++- .../RelatorioOrigemDestinoController.java | 26 ++-- ...torioLinhaOperacionalRutaSelecionadas.java | 45 +++++++ ...torioOrigemDestinoCorridaSelecionadas.java | 55 +++++++++ .../filtroRelatorioLinhaOperacional.zul | 93 ++++++++------ .../filtroRelatorioOrigemDestino.zul | 116 +++++++++++------- 10 files changed, 494 insertions(+), 106 deletions(-) create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/beans/PesoOperacional.java create mode 100644 src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderRelatorioLinhaOperacionalRutaSelecionadas.java create mode 100644 src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderRelatorioOrigemDestinoCorridaSelecionadas.java 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 e608a2c0fcf4e85b8c70becec691f676a2a64df4..ecc8f102c0d1452055f3388f8f849773f6b12d04 100644 GIT binary patch literal 66227 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 z zTN$g*V?AReQ-wxCntC4VRRQXg+zQH340SOR*APXTKY8-Ue1RNX{P9qojbK@(jD zTXHe$A8o9uYigm@vM*4nhR`v3`Pu06Z9kt(xvNPx17mxkQR)s=o1?s<=ZdnWlxvU| zfHr25*o#>|jqTgTCUw>^X1fr2_7Af3cxhF{mc?L5u1U_Xm<{p5R5dl#C*sXXB`Riq zfoW)@uwhBb!z{9bn5Av?^$A$vNcqp9sU;^5iN>OhC`^{$z|=xy-xd@UT=}~;M-wmu zy7rYm%A1rUEXQe;jHJG*?B0HF9iFbYVh?X=6K#Z2k@~~zBYjxHz$E7y;i9V&If8;( zsjcBWJyIXJT`XxLAf@&bm{laBJX%`|Ba{i0nuC#Kco}Rao&iYtD`ASKRDO!>6ZH7_ z8ia|~=hkC;nKlnpaR&#mR1crhxsp8FOjmVrn3D6F>T4;7S5cUFYY{Sz*C>CFcx!p> zvciU?vD(_08;Fc+*r;C-tEz)#czK-)8zC}w-D*jOC|dV;>%2zbjjkZ-hb+VvwgG4_ z+SE>kvpbO$n3No_=}PJ3HR04iXWN>^G9d8oPI1)sJtc!?@2!y(ei^KMC`px$iyeu* zHZlLAzoUPPhF4|97JN%|c}ujp4))u$tpj788u_} zh+{39+}j7HFjV0(SP;(F(-b9yT*-6_Pmw7{r;{l~%-aebgwaAf(M63j5#8Ka&@A%q~#W0B^jRxC)H z8mrI_umQlTM{_6nidbkBolGfWydA&Q*b1dn95p21sHq{P`s;@uU`1XT$M{UJ^q}JO zgmz@YjYR@d-=?G-1|v(HZ;0tx+ACtKRabTznrek4z%cAa_o_|Dbl%}g5L$J%?igDT zi$dH`!d;8mV2wo5)teGk#(i|qRHhl6O)1x)R+$IwZ&M~vN(Oja-$EzJufrS}6M8*N z0Rh_u&}-X3;q?X2RxJG{3OAsto_jDTj>A8A-JX zNIt6+r@-XqvuK&M&s=rv?T?>(Eqm^UuTOvZ_1t6WgoUh;?m~yoRDRHK#U$nHB;AvB z140ecSvRFH&=G+21Aw$1I%U<=ULGTD3wlXA?Y&?VmU< ze@L0j>}HP>Je$x_5I=URkncibU!{TFC4iaf@d*??PaMxfbRSVVV35|ft*MC;G(Rr) z^$2Q*pChT!>6VRJQbrlNq?;AcxTIw0Q=cGsA`9}bCxs9MHCi*U4N~6{QPfx!iHd`M z3D!qb%*7Ez>L|^zMz85R?_tlQ(7OVrY@~V zfsD+T1<0{N^~a2|%zSZ-l&eHP&Lmw3kHc7Zdm5mhbQTu5%Sex)HZOt}E!P2%8$yLP zD9K9h>xe6Qmpr!WE-(I!!-tqBrCRDWbZ4jeH2u_zLsCTOl}0fltunvdWmxD@8>6s2 z6fG}CYJnm~649lVkO`vaDq2|4gj60R_MpWa^R6z2#l1QMC!iAZLRw)W=AG2#y#(4Y zWZI==3p^{_Ez!jDvu{CRRB(jQBCq|B34-QQ3Gbn`no2VK+c z&3T`$J^HH;o_y>UzG4Q>@CD966ypOqNMPZYK|teS&*>t$pQdtC$CipF8J~3&H;LiseEqs>+!M?I{7!b}cBZtSTxkGZN_l+wn;Fij1+nd2H{ukGb<( z&wul;cR%_`?yPUS^`V@gQ%p`L`$gXgSU9^iqoZ!rDA*Co^ui?NdK&Kv;4E5Y`z6!aBo1STRufR%FRM(KEq- zg*@pHJ}m&@uISB$MOC?4LK*bslYsL18TaM=|C)T?n(96GZoGHkaqoYa4+-WA_ze4U zE`<}$Spi5(ZUE9c!$4YR7)UDy;4qOsO9M#WrbBva0Mg;PCDm0p6_$~dM_1;h8F%Fe z-uqVl-8XH&anWln2hKjJAomCWE+v44Qyc)W^Jqp=q9s$sMIkW0I%AA4Tla_8&naEfY`pcl7%GDLH@NICJk2z)QAxE}UfnU08Ah;MExhygI{xS1|yB3GXrk7V@Nn z_ly8|yTW!@9bMXLB-8=EP_Q{Vb%wLu#^K+&cg))TxkFz)x%-Dj1-p&_Un;LSyue!n z@Ri&Ee07F_ug);=RSbY&;%mav8NSmg8U36EL_`=*m}Lwwb>Po42KcEpKRxP_oTJV> z|InlZBWBOeIRbz$BY=goE&yQ34FFhY7y#=G17O8S0eGF!?>Ync%m9FU0pRM601oq{z&|{Mls{mAS=;sYR2=iRs`sof2qG zL?OlPqFK(Jr9aSCUUYmo*kfYsBN? zi&!7x;jkzjH7RYwF1>ovJP~b4;F)n)pYiCrd_+@`DC8m*SrLmhS2f`$KZ+b1K}BFb}343+`uDO&Ps2IGZCM8FnFY_W+mE zV`;|I#C3IyboO(&*`+WqHr#}62YD2_1wGpC((C5?>&g%JQ zmTJ@B@5ou2a!EF&ezP)fZtg9uug9M6HJG)Th{&b_J4ka z^LmR|2rH?4qx_~HHkTLIlLR&c46rs`>%Nfa)jE~)Ncro6W3`1SfV;Jg+VxT}G z8_)XDnQ@$Q^9`>jB)2^D!EVa>QLP(N4EskX&!TDS1npGFUOw{ z|9N55cLw};4mJ{2eWbe8CweFSyIi`#M4t9Qo-mQ8v_*g{2xA|=x}a=9X$Qlc)*9ww zIbAJoJ^zbyPkZ&9&#qfNZN@w2%$VSooQ5oQ`hn#9w$lOpFA64{F9Qa!zU%Ex~uBv$jg2_84LjwkIcf7fx`Y;yFsWzWnMU*ID-OUmfQfCb%p`6&M;tBj1-s$x#)V= zbTAJKfVmgJ+|lwmjp#7V6zQk)*ta02$0Bx6JX z)-sx87+C8J18c=d!TRv_mWBsl-A{DsH0Fv9@J_Y6rNjHd1s7jm(0g;s;1vgU|7*;Q z;uO5Sz9O;<(6g*bgtc%2c9|460Bad70BfCLV67M_SnJA>EN;4fJt6?>h{8H!+nc*t z>Tl(x19{7>Gphdi_Kt6suDI@x^Bi{oS3<92|Iy{1a( z9sckXvH=+>WZS>Er(xE{N3K6+L61A{*`kjRbE%@9A?W+=UHANb{l?R#^N$dgmI~WD%CSM5ii|bvAVa;RI}hDQ-YFkkJCVfzB|xfnuOhS_wvX zO=G2QgC*Fq(S_~trLpYRCVCzsmW?CNcr>Ur8?S@OZfJ+Z+**-H{$u2cvDMuQ(JZ%Z&0hxMlfRF8fRe={MLm;d4s^rkh0l5p@E zHOkZIO_CdclFl$t(isLyijjhnJo)G%L|1H=%q_{TXsV6YHgyWr>WqMTW@GD+Xs;7b z+uq>Z_#Mk!)=>f(47&{klyEK!07`NLfYKQTP&&f^N-fDHz=xfKhi~)QM9Jiu{^f_S4gULMH`R3?a!h{p5dd{J0VSNf0)Ud- z0HAb+0hG=#fKrSUpzaC)svAb!xI!E|>TJwqCYZjl{>~9k7gY56VEz8yKmTs=vqu2a zLj;p>9teO*asyz}83s%`!+=RKQeb)@0H#n;ZuxKl5lh|Spx3UF+LT#OT6fW+t*7Sa zo%!s%9Y1?|df`tDh`g-D+!eHz-b?TZ=ZOG#BsTyaongSEGYohXBL$u(yfV5sR0C9B z{3V+_M|#UVM^x!1>{&$o{p#uol8W87qsBGhrOxr@`qg;1+Nx~-JitglqJM~>dZHJx z$G8OcJ?Xf?$Wf!{jT-)+2ou;~{6rKtvw37Uzv=B)+Xt>1(WA0<>t$syz-l_KmzT&Y zsKLHR4JMoy0~$V<(TDn60-M_OniuXV5!7g^tlC8ZWa6?z%s)Tefc5eEWj=Z(h;2 z+swBPv+;gKjVGKp0~$|q0~$|f7>%bhjK))pl*W70Z8PthuJJ~vYrIL`h#BNIUWaWL zIMB?to0!ygs@nyQHX$A}Yp_S#ety?q2E6%6``X@fF8FQUj>BxQPpH9!^HD&9Np3)c z=?tU6bcWGjijmS_*o;g1OV?myyatn->Owr~;2UXmEY1YLnTfNTLTw|Q!vI(@0DvjZJ~tpCPdb3d1_7)~CL^^@0M1MY zy6L{FhaUa@{O=!q=fddZi|2f$15777_yC+3EH0c`MY-|cFt-FE^MDz|?tyU938zA? zxT%mE3>|WVp+oL6P#^27Ele+xSfv9s=L)$Yu zdOr5dUyF9@KoewH6Lf~r6BHw*CyX{)kv#O&DxTDhH4u^k7`YFsW`@y~ zHyj(8|KYt0_T2I6OLyV>nM#7mKfRW?|V5BpQ(V{a9j1(gUqsajnbuGXt z;CN$4Hf{G|ugpNY?6vP+wP5>S*E|-z?7+?6oO`wo67{2jobK}M~D;r5Gtlr9N#&=UHPl<8simI@-*24`yWs)y{oIudaH)`u47VcRt#C z%G~-Rgo@sVVGBp8u12Sl+yJO_h5?n%FrZS56sS`A6zwXJ*%k)~Xh*$+e&rq(%nYmz zXMFL`*XIBFjjNjLzxC+nh1VP*SQism!dW9RF~E}C0I+n10hZ1%z*3A9u-2rY1uaVM zEOmgBdm<_`oYs}RH2)W)nj^j5KI8Jls#!w)b+bg>GgT0-B%Fk^Apj@I4Zulf7&z$+ z11H5u!D)kAXzz-J>2Qp_4p1T~Md$P~L+SBteRp4Z+%3mzIq%#bNbcO+uVx&N{%|*t$;$#3m9=bA) zb37fO^aud@LB=TUSlar#PruB$`#`rvk8FFpc*7B(bPu51lH354bcTVF&M;6? zj1-ja_Rw)}(2;QTzOExxlg8V_8AJ5oj)nshi%)v+`IlE+amk=kajebFD8r7ln;;U- zLje#;ZU96&!+=O<7!WB&3PcZi1$J-Hk?;bagFA5ktAma-1t`&>fXs&5jkOm%7u~q} zjeS$5{NuKx3r{$%;0_O zfkpeiZ}q$MC#OzZJm};COsf8}(9f$wcz;Bg2GD-u@7g4^Vc8$+lCuY zAN2W#?p@w`=d$Ac9odI}FUt>D`RCNYX)+#@Q3Kyo|Mc*$+aEpro3lRq;{C!>yQ7T% zka@;uWt8!QZBHz`@7E7(e_+_SS3VtD1lw!ivv>AKNf`&&MudV0QRF`!kWL)$FZle6 zR}Q>)?Fl1z_P7^IjV&cAc?L@2U#MFP=T8CMT5BZusP(n#nn@?k{`lFvmUZH`>Ap*w~Z| z^^oDmZpvN^#V`Pp=}8a_fD|JIpu^kPJT73|>#yZ7(599M=!EFN{GyCI;oeK%9kA=r zhP9W@<^NpsyV5&c6huzQpz}`XWFeSz0(LSLH?{;Gp=0bak}-BtcQWZ?#;~Bo zaW)r)3+RL{NSO)6{VyC}^0%K2|K8ojf9vwIH;Ri4ki0e#Sp_IgPJaSOIDI7!y6r@9 z0|1iIB*OqmXBYq}MhZZEy)wEtR0C3)=r37uI^OGq>U0+rr+`Zi&4PP>PY#P{UnVysObr1eSb{#J@1>i}y$f*tVb* zv%OZ+4xRWf1vOqJ(A?~8>E?+oU3_RI`OOu0aH|53?j-Pqk|w!XskY-pKBpkZ!6I+* zg;^AgO_j*dOM}QeU3xvXdO@Pg&P`(Ho3Yi0M!ndxOmG3U2U?}8>PJ1H6~mCf-03ozHCW++?KrYq{LU4v84{k zyu_PK_Jv8Y)%()iCcy{ADGx99Dl_)#B=$un`x1?vVD5)@=NDB}&BL3X79GYXMDfa+ zcuN9Lgy91`Ek>&Siz=&&X5sxMh1K{xT2U!JM__(DIQ1nWZhS~Ne38ELZ1wyc)ft^$ zd@?op)mA`2gzhT75?r9VVkR-dA_hLp>O<36CSmo$Ev*lB7G;1sN>*82Sy)Uj{VmNc z$jv1F>9SZuFm`S6b{9Ifix+<2&oxp7O`%LIw*kn)Jko8^I0>H9c37X>(CuKnS;;8^YL`E z3av6>oVZ1nd^}~9>06w{2jwYo`4%Tj`|jkJ&c5Cy;<}%l3{w|q!!u9R|M9&>yo5?7 zkmf~iS^_ifWIKNU%;bA4ym=an1iVTo^T%2JWJEp0>!|F2k4U0!iKZ2JC=1`PTC9Ck zK%SAtcL6Z-itddI-l0bGhZxOk*ZrV%>U(?6d1AxUZ~tiXcgxNe;(I+Z8z}h3o09@Q z3(1nFmGrMrA^>j@^8Z%4Rf4#)Ob+wgla%sZB9k2*W#YdB>OcH_Nh;9p^Z@u}`wxFr zlFIf}rnvowza~j#dtQ|7plnmP{QG(rW$aSo;0vO5bq+cfIrwP{aoBo*UwSK-`OUtTe7nRNurJ}sMdwF*iG*XGVda?nb#TLwp%EdSW5m&6HUvnS&Js8O9fJb~y*FZ`oCQl6Y3)FcG@tB4O51cY~<@oFCN zYVJP)qNncFCCjfv+B$RXtEp%#^+MkxDdZlnkUf$MsdWvnfSo+^5R9>TXdbOK5ycmU z6@BztS34ISPk$NEzgMB2UWI%eUq{{O@5wK1`S-H!6_B<6)@7uvx|sGxp2N-19o}7M z=6Zo%HW+?ugEoJqjvSGVoqk z3(IjW9**%5OMW-);lf4*_xpTbui$ja; zKS^+7tjmqzWuHG#HucFTHf%3@w}Wk-(88o`o&e+VJy_yxqgN_d z@uNRpaCJDpWy*}5x=oTQmf6Yk5S>hwPQVdZ#gzg?-^nl-x^2>6=(b6h0T@MVxV!J6 z)FZHlZIZCiUTZqZ>!wO>kY+lx{NRq|c)d^d(Cjh(eA!)m>b`UyUOrwSvLr3G`xpem zYlAurDH_^!ysqTG!X59(%t`m+QSpvU@d4N}`ucQ7U3h+BMO9J0`?_4eYj)g+C2W4k zu-}POcWXGEJQsg{UrNYY0ne1jVeWU%Jy?6*^uL_*9(GC#rG2B*W7Z{m&dZp3Pg|i zk?LyR>%3UN7)*oPrk8(kMsfD{zEN`Yq1gBCEqKDmO`?_I7`&Vy6VCbo$RsxaGM!;S zrZWu46e9()^&V92O}a6dBF3*;APE3h?FQk>@~DJ)^hOSrrM^{HPL3lWTA}Bz5s-X9Gb0*N`&$a z%w7ppAyY+*_l7k87(}}Ed3MJOcU*i@&d&Xtdi*haNnxWtL^5n2IwKhpPQYPI$+#z= zePlGrFxp3F8117Ns_Ncpgiz37%!qqrb!6)(u}PUmlc>l@2yfm0)W^TPYT8w2P5Jow zik2AzI?^N_O420KG?9NqCS4QV@>SECwTcN&ngs5d8Fl}?(U*Vw=g;21wP4S|g6P{NKQ?-yms^M6zC_>(=Y;@pB{u+E zone5hGYoJQ10@n=@$}diyfV5s>A;;B0B#2xaBgyR^%T-dZ*2pGwDWJ`E~tw&mNsEl zj#jCUzYFCMPGA4CreS<8opk0(>@!VCr{m(gLGk5{6M)Lnn@~WU;{pMPD!P5xqM5XvqtUxMa14;Z_2Zs z+9H6#DZk0sce57fJ@l7BpLGdWy`#3%dR_hUSI^*uoopQYI%kuE4<%Hqa!#n8FzM7& zCQh9?{?yaPPnlRf`IITAPCTV6<6P`2=Cm%$xggrw9BYxgo~=2tMl48TIrQBCe9T>a zlDMg*E3-KpMBim@h~c}*)fI)bmaQ%>!&0D-vx#ZH5ug&IuM5yOq(utTjO6CzR+bl5 zs8l%{l9EwXQAuI-qOwxtHNa<9QW<6z6&4p%a(tx9P1`Nq%%b8#+~d=vShWPDijNi* zl~)xP;#*e7r^GJL#aAE;s|qVBt4ngrIXgNfM1EOmX<74w61Ll~tTu zSqboR3#eSjr0|9AQ&~2zA|Le~mcpJ_QCvMcx3r)bkj>1^uPUop$XRbc80w8;2i0jN zed+{|xsg(VF3CMdexoG_uPR88VZ zazV@4giQO2_n{un26{>5<2$n@rCwqKJccSoe%ZWIVBXK8i^a5}`k_@air(dncw;1 z-R0fb2#d(OaS_%--i?p2p7L&Dg!PhllOwFRyqgkXedOI~5y&`^@97cNPu`soVg2RZ znGrTX-pz=xf$}ad!UnOyRMLV7J4)WojIbf{ZgzwnE$`+;*fH|1n6qB=T@3j;<|=9| z&U)6gwI-SxaN4A{2(WNAex%%Brxj8T4mwOr?g zbR`j1eC4e*!sbabk_b~0^P?>wo+F9qnl0&$@8m{NQ_LQn$wWhpb!9aufg!%a3>fxS<@DrMm@Vh5 zyC$&0ERG?ff*F!3%vSgbcp@sy8X)^rcvCioSrcb{6w4P%VRj)J(8HdW?9L zWs+10v W*`f*E4VOhWzuZuO+p}bWgF3IhA0WMt2m3ez>p9Lvun^deen@yn-D@5 z9AUNv-84q8H;35(RUcUt(7%vKVS7!iIT3GaB=ALd6@9X*uBB-ejk&JuCN!YWQ2QTU z+076}NEE~6Shg*T-NJ4~?cEH^>T40p^%dgXAo#{$479AurnZ)v7&>ZcD}Bs-Cu z;pCh|&M0!mkaIFQIpj_z$~uE`7ATh)lw43Y7?gY;V210-s(3b=$0xG+XbjA7s(Ft>s%RX>{j9oxMc-_< zXwFl?Hp(_+i&4faRT;l_fPIa+>zKY*8S8RC2SK4xEalQ147@(+97k-vuy}*J2>|s z#oPXSA$S-NJOT(F2Lw+5f~Nq%(}3WcfZ$tz;CVoB5D>fw2wnmNKL7-W0KqGO;8j5I zGeGbbAh`X%7Xq3_{s$0z2nap`1b+que*px42Lzu1f-eBUmuv~=(9SGY&$~b^>dM-A zcjzP$wt@GC5-=DL+=1SO38|f|A)z-In;dc%<@^rL#&obK|KGb7@8K`!a3(z6+B|i& zs-0;MTr~dQ(%mH@nvhQz9iNCJhqpde@+SO5HCzsQE3^L7}75{e!V0R14lq$@&((GvV6gIq%2>>p5?35vwW3% zmahuW@>S(ozOal{malU>%hw{$@^!9f`8waTd@b=TUrRm9SFLCHTIN~4>d5jXY-JZj zuo@G0^<)DRca3BN6L-yI0~2>GWCIg-30ho>yOj|vH;*U#S$hPlIB~Zog0-BuyEuXs zow&O+f_0s^TNizVad%UM<;c66BhXv~ZCeEEOL4b7!Y0bQ+aqj}y!(2DO_q0e zMc66w?(PUwc@g8D2s>5Y-5X)2$-Da^(1!%~fe2QU;_jgc)|BFIcLbV}xO+5$^`*Fb zEW*x|cTYsvS@Ldg1S?&^eJa9o<=rz8mM8C?{r}I__-*z)*%}YRG(twjnKZY+toU6? ze!;Lcz9fm?gP>K`Ai2pAX5R-X$<}!2ux*V$Vn6QAe#l-qB3t8Y$PVgRnEez*NisVA z+&AB83R#%_0`fprL^DRdnQV;wRfopNxBUb(W8|+Pl2o$E#>n>|l{`b5yF(IYzYQ=( z{;nfqYBe3`K6Hrvs-pfx+w)gVkgaG!D zr8W}gCnei^`6#qVuNbb5LKYsf0NuZv82kFvrZF{Fp?T zpMvuEdP$g{it_j^REgi zBS1bVe)Ca&g=i;N&j|BbXeXs%gn1DH>$*jl&qZL@I*k!?#Kv)s&DQ|qIL8jBGLGl- zsw`f~=OIJv{D|+}Lk^4#Fvdst0)9>w@4^=%fDq=enb+m`-{I-X7o(lzXJ7oCucScJ zid;i~G9$vz*dVY{@RMmyi|{M> zm6Xgz6cy(O!~81p0fDf4`Z~<7O-eLiw@`wlCAyiC*@8Yu$FjrxdK&L)D@g3jbVpaj zjp&ULev|BWTd4`QqCdMqwQZX|h~Rluv|B0KP`(|w1Z?U|gHrRqXH!RR?m+t%wlV15 z;wlZw7U|u>53O5Vp>vBXG;VQ)zAdiMw#Ak9Qpm;zO7FX!f;tEY#T%kvcE3{~Fg$^yQ z(4fT?`m?w~dlpyd&f*HqSzMtviz~EdafQw-uF#mp75cKcLR-d_Hove6gA3ESMf*S) zRD3Kpzmj*SXp5?hoU_TPBxfEu3&>eW&SG-TBd402C^7rPMn+->y_+Io}{>7diKn^B_47lk*5Ud&qg5oF~cIN6ypa>?h}&a!-ZMN&QWnl>Gm4 z*Di;x!piJotjX46HFhP|Vb@>TzLypAOUe znJ~Mb1(W*>_5-Y$UcqYVXK491(f044?SG3crw_2@^f7GIf5n#5Kd|NW6`RX#R?Ne! zg!f>jye})`gIGB~hMmn%U=@4>ww%Ub1BbKc*a6vtP#U=nEOrvVLpzBt(oW*bK1y;Y zu^RGZ33d{r*hyT9I9NH!6!5)pxs&)fc8`AWG<%hH5`TjKv{gE$@6QYh?J&J=P)a~~ z!=RLb@=JqqHYjfyluA(EF(~sudDoyU0OdCZWg#f<8x-0(`@KOq50noKN;N2dG$>I} zJ~AjZpnPIbVxaulpezUFuLdO!%HIsi3Q#^XC=HET-3Bq72`whDpn^U&{Q5YuFQ0%9M;!esfTje(N03S;76{KMX zX)BRN7^GW>G}0j5N~F;S={6#bHAr_5X`Dg2lStzY(hed`G)SVTlMT{0DAW{#w2Mfm z8KnD(bh<%$kVt13q=$)gra^jyNHYx59wOx#BuKMFX+G{+$A zCsMIN(q^IaVWDK02l}zQ(D*yh_;;i6ccSs{LF0b|jejp1e-|46J~aOQX#5Az_z$A- zAL3c;VSX&z&BwDxcs_d+!)_0cv&Z~Wm%c!J-}p2UgX5?;zIUWQy8_|7KHq3g4_ zw;2oFCpYIqJHe&DGoej%!w(N@@DuQZ&cU%!&k+YP8OKIFa$p=A^?W^kTkt!G-&@c| zLiqK=5Am!V{EG2ggkK$gEAiWa-wpUZjo&-?;aLUi3%utj3qKs}u}9!H89#)#5#C04 z8{zG{@Y{_azNc%yjNj|{eTm8p!*4Er3-McyAIjuhj^Aedp2P1Des7|V5&VYWHxfU* zCNETgUj=?k@N2~HV*GG8A+&8juf)LvKEGs_bG>$dg?7K1?rj;SL8C`C`aF$Zq|v8q z^a&b$_~<9t^?UiE1N>a%JP5um(ucdNWW5A}N<1jONEj*X@Kb>AM)-Eh^x(S!zO`=o>{Wh9-0hN~++-Gk^spDP z7(TCJ_L+unJbdfDM2Etss)`Kz!>4Mg%Dh^HtlY~RP-m5y^`W0&nyOhZAlTDxnXISa z^YXPGFnqVew^8KORIT`=;mnC434gg#00V z`y@}n^Q7=86h-&o_ao3ABan(ByH{80cS!3p1bf^FW~8NBgfB)g#XzJIzX0%^1)osU+c%Oh6_^MBkkqa;E2%g zK)X=V;QIx92u_jU`@T$UlT7SJxBA!h<2T5}e3DFTJECuLTbW%8-!-1^Quw@Kz?$Jx zeH0ljh0p8hIFaWKVen?crv@i{r@`k9EjAjy{SsI3sQY+5mGy+r9ZTxe5>_pi#nv%~ z^?}8n!^x9_kksG7$&;5Lt-r^Iu|ts9Kg4|SDx~&n{0#PUNbcA9Z1zh??_cpM_G?J+ zcli?bKBV~Xcs=_AB>5kCJNpFE{7-xX`xFxWZ~O-KPe}F8`3vk{{4IPz@z>n3LOf)_ z7;Hfcvj*~>)(O0qHH`POa(I7hA|GrO^P{XXeyp{KA7`D%hgx;~L~8{<$y&)rTC4e3 zYXd*o+Q=tZH}HwpRzAggnxASt%coiI@H4FU_zdeKo@@Py7g}HNnbyDf96O88wR`X~ zdoVAzkLFeO2tLmq#TVL>`6ByNe!gADtL+uM#$L&5?bW=_-oWGbM&4lGz#HwYyv4qY zx7s`TDtk9?xA*Xi?PvKV_H%r_{W8DIKE$uIU*{X`H~BU8m;72xi`O~B`1Q_7e5*5; z-|Up~?ao4en{zI|(^<~%axUQaIBonJPCLKfxtu@XT*-GkoB1Qo_55+?IsSz6Jb%hL z#GiJ4%)jZp$-m{i#h(vF_`y&w{$gkde<^e<|3PRZKNK3nUkOd&uZE`bpM?te&qK5L zo1qH+%g{XjPG|}Lb*P5_Hq^-94_(MV2wlwo5L(MW4qeSZ32owk4Q=C}hHm5k2;FO; zLHLdTH>dwM%;`59b2|Ajs4>yeoe-M-#6_flIsFzRjxncGjG*{R8oP5krQpx$%BSXZ zN&-AJr>ndmm+8(;M$PFeqMFlHL^Y=?pPJK^PtEDdr{;9>sWM}xf=|sxDl>OZ*MdRF zl21b822*poER#E@Q!vc4YEDF}XUDRa6a2hZuM9BNKi zJ~gK+pPJK^PtEDl=g#TMr{;9!Q*%0HkJ(Yp>BRHrbodmC#+BR8obc*E9>B^_(bmjYx&FNIKz1*1770H;>Wh=XLy7H+x9X?dYozs<1&FRXg z=5*y#bGodmJEtq3n$wj}&FRXg=5*mpp3^NHMX(|~V)f<&tUj1g2k;Xx(+;zSVCFoU zkGGEJQ>|>wmcuYh4(GG2QT%LcG_SJ8@$)bXFR>=^xHXyATc`0hYbtNIrt|gInS6tl z$G2Gd{03_lKWNS7FJPvA%PQf&w$8RfR)rO|=3D)&1=c`ov2}uVt~JbBV&zy-YoZmi zimhcr(3mYpu1_y4-pilxMB4S?^d^ zS?^h!tdFeC)}O%r!n)D=mvxJsWo@&2Shw4Qtvl?atsV9V>u!6Lb+0|y+GU?=J!sci z57{fMN9~o?9(%R*q`kq~Yj3okv2U>U+gq*Y?7OT3_D<_N_HOID_8#kd_OsT@_H)(` z?U$_|*@vvx?ANWI*l${|+h1D0aG3QgXPEVtbCUJ0GuL|0DYbs*EVO>_oNN8jS#Evk zTwwjlX|w+9v|E33F1P;fTxosoY_`5|uD7vzw7K)V9dZuYU7R1=S{mhuU(2cecS)d>HiIL`oF(UzYXF> z>H(CNF{cy3pVK9q*7@#atk&t2fl&aU6n)4>B^_(bmdcXy7H+xUHaTPUHR0Uu6$}vM;Wy_op}D7 z4qwomt_8xJPQJi7T?>Xe-A^lNPA7&xr&A<B^_(bm2>$)9nS!vKR7*eI6fRpU(%|OZf?Q4IgGN=O<$Y zJKnD6Q|$(RhJ7I~v|IRWtY*))S7Eh#5kJqqm@l!{VO6`H*V|X{Hv3AfWUs~w_8Pvy z-om%o*YO+doA^Pjc3-e>SD~wsPpM8%t(7w+)!M@)bWmB=N)_e9F)<>9O|75>yePO?2{mcH1on`;l?qUCrJ=p%hKHC1s9$|lMkFx(_ zPqzPRpK5<**V+HDSJ+?LEA6lB)sAIvaBO>{)78Gg3ENwph<%sS!`|uiv3EOt?LE#w z`&nm@{hV{O{jzh6eaOkSUw2Nh-*krCUpgZk=8SfRIb)oYoE&GaGu|n6COZqAQ=D_1 zsm^lebms!+OsCB`%V~G=oy(m9=SpX`v)L(fu6IhD=MegNr@}epR60L)7C3J@=QwXU z=Y}HAd7)lTG&ICn8amcl78>a+4~=nFgr+$4p{Y)DsKB`}G|OoVRX8g{^PDxICC){m z8fR^&(ODO|(Af~W*tsIK*10NlwR3f7le0Or&Dj#V&ABmjuX7vb^xI*pu^3OV0f8^v UNU(_+y_aMT9%Zjl?-ptKe;`!=+W-In 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 @@