Se ha producido un error al procesar la plantilla.
Can't convert this string to number: "" The blamed expression: ==> calendarData.getLatitude()?number [in template "38913#38948#19259365" at line 119, column 62] ---- FTL stack trace ("~" means nesting-related): - Failed at: #if calendarData.getLatitude()?number... [in template "38913#38948#19259365" at line 119, column 57] ----
1<#assign urlDecoderTool = utilLocator.findUtil('lportal-ce-hook', 'as.asac.template.tools.URLDecoder')/>
2<#assign httpTool = utilLocator.findUtil('lportal-ce-hook', 'as.asac.template.tools.HttpTool') />
3
4<#assign googleMapsKey = prefsPropsUtil.getString(companyId, "googleMapsAPIKey")>
5
6<#if entries?has_content>
7 <div class="events-detail row-fluid template">
8 <#list entries as calendarBooking>
9 <#assign calendarData = ADTUtil.getCalendarData(calendarBooking) />
10 <div class="view-detail template-calevent-detail">
11 <div id="event${calendarBooking.getCalendarBookingId()}" class="detail calevent event box ">
12 <div class="title-wrapper">
13 <div class="title h3">${calendarBooking.getTitle(locale)}</div>
14 </div>
15 <div class="row mt-4">
16 <div class="col-lg-8">
17 <span id="share-${calendarBooking.getCalendarBookingId()}" class="need-share-button-default need-share-button"
18 data-share-icon-style="box"
19 data-share-networks="Mailto,Twitter,Whatsapp,Telegram,Facebook"
20 data-share-url="${urlDecoderTool.decodeURL(htmlUtil.escape(httpTool.toUnicode(themeDisplay.getPortalURL())))}${urlDecoderTool.decodeURL(htmlUtil.escape(httpTool.toUnicode(themeDisplay.getURLCurrent())))}"
21 data-share-title="${htmlUtil.escape(calendarBooking.getTitle(locale))}"><!--share--></span>
22 <span><a href="https://api.whatsapp.com/send?text=${calendarBooking.getTitle(locale)}-${urlDecoderTool.decodeURL(htmlUtil.escape(httpTool.toUnicode(themeDisplay.getPortalURL())))}${urlDecoderTool.decodeURL(htmlUtil.escape(httpTool.toUnicode(themeDisplay.getURLCurrent())))}" target="_blank"><i class="fab fa-whatsapp"></i><span class="hide-accessible">Whatsapp: ${calendarBooking.getTitle(locale)} </span></a></span>
23
24
25 <script src="${themeDisplay.getPathThemeRoot()}/js/needsharebutton/needsharebutton.min.js"></script>
26 <script src="${themeDisplay.getPathThemeRoot()}/js/needsharebutton/needsharebutton.js"></script>
27 <script type="text/javascript">
28 new needShareDropdown(document.getElementById('share-${calendarBooking.getCalendarBookingId()}'));
29 </script>
30
31 <#if validator.isNotNull(calendarBooking.getDescription(locale))>
32 <div class="text">
33 ${calendarBooking.getDescription(locale)}
34 </div>
35
36 <#assign gallery = ADTUtil.getGalleryTool(calendarData, themeDisplay)/>
37 <#assign documents = ADTUtil.getDocumentsTool(calendarData, themeDisplay)/>
38
39 <#if validator.isNotNull(gallery)>
40 <div class="image-gallery">
41 <div class="h4">Galería imágenes</div>
42 ${gallery}
43 </div>
44 </#if>
45
46 <#if validator.isNotNull(documents)>
47 <div class="documents">
48 <div class="h4">Documentos</div>
49 ${documents}
50 </div>
51 </#if>
52 </#if>
53 </div>
54 <div class="col-lg-4">
55 <#assign imagePath = ADTUtil.getImagePath(calendarData.getImageUuid(), 3, calendarBooking.getGroupId(), themeDisplay) />
56 <#if validator.isNotNull(calendarData) && validator.isNotNull(imagePath)>
57 <div class="d-block image-wrapper mb-2 aspect-ratio-bg-cover lightbox" style="background-image: url(${imagePath}); background-size: cover;">
58 <img class='image' src="${imagePath}" alt="Imagen ${calendarBooking.getTitle(locale)}" />
59 </div>
60 </#if>
61
62 <#assign inicio = ADTUtil.formatDate(calendarBooking.getStartTime(), "EEEE, dd MMMM YYYY", themeDisplay) />
63 <#assign fin = ADTUtil.formatDate(calendarBooking.getEndTime(), "EEEE, dd MMMM YYYY", themeDisplay) />
64
65 <div class="card">
66 <div class="card-header">
67 Fecha
68 </div>
69
70 <div class="card-body">
71 <div class="start">
72 <span class="start-date d-block">
73 <span class="icon-calendar">
74 <span class="hide-accessible">Calendario</span>
75 </span>
76 ${inicio}
77 </span>
78
79 <span class="start-time">
80 <span class="icon-time">
81 <span class="hide-accessible">Tiempo</span>
82 </span>
83 <#if calendarBooking.getAllDay()>
84 ${languageUtil.format(locale, 'all-day', calendarBooking.getAllDay())}
85 <#else>
86 Inicio: ${ADTUtil.formatDate(calendarBooking.getStartTime(), "HH:mm", themeDisplay)}
87 </#if>
88 </span>
89 </div>
90
91 <div class="end">
92 <span class="end-date d-block">
93 <span class="fas fa-calendar-alt">
94 <span class="hide-accessible">Calendario</span>
95 </span>
96 ${fin}
97 </span>
98
99 <span class="end-time">
100 <span class="icon-time">
101 <span class="hide-accessible">Tiempo</span>
102 </span>
103
104 <#if calendarBooking.getAllDay()>
105 ${languageUtil.format(locale, 'all-day', calendarBooking.getAllDay())}
106 <#else>
107 Fin: ${ADTUtil.formatDate(calendarBooking.getEndTime(), "HH:mm", themeDisplay)}
108 </#if>
109 </span>
110 </div>
111 </div>
112 </div>
113
114
115
116
117
118
119 <#if calendarData.getLatitude()?number != 0 && calendarData.getLongitude()?number != 0>
120 <#assign latitude = calendarData.getLatitude() />
121 <#assign longitude = calendarData.getLongitude() />
122 <div class="card">
123 <div class="card-header">
124 <span class="icon-map-marker"><!--icon --></span>
125 <span>Localización</span>
126 </div>
127
128 <div id="map-canvas" class="" style="height: 300px; position: relative; overflow: hidden;"><!-- map-canvas --></div>
129
130 <div class="card-body">
131 <#if validator.isNotNull(calendarData.getAddress()) || validator.isNotNull(calendarData.getAddressDescription())>
132 <#if validator.isNotNull(calendarData.getAddress())>
133 <p class="card-subtitle">${calendarData.getAddress()}</p>
134 </#if>
135 <#if validator.isNotNull(calendarData.getAddressDescription())>
136 <p class="card-subtitle">${calendarData.getAddressDescription()}</p>
137 </#if>
138 </#if>
139 </div>
140 <script type="text/javascript">
141 function initMap(){
142 var latitude = '${latitude}';
143 var longitude = '${longitude}';
144
145 if(latitude || longitude){
146 var latitude = parseFloat(latitude);
147 var longitude = parseFloat(longitude);
148
149 if(isNaN(latitude) || isNaN(longitude)){
150 var latitude = parseFloat(40.421598993024574);
151 var longitude = parseFloat(-3.7029075622558594);
152 }
153 }
154
155 var mapDiv = document.getElementById('map-canvas');
156 var map = new google.maps.Map(mapDiv, {
157 center: new google.maps.LatLng(latitude, longitude),
158 zoom: 13,
159 mapTypeId: google.maps.MapTypeId.ROADMAP
160 });
161
162 var latLng = new google.maps.LatLng(latitude, longitude);
163 var marker = new google.maps.Marker({
164 position: latLng,
165 map: map,
166 draggable: false
167 });
168 }
169 </script>
170 <script async="async" type="text/javascript" src="//maps.google.com/maps/api/js?key=${googleMapsKey}&language=${themeDisplay.getLocale().getLanguage()}®ion=${themeDisplay.getLocale().getCountry()}&callback=initMap"></script>
171 </div>
172 </#if>
173 </div>
174 </div>
175 </div>
176 </div>
177 </#list>
178 </div>
179</#if>