Agenda de eventos

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()}&region=${themeDisplay.getLocale().getCountry()}&callback=initMap"></script> 
171                                </div> 
172                            </#if> 
173                        </div> 
174                    </div> 
175                </div> 
176            </div> 
177        </#list> 
178    </div> 
179</#if>