Metropolitan Pink Card
An individual travel card to travel for free or at a reduced rate.
An error occurred while processing the template.
The following has evaluated to null or missing: ==> ordre.descripcio_ordre [in template "20155#20195#51237" at line 415, column 27] ---- Tip: It's the step after the last dot that caused this error, not those before it. ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #if ordre?has_content && ordre.descri... [in template "20155#20195#51237" at line 415, column 1] ----
1<#assign images_folder = themeDisplay.getPathThemeImages()>
2<#attempt>
3 <#assign jTitlePrices = serviceTool.getTarifesBitllet(groupId, codi_bitllet.getData())>
4 <#assign jTitle = jsonFactoryUtil.createJSONObject(jTitlePrices).getJSONObject("data").getJSONArray("titols").getJSONObject(0).getString("descripcioExtesa")>
5<#recover>
6 <#assign jTitlePrices = "">
7 <#assign jTitle = "">
8</#attempt>
9<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")>
10<#assign structureService = serviceLocator.findService("com.liferay.dynamic.data.mapping.service.DDMStructureLocalService")>
11<#assign classNameService = serviceLocator.findService("com.liferay.portal.kernel.service.ClassNameLocalService")>
12<#assign imagesFolder = themeDisplay.getPathThemeImages()>
13<#assign groupId = getterUtil.getLong(groupId)>
14<#assign group = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService").getGroup(groupId)>
15<#assign domain = group.getExpandoBridge().getAttribute("MAPS_TMB_DOMAIN")>
16<#assign api_id = group.getExpandoBridge().getAttribute("API_ID")>
17<#assign api_key = group.getExpandoBridge().getAttribute("API_KEY")>
18<#assign equipmentCode = group.getExpandoBridge().getAttribute("ECOMMERCE_EQUIPMENT_CODE")>
19<#assign ecommerceDomain = group.getExpandoBridge().getAttribute("ECOMMERCE_DOMAIN")>
20<#assign ecommerceEndpoint = group.getExpandoBridge().getAttribute("ECOMMERCE_ENDPOINT")>
21<#assign urlCompra = languageUtil.get(locale, "context.ecommerce.url")>
22<#assign structureClassNameId = classNameService.getClassNameId("com.liferay.journal.model.JournalArticle")>
23<#assign curArticle = journalArticleLocalService.getArticle(groupId, .vars['reserved-article-id'].getData())>
24<#assign structure = curArticle.getDDMStructure()>
25
26<#assign ddmFormFieldsMap = structure.getDDMForm().getDDMFormFieldsMap(true)>
27
28<#assign validesaBitlletAbonament = ddmFormFieldsMap['validesa_bitllet']>
29
30<#assign ddmOptions = validesaBitlletAbonament.getProperties()["options"]>
31
32<#assign options = ddmOptions.getOptions()>
33<#assign option = options[validesa_bitllet.getData()].getString(locale)>
34
35<#assign portalURL = themeDisplay.getPortalURL()>
36<#assign DLAppServiceUtil = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppService")>
37<#assign lang = locale.getLanguage()>
38<#assign String = "">
39
40<script type="text/javascript">
41 $(document).ready(function() {
42 Analytics.EnhancedEcommerce.loadEC();
43
44 var jsonResponse = JSON.parse('${jTitlePrices}');
45 if (jQuery.isEmptyObject(jsonResponse.data.titols)) {
46 $('#hdr_preus_zona, #preus_zona').hide();
47 }
48 else {
49 $('#hdr_preus_zona, #preus_zona').show();
50 }
51
52 jsonCallback2(jsonResponse);
53 <#if compra_online.is_compra_online.getData() != "true"> loadEcommerceDetall();
54 </#if>
55 $('.ticket-unit__actions .button').click(function() {
56 Analytics.EnhancedEcommerce.addProduct($(this).attr("data-code"), $(this).attr("data-name-bitllet"), 1, 'Detall del bitllet ' + $(this).attr("data-name-bitllet"));
57
58 Analytics.Ecommerce.eventPurchase.purchase('JOTMBE / Detall de bitllet', $(this).attr("data-name-bitllet"));
59 <#if saleTmobilitat?has_content && getterUtil.getBoolean(saleTmobilitat.getData())> var ecommerceURL = '${ecommerceDomain}/${lang}';
60 window.location.href = ecommerceURL;
61 <#else> var ecommerceURL = '${ecommerceDomain}/${lang}/${urlCompra}/${codi_bitllet.getData()}';
62 window.location.href = ecommerceURL;
63 </#if> });
64 });
65
66 function initCompraOnlineDetall(versionCode){
67 var bitlletCode = '${codi_bitllet.getData()}';
68 var ecommerceActive = false;
69 var ocultaBotoCompraOnline = '<#if oculta_compra?has_content>${oculta_compra.getData()}</#if>';
70
71 jQuery.ajax({
72 url : "${domain}/${ecommerceEndpoint}/v2/business-parameters/"+versionCode+"/catalog/product/parent-variants?equipmentCode=${equipmentCode}&app_id=${api_id}&app_key=${api_key}",
73 type : "GET",
74 dataType: "json",
75 success: function(data) {
76 var productsNoVariants = data.productsWithoutVariants;
77 var productsWithVariants = data.productsWithVariants;
78
79 for(var i in productsNoVariants){
80 var product = productsNoVariants[i];
81 var ticketCode = product.ticketCode;
82 var productCode = product.code;
83 if(bitlletCode == ticketCode){
84 $('.ticket-unit__actions .button.button--a').attr('data-name-bitllet', product.originalName);
85 $('.ticket-unit__actions .button.button--a').attr('data-code', productCode);
86 Analytics.EnhancedEcommerce.addImpression(productCode, product.originalName, 1, 'Detall del bitllet ' + product.originalName);
87 if(product.withPermissionToSell && ocultaBotoCompraOnline != 'true'){
88 $('.ticket-unit__actions').show();
89 ecommerceActive = true;
90 break;
91 }
92 }
93
94 }
95
96 if(!ecommerceActive){
97 for(var pv in productsWithVariants){
98 var productVariants = productsWithVariants[pv];
99 var productParentVariants = productVariants.productParentVariants;
100 for(var ppv in productParentVariants){
101 var productParent = productParentVariants[ppv];
102 var productWVCode = productParent.variantFieldGroupingValue;
103
104 if(bitlletCode == productWVCode){
105 var productVariantLanguages = productParent.parentProductVariantLanguages;
106 for(var pvl in productVariantLanguages){
107 var language = productVariantLanguages[pvl];
108 if(language.languageCode == "CAT"){
109 $('.ticket-unit__actions .button.button--a').attr('data-name-bitllet', language.shortName);
110 $('.ticket-unit__actions .button.button--a').attr('data-code', productWVCode);
111 Analytics.EnhancedEcommerce.addImpression(productWVCode, language.shortName, 1, 'Detall del bitllet ' + language.shortName);
112 break;
113 }
114 }
115
116 var showBtn = true;
117 for(var i in productParent.products){
118 var item = productParent.products[i];
119 if(!item.withPermissionToSell){
120 showBtn = false;
121 break;
122 }
123 }
124 if(showBtn && ocultaBotoCompraOnline != 'true'){
125 $('.ticket-unit__actions').show();
126 ecommerceActive = true;
127 break;
128 }
129 }
130 }
131 }
132 }
133
134
135 },
136 error : function(error) {
137 console.log(error);
138 }
139 });
140 }
141
142 function loadEcommerceDetall() {
143 jQuery.ajax({
144 url : "${domain}/${ecommerceEndpoint}/v2/business-parameters/versions?equipmentCode=${equipmentCode}&app_id=${api_id}&app_key=${api_key}",
145 type : "GET",
146 dataType: "json",
147 success: function(data) {
148 if(data.length > 0){
149 initCompraOnlineDetall(data[0].versionCode);
150 }
151 },
152 error : function(error) {
153 console.log(error);
154 }
155 });
156 }
157
158 function textCurrency(valor){
159 var preu;
160 if(valor != null && !isNaN(parseFloat(valor)) && isFinite(valor)){
161 if (valor % 1 == 0) {
162 preu = Math.floor(valor).toString();
163 } else {
164 preu = valor.toFixed(2);
165 }
166 if ('${lang}' == 'en') {
167 preu = '€' + preu;
168 } else {
169 preu = preu.replace('.',',') + ' €';
170 }
171 }else{
172 preu = "";
173 }
174 return preu;
175 }
176
177 function jsonCallback2(json){
178 var titolZones = json.data.titols[0].titolZones;
179 var valor = titolZones[0].preu;
180 var iszero = false;
181
182 if(valor==0) iszero = true;
183
184 var preu = textCurrency(valor);
185 if(preu!=""){
186 var isAbonament = '${is_abonament.getData()}' ? true : false;
187 var preuHtml = '';
188 if(!iszero){
189 preuHtml = '<strong><@liferay.language key="label.price"/>: </strong>' + (isAbonament ? "1 <@liferay.language key="label.zone"/> / " : "") + '<strong class="ticket-unit__data__price">'+ preu +'</strong>';
190 }
191 $("#preu").html(preuHtml);
192 }
193 if(titolZones.length>1 && !iszero){
194 $("#hdr_preus_zona").show();
195 $("#preus_zona").show();
196 mostraTaulaZonaPreus(titolZones);
197 $("totsElsPreus").show();
198 mostraLinkTotsPreus();
199 }else{
200 $("#hdr_preus_zona").hide();
201 $("#preus_zona").hide();
202 $("#totsElsPreus").hide();
203 }
204 }
205
206 function mostraTaulaZonaPreus(zones){
207 var textHeader = [];
208 for(i=0; i<zones.length; i++){
209 var numZona = zones[i].numeroZones;
210 textHeader[i] = numZona+((numZona==1)?' <@liferay.language key="label.zone"/>':' <@liferay.language key="label.zones"/>');
211 }
212
213 var taula = ' <div class="tablesaw-bar mode-stack"></div>'+'\n'+
214 ' <table class="table tablesaw tablesaw-stack u-collapse--bottom" data-tablesaw-mode="stack" summary="Sumari de la taula" id="table-6043" width="100%">'+'\n'+
215 ' <caption class="table__caption"><@liferay.language key="label.prices.area"/></caption>'+'\n'+
216 ' <thead class="table__head">'+'\n'+
217 ' <tr>'+'\n';
218
219 var today = new Date();
220 today.setHours(0);
221 today.setMinutes(0);
222 today.setSeconds(0);
223 today.setMilliseconds(0);
224
225 var isFirst = <#if saleTmobilitat?has_content>${getterUtil.getBoolean(saleTmobilitat.getData())?string("true", "false")}<#else>false</#if>;
226 var saleTmob = <#if saleTmobilitat?has_content>${getterUtil.getBoolean(saleTmobilitat.getData())?string("true", "false")}<#else>false</#if>;
227 var width = Math.trunc(100/zones.length);
228 var zonesTmob = saleTmob && <#if saleTmobilitat?has_content>${saleTmobilitat.getSiblings()?has_content?string("true", "false")}<#else>false</#if> ? <#if saleTmobilitat?has_content && saleTmobilitat.getSiblings()[0].zonesTmobilitat?has_content><#assign count = 1>[<#foreach item in saleTmobilitat.getSiblings()[0].zonesTmobilitat.options>${item}<#if count < saleTmobilitat.getSiblings()[0].zonesTmobilitat.options?size>,</#if><#assign count = count + 1></#foreach>]<#else>""</#if> : false;
229
230 for(i=0; i<zones.length; i++){
231 var dataInici = new Date(zones[i].dataInici);
232 var isDate = !isNaN(dataInici.getTime());
233 if(isDate){
234 dataInici.setHours(0);
235 dataInici.setMinutes(0);
236 dataInici.setSeconds(0);
237 dataInici.setMilliseconds(0);
238 }
239 if(isFirst){
240 isFirst = false;
241 taula += ' <th class="smallSizeTh" scope="col" >'+textHeader[i]+'</th>'+'\n';
242 taula += ' <th class="bigSizeTh" scope="col" width="'+width+'%"><div style = "display: flex;align-items: center;">'+textHeader[i]+'<img src="${images_folder}/gallery_pages/28px/svg/Suport_T-m Copy@1,5x.svg" style="margin-left:15%"></div></th>'+'\n';
243 }
244 else if((dataInici<=today && isDate) || !isDate){
245 if(saleTmob && zonesTmob.includes(i+1)) {
246 taula += ' <th class="smallSizeTh" scope="col" >'+textHeader[i]+'</th>'+'\n';
247 taula += ' <th class="bigSizeTh" scope="col" width="'+width+'%"><div style = "display: flex;align-items: center;">'+textHeader[i]+'<img src="${images_folder}/gallery_pages/28px/svg/Suport_T-m Copy@1,5x.svg" style="margin-left:15%"></div></th>'+'\n';
248 } else {
249 taula += ' <th class="bigSizeTh" scope="col" width="'+width+'%">'+textHeader[i]+'</th>'+'\n';
250 taula += ' <th class="smallSizeTh" scope="col" >'+textHeader[i]+'</th>'+'\n';
251 }
252 }
253 }
254 taula += ' </tr>'+'\n'+
255 ' </thead>'+'\n'+
256 ' <tbody class="table__body">'+'\n'+
257 ' <tr>'+'\n';
258 isFirst = <#if saleTmobilitat?has_content>${getterUtil.getBoolean(saleTmobilitat.getData())?string("true", "false")}<#else>false</#if>;
259 for(i=0; i<zones.length; i++){
260 if(!isNaN(zones[i].preu)){
261 var preuZona = textCurrency(zones[i].preu);
262 var dataInici = new Date(zones[i].dataInici);
263 var isDate = !isNaN(dataInici.getTime());
264 if(isDate){
265 dataInici.setHours(0);
266 dataInici.setMinutes(0);
267 dataInici.setSeconds(0);
268 dataInici.setMilliseconds(0);
269 }
270 if((dataInici<=today && isDate) || !isDate ){
271 if(isFirst){
272 isFirst = false;
273 taula += '<td><span aria-hidden="true" class="tablesaw-cell-label"><div style = "display: flex;align-items: center;">'+textHeader[i]+'<img src="${images_folder}/gallery_pages/28px/svg/Suport_T-m Copy@1,5x.svg" style="margin-left:15%"></div></span><span class="tablesaw-cell-content">'+preuZona+'</span></td>'+'\n';
274 } else {
275 if(saleTmob && zonesTmob.includes(i+1)) {
276 taula += '<td><span aria-hidden="true" class="tablesaw-cell-label"><div style = "display: flex;align-items: center;">'+textHeader[i]+'<img src="${images_folder}/gallery_pages/28px/svg/Suport_T-m Copy@1,5x.svg" style="margin-left:15%"></div></span><span class="tablesaw-cell-content">'+preuZona+'</span></td>'+'\n';
277 } else {
278 taula += '<td><span aria-hidden="true" class="tablesaw-cell-label">'+textHeader[i]+'</span><span class="tablesaw-cell-content">'+preuZona+'</span></td>'+'\n';
279 }
280 }
281
282 }
283 }
284 }
285 taula += ' </tr>'+'\n'+
286 ' </tbody>'+'\n'+
287 ' </table>'+'\n'+
288 getTableFooter() +
289 ' <ul class="list list--links list--links-a u-content--right">'+'\n'+
290 ' <li class="list__item"><a class="list__label" href="${link_mapa_zones.getFriendlyUrl()}" href="${en_titol_mapa_de_zones.getData()}"><@liferay.language key="label.see.zone.map"/></a></li>'+'\n'+
291 ' </ul>'+'\n';
292
293 $("#preus_zona").html(taula);
294 }
295
296 function mostraLinkTotsPreus(){
297 var totsElsPreus = '<ul class="list list--links list--links-a">'+'\n'+
298 ' <li class="list__item"><a class="list__label" href="#hdr_preus_zona"><@liferay.language key="label.see.prices"/></a></li>'+'\n'+
299 '</ul>';
300 $("#totsElsPreus").html(totsElsPreus);
301 }
302
303 function getTableFooter() {
304 <#if zones_footer?has_content && zones_footer.getData()?has_content>
305 var footer = '<div style="padding-top:5px; padding-bottom: 15px;">'+'\n'+
306 '<span style="font-size:small;">'+'\n'+
307 '${zones_footer.getData()}'+'\n'+
308 '</span>'+'\n'+
309 '</div>'+'\n';
310 return footer;
311 <#else> return "";
312 </#if> }
313
314 function showCode(path) {
315 var imagePath = "https://${portalURL}"+path;
316 var text = '<a target="_blank" href="'+imagePath+'"><img src="'+imagePath+'"/></a>';
317 $("#content-see-code .list__label").click();
318 $("#dialog .dialog__container").html('<p>'+htmlEscape(text)+'</p>');
319 }
320
321 function htmlEscape(str) {
322 return str
323 .replace(/&/g, '&')
324 .replace(/"/g, '"')
325 .replace(/'/g, ''')
326 .replace(/</g, '<')
327 .replace(/>/g, '>');
328 }
329</script>
330
331
332<!-- Columna dreta -->
333<div class="ticket-unit">
334 <div class="ticket-unit__container">
335 <div class="ticket-unit__media">
336 <#if !imatge_bitllet.getData()?has_content>
337 <img class="ticket-unit__image" src="${imagesFolder}/figures/img-avis.png" alt="">
338 <#else>
339 <img class="ticket-unit__image" src="${imatge_bitllet.getData()}" alt="${alt_imatge_bitllet.getData()}">
340 </#if>
341 </div>
342 <div class="ticket-unit__content" data-bitllet-code="${codi_bitllet.getData()}">
343 <ul class="ticket-unit__data">
344 <#if num_viatges.getData() != "null">
345 <li class="ticket-unit__data__item">
346 <strong>
347 <@liferay.language key="label.number.trips"/>
348 : </strong>
349 ${num_viatges.getData()}</li>
350 </#if>
351 <#if validesa_bitllet?has_content && validesa_bitllet.getData()?has_content>
352 <li class="ticket-unit__data__item">
353 <strong>
354 <@liferay.language key="label.validity"/>
355 : </strong>
356 ${option}</li>
357 </#if>
358 <li id="preu" class="ticket-unit__data__item">
359 </li>
360 <#if saleTmobilitat?has_content && getterUtil.getBoolean(saleTmobilitat.getData())>
361 <#if tmobilitat_available.getData()?has_content && tmobilitat_available.getData()?trim?has_content>
362 <li class="ticket-unit__data__item">
363 ${tmobilitat_available.getData()}</li>
364 </#if>
365 <li class="ticket-unit__data__item">
366 <div class="container-applestore-image-elements">
367 <img src="${images_folder}/basic/24px/svg/ico-apple-store-black.svg" alt="App Store">
368 <div class="text-applestore-image">
369 <span class="Available-on-the">
370 <@liferay.language key="label.tickets.available-at-store"/>
371 </span>
372 <span class="App-Store">
373 App Store</span>
374 </div>
375 <div class="Rectangle">
376 </div>
377 <img src="${images_folder}/basic/24px/svg/ico-google-play.svg" alt="Google Play">
378 <div class="text-applestore-image">
379 <span class="Available-on-the">
380 <@liferay.language key="label.tickets.available-at-store"/>
381 </span>
382 <span class="App-Store">
383 Google Play</span>
384 </div>
385 </div>
386 </li>
387 <#if tmobilitat_info.getData()?has_content && tmobilitat_info.getData()?trim?has_content>
388 <li class="ticket-unit__data__item">
389 ${tmobilitat_info.getData()}</li>
390 </#if>
391 </#if>
392 </ul>
393 <#if compra_online.is_compra_online.getData() == "true">
394 <div class="ticket-unit__actions">
395 <p class="ticket-unit__note">
396 ${compra_online.text_descompte.getData()}</p>
397 <a class="button button--a" href="#"
398 title="${Visible_Title.getData()}" data-name-bitllet="" data-code="" rel="nofollow">
399 <@liferay.language key="label.buy.online"/>
400 </a>
401 </div>
402 <#else>
403 <div class="ticket-unit__actions" style="display: none";>
404 <p class="ticket-unit__note">
405 ${compra_online.text_descompte.getData()}</p>
406 <a class="button button--a" title="${Visible_Title.getData()}" rel="nofollow">
407 <@liferay.language key="label.buy.online"/>
408 </a>
409 </div>
410 </#if>
411 </div>
412 </div>
413</div>
414<#assign sortingFields = []>
415<#if ordre?has_content && ordre.descripcio_ordre.getData()?is_number>
416 <#assign sortField = ordre.descripcio_ordre.getData()?number>
417<#else>
418 <#assign sortField = 1000>
419</#if>
420<#assign sortingFields = sortingFields + [ { "title" : "descripcio", "sortingField" : sortField } ] >
421
422<#if ordre?has_content && ordre.avantatges_ordre.getData()?is_number>
423 <#assign sortField = ordre.avantatges_ordre.getData()?number>
424<#else>
425 <#assign sortField = 1000>
426</#if>
427<#assign sortingFields = sortingFields + [ { "title" : "avantatges", "sortingField" : sortField } ] >
428
429<#if ordre?has_content && ordre.requisits_ordre.getData()?is_number>
430 <#assign sortField = ordre.requisits_ordre.getData()?number>
431<#else>
432 <#assign sortField = 1000>
433</#if>
434<#assign sortingFields = sortingFields + [ { "title" : "requisits", "sortingField" : sortField } ] >
435
436<#if ordre?has_content && ordre.mapazones_ordre.getData()?is_number>
437 <#assign sortField = ordre.mapazones_ordre.getData()?number>
438<#else>
439 <#assign sortField = 1000>
440</#if>
441<#assign sortingFields = sortingFields + [ { "title" : "mapazones", "sortingField" : sortField } ] >
442
443<#if ordre?has_content && ordre.puntsdevenda_ordre.getData()?is_number>
444 <#assign sortField = ordre.puntsdevenda_ordre.getData()?number>
445<#else>
446 <#assign sortField = 1000>
447</#if>
448<#assign sortingFields = sortingFields + [ { "title" : "puntsdevenda", "sortingField" : sortField } ] >
449
450<#if ordre?has_content && ordre.altrestitols_ordre.getData()?is_number>
451 <#assign sortField = ordre.altrestitols_ordre.getData()?number>
452<#else>
453 <#assign sortField = 1000>
454</#if>
455<#assign sortingFields = sortingFields + [ { "title" : "altrestitols", "sortingField" : sortField } ] >
456
457<#foreach field in sortingFields?sort_by("sortingField")>
458 <#if field.title == "descripcio">
459 <#if descripcio_bitllet?has_content && descripcio_bitllet.getData()?has_content>
460 <#if descripcio_title?has_content && descripcio_title.getData()?has_content>
461 <h2 class="title title--2">
462 ${descripcio_title.getData()}</h2>
463 <#else>
464 <h2 class="title title--2">
465 <@liferay.language key="label.overview"/>
466 </h2>
467 </#if>
468 <div class="content u-spaced--bottom">
469 <p>
470 ${descripcio_bitllet.getData()}</p>
471 </div>
472 </#if>
473 <#elseif field.title == "avantatges">
474 <#if avantatges_bitllet.avantatge_bitllet.getSiblings()[0].getData()?has_content>
475 <#if avantatges_titol?has_content && avantatges_titol.getData()?has_content>
476 <h2 class="title title--2">
477 ${avantatges_titol.getData()}</h2>
478 <#else>
479 <h2 class="title title--2">
480 <@liferay.language key="label.benefits"/>
481 </h2>
482 </#if>
483 <div class="content u-spaced--bottom">
484 <ul class="list list--standard">
485 <#foreach avantatge in avantatges_bitllet.avantatge_bitllet.getSiblings()>
486 <li class="list__item">
487 ${avantatge.getData()}</li>
488 </#foreach>
489 </ul>
490 </div>
491 </#if>
492 <#elseif field.title == "requisits">
493 <#if requisits_bitllet?has_content && requisits_bitllet.getData()?has_content>
494 <#if requisits_titol?has_content && requisits_titol.getData()?has_content>
495 <h2 class="title title--2">
496 ${requisits_titol.getData()}</h2>
497 <#else>
498 <h2 class="title title--2">
499 <@liferay.language key="label.requirements"/>
500 </h2>
501 </#if>
502 <div class="content u-spaced--bottom">
503 <p>
504 ${requisits_bitllet.getData()}</p>
505 </div>
506 </#if>
507 <#if HTML_Structure_Content?has_content && HTML_Structure_Content.getData()?has_content>
508 <div class="content">
509 ${HTML_Structure_Content.getData()}
510 </div>
511 </#if>
512 <div id="content-see-code" style="display: none">
513 <a class="list__label" href="#" data-size="dialog--medium" data-dismiss="<@liferay.language key="label.close"/>
514 " data-src="http://example.com" data-rel="dialog" >
515 Dialog</a>
516 </div>
517 <ul class="list list--files">
518 <#assign knownFormats = ["pdf", "doc", "jpg", "mov", "zip"]>
519 <#if Document.getSiblings()?has_content>
520 <#foreach cur_docfile in Document.getSiblings()>
521 <#if cur_docfile.Document_URL?has_content && cur_docfile.Document_URL.getData()?has_content>
522 <#assign docUrlList = cur_docfile.Document_URL.getData()?split("/")>
523 <#assign docUrlUuidNum = getterUtil.getInteger(docUrlList?size)-1>
524 <#assign docUrlNameNum = getterUtil.getInteger(docUrlList?size)-2>
525 <#assign docClassUuid = docUrlList[docUrlUuidNum]>
526 <#assign docClassUuidData = docClassUuid?split("?")>
527 <#assign codeHTML = cur_docfile.HTML_Code.getData()>
528 <#if (getterUtil.getInteger(docClassUuidData?size)>0)>
529 <#assign docClassUuid = docClassUuidData[0]>
530 </#if>
531 <#assign fileExtension = "">
532 <#assign fileSize = "">
533 <#assign fileEntry = "">
534 <#if cur_docfile.Visible_Name.getData()?has_content>
535 <#assign docName = cur_docfile.Visible_Name.getData()>
536 <#else>
537 <#assign docName = docUrlList[docUrlNameNum]>
538 <#assign docName = stringUtil?replace(docName, "+", " ")>
539 </#if>
540 <#assign fileEntry = DLAppServiceUtil.getFileEntryByUuidAndGroupId(docClassUuid, groupId)>
541 <#assign fileSize = fileEntry.getSize()/1024>
542 <#assign fileVersion = fileEntry.getFileVersion()>
543 <#assign fileExtension = fileEntry.getExtension()?lower_case>
544 <#if knownFormats?seq_contains(fileExtension) && codeHTML != "true">
545 <#assign iconClass = "icon--file-" + fileExtension>
546 <#else>
547 <#assign iconClass = "icon--file-generic">
548 </#if>
549 <#assign accessibleDocName = "">
550 <#if !cur_docfile.Accessible_Name.getData() == "">
551 <#assign accessibleDocName = cur_docfile.Accessible_Name.getData()>
552 </#if>
553 <li class="list__item">
554 <#if codeHTML == "true">
555 <a onclick="showCode('${cur_docfile.Document_URL.getData()}')" class="file" href="#" title="${accessibleDocName}">
556 <span class="icon ${iconClass}">
557 </span>
558 <span class="file__name">
559 ${docName}</span>
560 <#if fileExtension?has_content && fileSize?has_content>
561 <span class="file__data">
562 [${fileExtension?upper_case}: ${fileSize?round} KB]</span>
563 </#if>
564 </a>
565 <#else>
566 <a class="file" href="${cur_docfile.Document_URL.getData()}" title="${accessibleDocName}" rel="external" target="_blank">
567 <span class="icon ${iconClass}">
568 </span>
569 <span class="file__name">
570 ${docName}</span>
571 <#if fileExtension?has_content && fileSize?has_content>
572 <span class="file__data">
573 [${fileExtension?upper_case}: ${fileSize?round} KB]</span>
574 </#if>
575 </a>
576 </#if>
577 </li>
578 </#if>
579 </#foreach>
580 </#if>
581 </ul>
582 <#elseif field.title == "mapazones">
583 <!-- s'omple per web service -->
584 <h2 id="hdr_preus_zona" class="title title--2" style="display: none">
585 <#if Visible_Title?has_content && Visible_Title.getData()?has_content>
586 ${languageUtil.get(locale, "label.prices.area.name", Visible_Title.getData())}
587 <#else>
588 ${languageUtil.get(locale, "label.prices.area")}
589 </#if>
590 </h2>
591 <div id="preus_zona" class="content u-spaced--bottom">
592 </div>
593 <#elseif field.title == "puntsdevenda">
594 <#if punts_de_venda.getSiblings()[0].element_text.getData()?has_content>
595 <#if puntsvenda_titol?has_content && puntsvenda_titol.getData()?has_content>
596 <h2 class="title title--2">
597 ${puntsvenda_titol.getData()}</h2>
598 <#else>
599 <h2 class="title title--2">
600 <@liferay.language key="label.points.sale"/>
601 </h2>
602 </#if>
603 <div class="content u-spaced--bottom">
604 <ul class="list list--standard u-collapse--bottom">
605 <#foreach punt in punts_de_venda.getSiblings()>
606 <#if !punt.external_url.getData()?has_content && !punt.internal_url.getData()?has_content>
607 <li class="list__item">
608 ${punt.element_text.getData()}</li>
609 </#if>
610 </#foreach>
611 </ul>
612 <ul class="list list--links-a">
613 <#foreach punt in punts_de_venda.getSiblings()>
614 <#if punt.external_url.getData()?has_content>
615 <li class="list__item">
616 <a class="list__label" href="${punt.external_url.getData()}" rel="external">
617 ${punt.element_text.getData()}</a>
618 </li>
619 <#elseif punt.internal_url.getData()?has_content>
620 <li class="list__item">
621 <a class="list__label" href="${punt.internal_url.getFriendlyUrl()}" title="${punt.en_titol.getData()}">
622 ${punt.element_text.getData()}</a>
623 </li>
624 </#if>
625 </#foreach>
626 </ul>
627 </div>
628 </#if>
629 <#elseif field.title == "altrestitols">
630 <#if other_titles.getSiblings()[0].text_other_title.getData()?has_content>
631 <#if altrestitols_titol?has_content && altrestitols_titol.getData()?has_content>
632 <h2 class="title title--2">
633 ${altrestitols_titol.getData()}</h2>
634 <#else>
635 <h2 class="title title--2">
636 <@liferay.language key="label.more.installments"/>
637 </h2>
638 </#if>
639 <div class="content u-spaced--bottom">
640 <ul class="list list--links-a">
641 <#foreach title in other_titles.getSiblings()>
642 <li class="list__item">
643 <a class="list__label" title="${title.en_altres_titols.getData()}" href="${title.url_other_title.getFriendlyUrl()}">
644 ${title.text_other_title.getData()}</a>
645 </li>
646 </#foreach>
647 </ul>
648 </div>
649 </#if>
650 </#if>
651</#foreach>
652<!-- Columna dreta -->
653<style>
654@media (max-width: 768px) {
655 .smallSizeTh{
656 display: block !important;
657 }
658
659 .bigSizeTh{
660 display: none !important;
661 }
662}
663@media (min-width: 768px) {
664 .smallSizeTh{
665 display: none !important;
666 }
667
668 .bigSizeTh{
669 display: table-cell !important;
670 }
671}
672</style>