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