Otros operadores de transporte
Toda la información sobre los otros operadores de transporte público
Se ha producido un error al procesar la plantilla.
For "." left-hand operand: Expected a hash, but this has evaluated to a string (wrapper: f.t.SimpleScalar): ==> jTitlePrices [in template "20155#20195#50449" at line 10, column 16] ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign num = jTitlePrices.length() - 1 [in template "20155#20195#50449" at line 10, column 1] ----
1<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()>
2<#assign httpServletRequest = serviceContext.getRequest()>
3<#assign strOptionURL = (httpServletRequest.getParameter("q")?html)!"">
4<#assign pagination = 10>
5<#attempt>
6 <#assign jTitlePrices = jsonFactoryUtil.createJSONArray(serviceTool.getLlistatBitllets(groupId))>
7<#recover>
8 <#assign jTitlePrices = "">
9</#attempt>
10<#assign num = jTitlePrices.length()-1>
11<#assign counter = 1>
12<#assign Integer = 0>
13<#assign abonaments = abonament.getSiblings()>
14<#assign imagesFolder = themeDisplay.getPathThemeImages()>
15<#assign travelCardsMap = {
16 'integrats': '1',
17 'gent_gran': '2',
18 'joves': '3',
19 'families': '4',
20 'persones_amb_discapacitat': '5',
21 'aturats': '6',
22 'escoles': '7',
23 'altres': '8'
24}>
25<#assign optionURL = travelCardsMap[strOptionURL]!"">
26<#-- Sorting dels abonaments pel camp ordre_tipus. -----------------------------------------------------------
27-->
28
29<#assign abonaments = tmbPortalUtil.sortListByField(abonaments, "ordre_tipus", "asc")>
30
31<#-- Filtratge del llistat de bitllets -----------------------------------------------------------------------
32-->
33<#if select_filtre.getData() != "0">
34 <#assign classNameService = serviceLocator.findService("com.liferay.portal.kernel.service.ClassNameLocalService")>
35 <#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")>
36 <#assign structureService = serviceLocator.findService("com.liferay.dynamic.data.mapping.service.DDMStructureLocalService")>
37 <#assign groupId = getterUtil.getLong(groupId)>
38 <#assign structureClassNameId = classNameService.getClassNameId("com.liferay.journal.model.JournalArticle")>
39 <#assign curArticle = journalArticleLocalService.getArticle(groupId, .vars['reserved-article-id'].getData())>
40 <#assign structure = curArticle.getDDMStructure()>
41 <#--DDMStructure
42 -->
43 <#assign ddmFormFieldsMap = structure.getDDMForm().getDDMFormFieldsMap(true)>
44 <form action="#" class="filter filter--mobile">
45 <section class="collapsible-content js-collapsible">
46 <header class="collapsible-content__header">
47 <h2 class="collapsible-content__title js-collapsible__title">
48 <@liferay.language key="label.with.filter"/>
49 </h2>
50 </header>
51 <div class="collapsible-content__body js-collapsible__content">
52 <div class="filter__block">
53 <#if select_filtre.getData() == "1">
54 <#assign selectAmbitAbonament = ddmFormFieldsMap['select_ambit_abonament']>
55 <#assign ddmOptions = selectAmbitAbonament.getProperties()["options"]>
56 <#assign options = ddmOptions.getOptions()>
57 <div class="filter__fields filter__fields--1">
58 <div class="form__field form__field--select">
59 <div class="form__field__label">
60 <label for="f__ambit__actuacio">
61 <@liferay.language key="label.areas.activity"/>
62 </label>
63 </div>
64 <div class="form__field__control">
65 <select title="<@liferay.language key="label.areas.activity"/>
66 " id="f__ambit__actuacio">
67 <#foreach option in options?keys>
68 <#assign value = options[option].getString(locale)>
69 <option value="${option}">${value}</option>
70 </#foreach>
71 </select>
72 </div>
73 </div>
74 </div>
75 <#elseif select_filtre.getData() == "2">
76 <#assign selectAmbitAbonament = ddmFormFieldsMap['select_validesa_abonament']>
77 <#assign ddmOptions = selectAmbitAbonament.getProperties()["options"]>
78 <select id="validesaTemplate" style="display:none;">
79 <#foreach option in options?keys>
80 <#assign value = options[option].getString(locale)>
81 <option value="${option}">${value}</option>
82 </#foreach>
83 </select>
84 <div class="filter__fields filter__fields--2">
85 <div class="form__field form__field--select">
86 <div class="form__field__label">
87 <label for="f__tipus__abonament">
88 <@liferay.language key="label.categories"/>
89 </label>
90 </div>
91 <div class="form__field__control">ent)>
92 <#assign selectAmbitAbonament = ddmFormFieldsMap['select_grup_abonament']>
93 <#assign ddmOptions = selectAmbitAbonament.getProperties()["options"]>
94 <#assign fel = []>
95 <select title="<@liferay.language key="label.categories"/>" id="f__tipus__abonament">
96 <#foreach option in options>
97 <#assign fel = fel + ([])>
98 <#assign value = options[option].getString(locale)>
99 <option value="${option}" <#if optionURL == option>selected </#if>>${value}</option>
100 </#foreach>
101 </select>
102 </div>
103 </div>
104 <div class="form__field form__field--select">
105 <div class="form__field__label">
106 <label for="f__validesa">
107 <@liferay.language key="label.validity"/>
108 </label>
109 </div>
110 <div class="form__field__control form__field__control--disabled">
111 <select title="<@liferay.language key="label.all"/>
112 " id="f__validesa" disabled="disabled">
113 <option value="0">
114 <@liferay.language key="label.all"/>
115 </option>
116 </select>
117 </div>
118 </div>
119 </div>
120 </#if>
121 </div>
122 <div class="filter__actions">
123 <button id="filterButton" title="<@liferay.language key="label.with.filter"/>
124 " type="button" class="button button--a">
125 <@liferay.language key="label.with.filter"/>
126 </button>
127 </div>
128 </div>
129 </section>
130</form>
131</#if>
132<#-- Llistat de bitllets -------------------------------------------------------------------------------------
133-->
134<ul id="result-list" class="list list--units">
135<#assign lang = locale.getLanguage()>
136<#assign String = "">
137<#foreach bitllet in abonaments>
138 <#assign preu = -1>
139 <#assign isZone = "false">
140 <#assign isFixed = "true">
141 <#assign titolTitle = "">
142 <#if bitllet.en_titol_detall.getData()?has_content>
143 <#assign titolTitle = bitllet.en_titol_detall.getData()>
144 </#if>
145 <#assign abonamentTypes = "">
146 <#foreach abonType in bitllet.select_grup_abonament.getSiblings()>
147 <#if abonamentTypes?has_content>
148 <#assign abonamentTypes = abonamentTypes + "," + abonType.getData()>
149 <#else>
150 <#assign abonamentTypes = abonType.getData()>
151 </#if>
152 </#foreach>
153 <#if bitllet.select_grup_abonament.getData() != "0" && bitllet.select_validesa_abonament.getData() != "0">
154 <#foreach abonType in bitllet.select_grup_abonament.getSiblings()>
155 <#assign pos = abonType.getData()?number-1>
156 <#assign val = bitllet.select_validesa_abonament.getData()>
157 <#assign r = fel[pos]>
158 <#if !r?seq_contains(val)>
159 <#assign r = r + ([val])>
160 </#if>
161 </#foreach>
162 </#if>
163 <li class="list__item active"
164 data-filter-ticket-type="${abonamentTypes}"
165 data-filter-validity="${bitllet.select_validesa_abonament.getData()}"
166 data-filter-scope="${bitllet.select_ambit_abonament.getData()}"
167 <#if (counter>
168 pagination)>
169 style="display:none;" </#if>
170 >
171 <div class="list-unit">
172 <div class="list-unit__container">
173 <div class="list-unit__media">
174 <#if bitllet.imatge_abonament.getData() == "">
175 <img class="list-unit__image" src="${imagesFolder}/figures/img-distribuidora-3col.png" alt="<@liferay.language key="label.image.ticket"/>
176 ">
177 <#else>
178 <img class="list-unit__image" src="${bitllet.imatge_abonament.getData()}" alt="${bitllet.alt.getData()}">
179 </#if>
180 </div>
181 <div class="list-unit__content">
182 <h2 class="list-unit__title">
183 <#if bitllet.select_tipus_abonament.getData() == "3">
184 ${bitllet.titol_abonament.getData()}
185 <#else>
186 <a class="list-unit__link" title="${titolTitle}" href="${bitllet.url_detall_abonament.getFriendlyUrl()}">
187 ${bitllet.titol_abonament.getData()}
188 </a>
189 </#if>
190 </h2>
191 <p class="list-unit__intro">
192 ${bitllet.descripcio_abonament.getData()}</p>
193 <#if bitllet.select_tipus_abonament.getData() == "3">
194 <p class="list-unit__go-link">
195 <#if bitllet.url_externa_operador.getData()?has_content>
196 <#assign url = bitllet.url_externa_operador.getData()>
197 <#else>
198 <#assign url = "#">
199 </#if>
200 <a href="${url}" title="${titolTitle}" rel="external">
201 ${titolTitle}</a>
202 </p>
203 <#else>
204 <#foreach i in 0..num>
205 <#assign currentCodeTitle = jTitlePrices.getJSONObject(i).getString("id")>
206 <#if bitllet.codi_titol_abonament.getData() == currentCodeTitle>
207 <#assign preu = jTitlePrices.getJSONObject(i).getDouble("preu")>
208 <#if preu == preu?floor>
209 <#assign preu = preu?string(",##0.##")>
210 <#else>
211 <#assign preu = preu?string(",##0.00")>
212 </#if>
213 <#if lang == "en">
214 <#assign preu = preu?replace(",", ".")>
215 <#else>
216 <#assign preu = preu?replace(".", ",")>
217 </#if>
218 <#assign isZone = jTitlePrices.getJSONObject(i).getString("teZones")>
219 <#break>
220 </#if>
221 </#foreach>
222 <#if (!preu?is_number && preu == "-1") || (preu?is_number && preu == -1)>
223 <#assign preu = languageUtil.get(locale, "label.not.available")>
224 <#else>
225 <#assign isFixed = getterUtil.getBoolean(bitllet.isFixed.getData())>
226 <#assign fromText = "">
227 <#if !isFixed>
228 <#assign fromText = languageUtil.get(locale, "label.from")>
229 </#if>
230 <#if lang == "en">
231 <#assign preu = fromText + " €" + preu>
232 <#else>
233 <#assign preu = fromText + " " + preu + " €">
234 </#if>
235 </#if>
236 <#if bitllet.select_tipus_abonament.getData() != "4">
237 <div class="list-unit__block">
238 <p class="list-unit__meta">
239 <span class="list-unit__tag">
240 <span class="list-unit__tag__label">
241 <@liferay.language key="label.price"/>
242 :</span>
243 <span class="list-unit__tag__connector">
244 <#if isZone == "true">
245 1 <@liferay.language key="label.zone"/> / </#if> ${preu}
246 </span>
247 <#if bitllet.select_tipus_abonament.getData() == "2">
248 <span class="list-unit__note">
249 (10% <@liferay.language key="label.discount.online"/>)</span>
250 </#if>
251 </span>
252 </p>
253 <#if lang == "en">
254 <#assign titleButton = languageUtil.get(locale, "label.buy.online") + " " + bitllet.titol_abonament.getData() + " " + languageUtil.get(locale, "label.buy.online.billet")>
255 <#else>
256 <#assign titleButton = languageUtil.get(locale, "label.buy.online.billet") + " " + bitllet.titol_abonament.getData()>
257 </#if>
258
259 <#if bitllet.select_tipus_abonament.getData() == "2">
260 <div class="list-unit__actions">
261 <a <#if (bitllet.url_externa_compra_online.getData()?contains("holabarcelona"))> id="click_hb_cta" </#if> class="button button--a" title="${titleButton}" aria-label="${titleButton}" href="${bitllet.url_externa_compra_online.getData()}" rel="external">
262 <@liferay.language key="label.buy.online"/>
263 </a>
264 </div>
265 </#if>
266 </div>
267 </#if>
268 </#if>
269 </div>
270 </div>
271 </div>
272 </li>
273 <#assign counter = counter + 1>
274</#foreach>
275</ul>
276<#-- Paginació del llistat de bitllets -----------------------------------------------------------------------
277-->
278<#if (abonaments?size>pagination)>
279<div class="load-more">
280 <a href="javascript:void(0);" class="button button--a" onclick="paginate();">
281 <@liferay.language key="view.more"/>
282 </a>
283</div>
284</#if>
285<script type="text/javascript">
286 var jsonOptions;
287 TJS.eventPagination = ${pagination};
288
289 $(document).ready(function() {
290
291 <#if select_filtre.getData() == "1">
292
293 $('#filterButton').click(function() {
294 var filterValue = $('#f__ambit__actuacio').val();
295 $('#result-list li').addClass('active');
296 $('#result-list li').hide();
297 if (filterValue > 0) {
298 $('#result-list li[data-filter-scope!="' + filterValue + '"]').removeClass('active');
299 }
300 resetPagination();
301 });
302
303 <#elseif (select_filtre.getData() == "2")>
304 <#assign jsonString = "{\"options\":[">
305 <#assign n = fel?size-1>
306 <#foreach i in 0..n>
307 <#assign jsonString = jsonString + "{\"id\": " + i + 1 + ", \"values\": [">
308 <#assign valueList = fel[i]>
309 <#if !valueList.isEmpty()>
310 <#assign n2 = valueList.size()-1>
311 <#foreach j in 0..n2>
312 <#assign val = valueList.get(j)>
313 <#assign jsonString = jsonString + val>
314 <#if j < n2>
315 <#assign jsonString = jsonString + ",">
316 </#if>
317 </#foreach>
318 </#if>
319 <#assign jsonString = jsonString + "]}">
320 <#if i < n>
321 <#assign jsonString = jsonString + ",">
322 </#if>
323 </#foreach>
324 <#assign jsonString = jsonString + "]}">
325
326 jsonOptions = JSON.parse('${jsonString}');
327
328 $('#f__tipus__abonament').change(function() {
329 $('#f__validesa option[value != "0"]').remove();
330 var optionValue = $(this).val();
331 if (optionValue == 0) {
332 $('#f__validesa').parent().addClass('form__field__control--disabled');
333 $('#f__validesa').attr('disabled', true);
334 } else {
335 $('#f__validesa').parent().removeClass('form__field__control--disabled');
336 $('#f__validesa').removeAttr('disabled');
337
338 jQuery.each(jsonOptions.options, function(idx, val) {
339 if (val.id == optionValue) {
340 var optionValues = val.values;
341 var validesaOptions= $('#validesaTemplate option').clone();
342 validesaOptions = jQuery.grep(validesaOptions, function(n, i) {
343 return jQuery.inArray(parseInt(n.value), optionValues) >= 0;
344 });
345 $('#f__validesa').append(validesaOptions);
346 return false;
347 }
348 });
349 }
350 });
351 $('#f__tipus__abonament').change();
352
353 $('#filterButton').click(function() {
354 var tipusAbonamentValue = $('#f__tipus__abonament').val();
355 var validesaValue = $('#f__validesa').val();
356 var arrTypes = "";
357 if (tipusAbonamentValue == 0) {
358 $('#result-list li').addClass('active');
359 $('#result-list li').hide();
360 } else {
361 $('#result-list li').hide();
362 $('#result-list li').removeClass('active');
363 if (tipusAbonamentValue > 0 && validesaValue == 0) {
364 $('#result-list li[data-filter-ticket-type]').each(function () {
365 arrTypes = $(this).attr("data-filter-ticket-type");
366 if (arrTypes.indexOf(tipusAbonamentValue) != -1) $(this).addClass('active');
367 });
368 } else if (tipusAbonamentValue > 0 && validesaValue > 0) {
369 $('#result-list li[data-filter-validity="' + validesaValue + '"]').each(function () {
370 arrTypes = $(this).attr("data-filter-ticket-type");
371 if (arrTypes.indexOf(tipusAbonamentValue) != -1) $(this).addClass('active');
372 });
373 }
374 }
375 resetPagination();
376 });
377 </#if>
378
379 $('.list-unit__actions .button').click(function() {
380 Analytics.Common.eventShop($(this).attr("href"));
381 });
382
383 <#if optionURL?has_content>
384 $('#filterButton').trigger('click');
385 </#if>
386 });
387
388 function paginate() {
389 TJS.velocity.paginate(${pagination}, '#result-list li.active');
390 if (TJS.eventPagination >= $('#result-list li.active').length) {
391 $('.load-more').hide();
392 }
393 return false;
394 }
395
396 function resetPagination() {
397 TJS.eventPagination = ${pagination};
398 $('#result-list li.active:lt(' + ${pagination} + ')').show();
399 if ($('#result-list li.active').length <= ${pagination}) {
400 $('.load-more').hide();
401 } else {
402 $('.load-more').show();
403 }
404 }
405
406</script>