Se ha producido un error al procesar la plantilla.
Expression entry.getUpcomingSession() is undefined on line 322, column 42 in 20155#20195#1185405.
1<link rel="stylesheet" href="https://unpkg.com/leaflet@1.0.2/dist/leaflet.css" /> 
2<script src="https://unpkg.com/leaflet@1.0.2/dist/leaflet.js"></script> 
3 
4<#assign numberOfTicketsForTicketsLeft = 10> 
5<#assign liferay_portlet = taglibLiferayHash["/WEB-INF/tld/liferay-portlet.tld"] /> 
6<#assign PresentationMode = enumUtil["com.axonstream.shared.constants.EventPresentationMode"] /> 
7 
8<div class="ficha-banner eventId-${entry.getEventId()}"> 
9	<div class="ficha-banner-wrapper"> 
10		<#assign imagesSize = entry.getImages()?size> 
11		<#if (imagesSize > 0)> 
12			<link rel="stylesheet" href="https://unpkg.com/swiper@5.4.1/css/swiper.min.css"> 
13 
14			<div class="swiper-container"> 
15		        <div class="swiper-wrapper"> 
16		        	<#list entry.getImages() as image> 
17		        		<div class="swiper-slide"> 
18		        		    <img data-src="${image}" class="swiper-lazy swiper-blur-img"> 
19                            <img data-src="${image}" class="swiper-lazy"> 
20                            <div class="swiper-lazy-preloader swiper-lazy-preloader-white"></div> 
21		        		</div> 
22		        	</#list> 
23	 	        </div> 
24	 	        <!-- Add Pagination --> 
25                <div class="swiper-pagination swiper-pagination-white"></div> 
26                <!-- Navigation --> 
27                <div class="swiper-button-next swiper-button-white"></div> 
28                <div class="swiper-button-prev swiper-button-white"></div> 
29			</div> 
30 
31			<script src="https://unpkg.com/swiper@5.4.1/js/swiper.min.js"></script> 
32 
33			<!-- Initialize Swiper --> 
34		    <script> 
35			    var swiper = new Swiper('.swiper-container', { 
36			        lazy: true, 
37                    pagination: { 
38                        el: '.swiper-pagination', 
39                        clickable: true, 
40                    }, 
41                    navigation: { 
42                        nextEl: '.swiper-button-next', 
43                        prevEl: '.swiper-button-prev', 
44                    }, 
45                    centeredSlides: true, 
46			    }); 
47		    </script> 
48		</#if> 
49	    <div class="ficha-caption"> 
50	        <h2>${entry.getName()}</h2> 
51	    </div> 
52	</div> 
53 
54	<#if entry.getUpcomingSession()?? && (entry.getSessions()?size <= 1) && (entry.getPresentationMode() != PresentationMode.CALENDAR)> 
55	<div class="single-booking-wrapper well"> 
56	<div class="row-fluid"> 
57 
58	    <div class="span4 text-center hidden-phone"> 
59	        <button class="btn btn-large btn-block btn-default disabled single-booking-info"> 
60	            ${entry.getUpcomingSession().getDate()} - ${entry.getUpcomingSession().getTime()} h 
61	        </button> 
62	    </div> 
63 
64	    <div class="span4 text-center"> 
65	        <button class="btn btn-large btn-block btn-default disabled single-booking-info"> 
66	            <span class="visible-phone">${entry.getUpcomingSession().getDate()} - ${entry.getUpcomingSession().getTime()} h <br /> </span> 
67	            <@liferay.language key="from" /> 
68 
69	            <#if customFromPrices[entry.getUpcomingSession().getSessionId()]?has_content> 
70	                ${customFromPrices[entry.getUpcomingSession().getSessionId()]} 
71	            <#elseif entry.getUpcomingSession().getBoxOfficePrice() == 'event.ticket.price.free'> 
72                    0 € 
73                <#else> 
74                    <#if entry.getUpcomingSession().hasDiscountPrice()> 
75                        <span class="single-booking-discount">${entry.getUpcomingSession().getBoxOfficePrice()}</span> ${entry.getUpcomingSession().getPriceWithoutCommission()} 
76                    <#else> 
77                        <@liferay.language key="${entry.getUpcomingSession().getBoxOfficePrice()}" /> 
78                    </#if> 
79                </#if> 
80            </button> 
81	    </div> 
82 
83	    <div class="span4 text-center"> 
84	        <#if entry.getUpcomingSession().saleEnded()> 
85	            <button class="btn btn-large btn-block btn-default single-booking-button site-button" 
86                    disabled="disabled" 
87
88	                <@liferay.language key="online.sale.closed" /> 
89	            </button> 
90	        <#elseif entry.getUpcomingSession().soldOut()> 
91	            <button class="btn btn-large btn-block btn-default single-booking-button site-button" 
92                    disabled="disabled" 
93
94	                <@liferay.language key="sold.out" /> 
95	            </button> 
96	        <#else> 
97                <button class="btn btn-large btn-block btn-default single-booking-button site-button" 
98                    title="<@liferay.language key="book.your.ticket" />" 
99                    value="${entry.getUpcomingSession().getSessionId()}" 
100                    <#if shoppingViewURL?has_content>onclick="location.href = '${shoppingViewURL}'+this.value;"</#if> 
101
102                    <@liferay.language key="book.now" /> 
103                </button> 
104                <#if entry.getUpcomingSession().getTicketAvailabilityNumber() <= numberOfTicketsForTicketsLeft> 
105                    <div class="text-center"><span class="label label-important"> <@liferay.language_format key="x.tickets.available" arguments=[entry.getUpcomingSession().getTicketAvailabilityNumber()]/> </span></div> 
106                </#if> 
107            </#if> 
108	    </div> 
109 
110	</div> 
111	</div> 
112	</#if> 
113 
114	<div class="ficha-information-wrapper row-fluid"> 
115	    <div class="span12 information-container ficha-header-section"> 
116	        <div class="span2 hidden-phone"> 
117                <div class="img-wrapper image-container"> 
118                <#assign venueImage = renderRequest.getContextPath()+"/images/venue-default.svg" > 
119                <#if entry.getVenueLogoURL()??> 
120                    <#assign venueImage = entry.getVenueLogoURL() > 
121                </#if> 
122                    <div class="image-helper"></div> 
123                    <img alt="ficha-img" src="${venueImage}" /> 
124                </div> 
125            </div> 
126            <div class="span6"> 
127                <#if entry.isVirtual()> 
128                    <div class="address-wrapper"> 
129                        <span class="address"><@liferay.language key="virtual.event" /></span> 
130                    </div> 
131                <#else> 
132                    <div class="address-wrapper"> 
133                        <span class="address"> 
134                            <#if venueViewURL??> 
135                            <a href="${venueViewURL}${entry.getVenueId()}/${entry.getVenueFriendlyTitle()}"> 
136                            </#if> 
137                                <b>${entry.getVenueName()}</b> 
138                            <#if venueViewURL??> 
139                            </a> 
140                            </#if> 
141                        </span> 
142                    </div> 
143                    <#if entry.getVenueAddress()??> 
144                        <div class="address-wrapper"> 
145                            <span class="event-icon icon-map-marker"></span> 
146                            <span class="address"><a href="#" class="event-detail-map-toggle">${entry.getVenueAddress()}</a></span> 
147                        </div> 
148                    </#if> 
149                </#if> 
150                <div class="alert alert-block event-detail-map-box hide"> 
151                    <button type="button" class="close event-detail-map-toggle">&times;</button> 
152                    <div id="event-detail-map" style="height: 200px;"></div> 
153                </div> 
154                <div class="duration-wrapper"> 
155                    <span class="event-icon icon-calendar"></span> 
156                    <span class="duration"> 
157                        <b> 
158                            <#if entry.getEventDate()?has_content> 
159                                ${entry.getEventDate()} 
160                            <#else> 
161							    <@liferay.language key="expired.event" /> 
162                            </#if> 
163                        </b> 
164                    </span> 
165                </div> 
166            </div> 
167            <#if entry.getSessions()?size gt 1 && (entry.getPresentationMode() != PresentationMode.CALENDAR)> 
168            <div class="span4"> 
169                <button class="btn btn-large btn-block btn-default site-button" 
170                    title="<@liferay.language key="book.your.ticket" />" 
171                    onclick="scrollToNode_PortletMode('mySessions')" 
172                    style="text-shadow: none;text-transform: uppercase;"> 
173                    <@liferay.language key="book.now" /> 
174                </button> 
175            </div> 
176            </#if> 
177	    </div> 
178 
179	    <div class="span12 information-container"> 
180	        <div class="row-fluid"> 
181	            <div class="ficha-details-wrapper less"> 
182	                <div class="ficha-details paper paper-level-1"> 
183		                <#if entry.getDescription()?has_content> 
184							${entry.getDescription()} 
185						<#else> 
186							${entry.getShortDescription()} 
187						</#if> 
188                    </div> 
189	            </div> 
190	        </div> 
191	    </div> 
192	</div> 
193 
194    <span id="mySessions"></span> 
195    <#-- SESSIONS LIST --> 
196    <#if entry.getPresentationMode() == PresentationMode.LIST> 
197        <a name="tickets-section"></a> 
198        <div class="book-event-ticket-section"> 
199            <div class="row-fluid"> 
200                <div class="span7"> 
201                    <span class="book-ticket-label"><h3><@liferay.language key="book.your.ticket" /></h3></span> 
202                    <span class="select-event-date-label"><@liferay.language key="choose.date.and.buy.your.tickets" /></span> 
203                </div> 
204            </div> 
205 
206            <div class="row-fluid"> 
207                <div class="span12"> 
208                    <#list entry.getGroupedSessions()?keys as date> 
209                        <#assign sessions = entry.getGroupedSessions()[date]> 
210                        <#list sessions as session> 
211                            <div class="paper paper-level-1 book-event-ticket-wrapper"> 
212                                <div class="column-date span2"> 
213                                    <div class="event-detail-month">${session.getMonth()}</div> 
214                                    <div class="event-detail-date">${session.getDay()}</div> 
215                                    <div class="event-detail-day">${session.getDayOfWeek()}</div> 
216                                    <div class="event-detail-year">${session.getYear()}</div> 
217                                </div> 
218                                <div class="column-info span7"> 
219                                    <div class="event-detail-title mobile-hidden"><h4>${session.getName()}</h4></div> 
220                                    <div class="event-detail-time-and-location"> 
221                                        <p class="event-detail-time"> 
222                                            <span class="event-icon icon-time"></span> 
223                                            ${session.getTime()} h 
224                                        </p> 
225                                        <#if session.getVenue()??> 
226                                            <p class="event-detail-location mobile-hidden"> 
227                                                <span class="event-icon icon-map-marker"></span> 
228                                                ${session.getVenue()}<#if session.getVenueCity()?has_content>, ${session.getVenueCity()}</#if> 
229                                            </p> 
230                                        </#if> 
231                                        <p class="hidden-desktop"> 
232                                            ${session.getName()} 
233                                        </p> 
234                                    </div> 
235                                </div> 
236                                <div class="column-price span3"> 
237                                    <div class="event-detail-price"> 
238                                        <@liferay.language key="from" /> 
239 
240                                        <#if customFromPrices[session.getSessionId()]?has_content> 
241                                            ${customFromPrices[session.getSessionId()]} 
242                                        <#elseif session.getBoxOfficePrice() == 'event.ticket.price.free'> 
243                                            0 € 
244                                        <#else> 
245                                            <#if session.hasDiscountPrice()> 
246                                                <span class="actual-price"><span>${session.getBoxOfficePrice()}</span></span> 
247                                                <span class="discount-price"><span>${session.getPriceWithoutCommission()}</span></span> 
248                                            <#else> 
249                                                <span class="discount-price"> 
250                                                <span> 
251                                                    <@liferay.language key="${session.getBoxOfficePrice()}" /> 
252                                                </span> 
253                                            </span> 
254                                            </#if> 
255                                        </#if> 
256                                    </div> 
257                                    <div class="buy-button-wrapper"> 
258                                        <#if session.saleEnded()> 
259                                            <button type="submit" class="btn btn-sumbit" 
260                                                    disabled="disabled"> 
261                                                <@liferay.language key="online.sale.closed" /> 
262                                            </button> 
263                                        <#elseif session.soldOut()> 
264                                            <button type="submit" class="btn btn-sumbit" 
265                                                    disabled="disabled"> 
266                                                <@liferay.language key="sold.out" /> 
267                                            </button> 
268                                        <#else> 
269                                            <button type="submit" class="btn btn-sumbit" 
270                                                    title="<@liferay.language key="go.to.buy.page"/>" 
271                                                    value="${session.getSessionId()}" 
272                                                    <#if shoppingViewURL?has_content>onclick="location.href = '${shoppingViewURL}'+this.value;"</#if>> 
273                                                <@liferay.language key="buy" /> 
274                                            </button> 
275                                            <#if session.getTicketAvailabilityNumber() <= numberOfTicketsForTicketsLeft> 
276                                                <div class="text-center"><span class="label label-important"> 
277                                                        <@liferay.language_format key="x.tickets.available" arguments=[session.getTicketAvailabilityNumber()]/> </span> 
278                                                </div> 
279                                            </#if> 
280                                        </#if> 
281                                    </div> 
282                                </div> 
283                            </div> 
284                        </#list> 
285                    </#list> 
286 
287                    <!-- Customfromprices --> 
288                    <!-- 
289                <#list entry.getGroupedSessions()?keys as date> 
290                <#assign sessions = entry.getGroupedSessions()[date]> 
291                <#list sessions as session> 
292                ${session.getSessionId()}=0,00 €<br> 
293                </#list> 
294                </#list> 
295                --> 
296 
297                </div> 
298            </div> 
299        </div> 
300    </#if> 
301 
302    <#-- SCHEDULER --> 
303    <#if entry.getPresentationMode() == PresentationMode.CALENDAR> 
304        <div id="eventScheduler"></div> 
305        <script type="text/javascript"> 
306            var monthView; 
307            var scheduler; 
308            AUI().use('aui-scheduler', 'aui-io-request', 'node', function (A) { 
309                monthView = new A.SchedulerMonthView({ 
310                    isoTime: true, 
311                    displayRows: 1, 
312                    strings: { 
313                        show: '', 
314                        more: '', 
315                        close: '<@liferay.language key="close" />' 
316
317                }); 
318 
319                scheduler = new A.Scheduler( 
320
321                        boundingBox: '#eventScheduler', 
322                        date: new Date(${entry.getUpcomingSession().getYear()}, ${entry.getUpcomingSession().getMonthOfYear()} -1, ${entry.getUpcomingSession().getDay()}), 
323                        render: true, 
324                        firstDayOfWeek: 1, 
325                        views: [monthView] 
326                    }); 
327 
328                scheduler.on('render', schedulerEventsByDateInterval); 
329                A.delegate("click", schedulerEventsByDateInterval, ".scheduler-base-controls", "button, input[type=button]"); 
330 
331                function schedulerEventsByDateInterval() { 
332                    A.io.request('<@liferay_portlet.resourceURL />', { 
333                        method: 'POST', 
334                        dataType: 'json', 
335                        requestHeaders: {Accept: 'application/json'}, 
336                        data: { 
337                            <@liferay_portlet.namespace />eventId: '${entry.getEventId()}', 
338                            <@liferay_portlet.namespace />startDateTime: monthView.getDateInterval().startDate.getTime(), 
339                            <@liferay_portlet.namespace />endDateTime: monthView.getDateInterval().endDate.getTime() 
340                        }, 
341                        on: { 
342                            success: function () { 
343                                var groupedSessions = this.get('responseData'); 
344                                var events = []; 
345                                if (groupedSessions) { 
346                                    Object.keys(groupedSessions).forEach(function (date) { 
347                                        var sessions = groupedSessions[date]; 
348                                        sessions.forEach(function (session) { 
349                                            var dynamicContent; 
350                                            if (session.saleEnded) 
351                                                dynamicContent = '<@liferay.language key="online.sale.closed" />'; 
352                                            else if (session.soldOut) { 
353                                                dynamicContent = '<@liferay.language key="sold.out" />'; 
354                                            } else { 
355                                                dynamicContent = '<a href="${shoppingViewURL}' + session.sessionId + '">' + 
356                                                    (session.ticketAvailabilityNumber <= ${numberOfTicketsForTicketsLeft} ? 
357                                                        '<@liferay.language key="x.tickets.available"/>' 
358                                                            .replace('{0}', session.ticketAvailabilityNumber) : 
359                                                        '<@liferay.language key="reserve" />') + '</a>'; 
360
361                                            events.push({ 
362                                                id: session.sessionId, 
363                                                content: dynamicContent, 
364                                                startDate: new Date(session.year, session.monthOfYear - 1, session.day, session.hour, session.minute), 
365                                                disabled: true, 
366                                                titleDateFormat: {startDate:"%H:%M"}, 
367                                            }); 
368                                        }); 
369                                    }); 
370
371                                scheduler.resetEvents(events); 
372                                scheduler.syncEventsUI(); 
373
374
375                    }); 
376
377            }); 
378        </script> 
379        <style> 
380            .aui .scheduler-event-disabled { 
381                background-image: inherit; 
382                opacity: unset; 
383                background-color: inherit !important; 
384                color: inherit !important; 
385
386 
387            .aui .scheduler-event { 
388                z-index: 0; 
389
390 
391            .aui .scheduler-event-content:hover { 
392                cursor: inherit; 
393                text-decoration: inherit; 
394
395 
396            .aui .scheduler-base-view-date { 
397                text-transform: uppercase; 
398
399 
400            .aui .scheduler-base-today, 
401            .aui .scheduler-base-views, 
402            .aui .scheduler-event-icon-disabled { 
403                display: none !important; 
404
405 
406            .aui .scheduler-view-table-data-col { 
407                text-align: center; 
408                padding-bottom: 10px; 
409
410 
411            @media (max-width: 480px) { 
412                .aui .scheduler-base-controls { 
413                    text-align: center; 
414
415
416 
417            @media (min-width: 1200px) { 
418                .aui .scheduler-view-table-more:before { 
419                    content: "<@liferay.language key="reserve" />:"; 
420                    display: block; 
421
422 
423                .aui .scheduler-view-table-more:after { 
424                    content: "<@liferay.language key="sessions" />"; 
425                    text-transform: lowercase; 
426
427
428        </style> 
429    </#if> 
430 
431    <#-- RELATED TICKET PACKS --> 
432	<#if entry.getRelatedTicketPacks()?has_content> 
433	<div class="relevent-events-wrapper mobile-hidden"> 
434	    <div class="relevent-events-content-wrapper container"> 
435	        <div class="relevent-events-section-title-wrapper"> 
436	            <span class="relevent-events-section-title"> 
437	                <h3><@liferay.language key="you.might.also.be.interested" /></h3> 
438				</span> 
439	            <div class="relevent-events-section-subtitle"> 
440					<span> 
441	                    <@liferay.language key="select.a.pack.and.buy" /> 
442					</span> 
443	            </div> 
444	        </div> 
445	        <div class="relevent-events-box row-fluid"> 
446	            <div class="span12"> 
447 
448	                <#list entry.getRelatedTicketPacks() as curTicketPack> 
449	                    <#if curTicketPack_index == 3> 
450	                        <#break> 
451	                    </#if> 
452	                    <div class="span6 paper relevent-event"> 
453							<div class="event-image-wrapper"> 
454								<#if curTicketPack.getImages()?has_content> 
455                                <img alt="<@liferay.language_format key="buy.ticket.pack" arguments=[curTicketPack.getName()]/>" 
456                                     src="${curTicketPack.getImages()?first}?t=1" class="event-image"/> 
457                                </#if> 
458                            </div> 
459	                        <div class="event-content-wrapper"> 
460	                            <div class="event-content-text"> 
461                                    <div class="event-title"> 
462	                                    <h4> 
463	                                        ${curTicketPack.getName()} 
464	                                    </h4> 
465                                    </div> 
466	                            </div> 
467	                            <#if curTicketPack.soldOut()> 
468                                    <button class="btn btn-large btn-block btn-default single-booking-button site-button" 
469                                        disabled="disabled" 
470
471                                        <@liferay.language key="sold.out" /> 
472                                    </button> 
473	                            <#else> 
474                                    <#if shoppingTicketPackViewURL?has_content> 
475                                    <div> 
476                                        <button class="btn btn-block btn-inverse" type="button" onclick="location.href = '${shoppingTicketPackViewURL}${curTicketPack.getTicketPackId()}';"> 
477                                            <@liferay.language key="buy" /> 
478                                        </button> 
479                                    </div> 
480	                                </#if> 
481	                            </#if> 
482	                        </div> 
483	                    </div> 
484	                </#list> 
485	            </div> 
486	        </div> 
487	    </div> 
488	</div> 
489	</#if> 
490</div> 
491 
492<#-- LEAFLET MAP --> 
493<script> 
494    var venueMap; 
495    venueMap = L.map('event-detail-map').setView([${entry.getVenueLatitude()}, ${entry.getVenueLongitude()}], 15); 
496    L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', { 
497        maxZoom: 18, 
498    }).addTo(venueMap); 
499    L.marker([${entry.getVenueLatitude()}, ${entry.getVenueLongitude()}]).addTo(venueMap); 
500 
501    AUI().use( 
502      'node', 'io', 'event', 'animation', 
503      function (A) { 
504        if ( A.all('.event-detail-map-toggle') ) { 
505            A.all('.event-detail-map-toggle').on( 
506                'click', 
507                function() { 
508                    if ( A.one('.event-detail-map-box') ) { 
509                        A.one('.event-detail-map-box').toggleClass('hide'); 
510                        venueMap.invalidateSize(); 
511                    }; 
512
513            ); 
514        }; 
515
516    ); 
517</script> 
518 
519<#-- SCROLL TO NODE --> 
520<script> 
521function scrollToNode_PortletMode(nodeId) { 
522    AUI().use('aui-node', 'dom-base', 'anim', 'anim-scroll', function(A) { 
523        var scrollNode; 
524 
525        if (nodeId) { 
526            scrollNode = A.one('#' + nodeId); 
527
528 
529        if (scrollNode) { 
530            var offset = scrollNode.getY() - 70; 
531            var scrollNodes = A.all('html,body'); 
532            scrollNodes.each(function animateScroll(item) { 
533                var anim = new A.Anim({ 
534                    node : item, 
535                    duration : 0.3, 
536                    easing : 'easeBoth', 
537                    to : { 
538                        scrollTop : offset 
539
540                }); 
541                anim.run(); 
542            }); 
543
544    }); 
545
546</script>