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