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>