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 class="map-wrapper-warning" style="position: relative;"> 129 <div id="map-consent-overlay" class="map-overlay"> 130 <div class="map-overlay-content"> 131 <p>Para visualizar este mapa, es necesario aceptar las cookies de terceros de Google Maps. Google utiliza estas cookies para recopilar información sobre el uso del mapa, recordar tus preferencias y personalizar tu experiencia de navegación.</p> 132 <button onclick="acceptMap()">Aceptar y ver mapa</button> 133 </div> 134 </div> 135 <div id="map-canvas" class="" style="height: 300px; position: relative; overflow: hidden;"><!-- map-canvas --></div> 136 </div> 137 138 <div class="card-body"> 139 <#if validator.isNotNull(calendarData.getAddress()) || validator.isNotNull(calendarData.getAddressDescription())> 140 <#if validator.isNotNull(calendarData.getAddress())> 141 <p class="card-subtitle">${calendarData.getAddress()}</p> 142 </#if> 143 <#if validator.isNotNull(calendarData.getAddressDescription())> 144 <p class="card-subtitle">${calendarData.getAddressDescription()}</p> 145 </#if> 146 </#if> 147 </div> 148 <script type="text/javascript"> 149 function initMap(){ 150 var latitude = '${latitude}'; 151 var longitude = '${longitude}'; 152 153 if(latitude || longitude){ 154 var latitude = parseFloat(latitude); 155 var longitude = parseFloat(longitude); 156 157 if(isNaN(latitude) || isNaN(longitude)){ 158 var latitude = parseFloat(40.421598993024574); 159 var longitude = parseFloat(-3.7029075622558594); 160 } 161 } 162 163 var mapDiv = document.getElementById('map-canvas'); 164 var map = new google.maps.Map(mapDiv, { 165 center: new google.maps.LatLng(latitude, longitude), 166 zoom: 13, 167 mapTypeId: google.maps.MapTypeId.ROADMAP 168 }); 169 170 var latLng = new google.maps.LatLng(latitude, longitude); 171 var marker = new google.maps.Marker({ 172 position: latLng, 173 map: map, 174 draggable: false 175 }); 176 } 177 178 function acceptMap() { 179 var overlay = document.getElementById('map-consent-overlay'); 180 if (overlay) { 181 // Ocultamos la capa 182 overlay.style.display = 'none'; 183 184 //Almacenamos cookie 185 localStorage.setItem('map-consent', 'true'); 186 187 //Inicializamos el mapa sólo cuando lo acepta 188 initMap(); 189 } 190 } 191 192 193 //Al cargar la página comprueba si ya aceptó las condiciones 194 window.onload = function() { 195 if (localStorage.getItem('map-consent') === 'true') { 196 document.getElementById('map-consent-overlay').style.display = 'none'; 197 } 198 }; 199 </script> 200 <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> 201 </div> 202 </#if> 203 </div> 204 </div> 205 </div> 206 </div> 207 </#list> 208 </div> 209</#if>