null 2024 AVVISO PUBBLICO PER LA CONCESSIONE IN USO DI ALCUNI SPAZI SCOLASTICI DEL MUNICIPIO 2 IN ORARIO EXTRASCOLASTICO RESISI DISPONIBILI DA NOVEMBRE 2024 A GIUGNO 2025 - ANNO SCOLASTICO 202425

An error occurred while processing the template.
Java method "com.sun.proxy.$Proxy1680.getArticle(long, String)" threw an exception when invoked on com.sun.proxy.$Proxy1680 object "it.comune.milano.jacategory.service.wrapper.CdmJacategoryServicewrapper@24674afe"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign currentArticle = journalArtic...  [in template "20097#20123#" at line 20, column 1]
----
1<#-- Get themeDisplay --> 
2<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext() /> 
3<#assign themeDisplay = serviceContext.getThemeDisplay() /> 
4<#assign portalUtil = staticUtil["com.liferay.portal.kernel.util.PortalUtil"]> 
5 
6<#-- Get SERVICE Start --> 
7<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
8<#assign categoryService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")> 
9<#assign vocabularyService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService")> 
10<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
11<#assign assetLinkLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService") /> 
12<#assign dLFileLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") /> 
13<#assign textFormatter = staticUtil["com.liferay.portal.kernel.util.TextFormatter"]> 
14<#assign jsonFactoryUtil = serviceLocator.findService("com.liferay.portal.kernel.json.JSONFactoryUtil")/> 
15<#assign cdmLocalService = serviceLocator.findService("it.comune.milano.service.service.CdmLocalService") /> 
16<#assign layoutLocalService = staticUtil["com.liferay.portal.kernel.service.LayoutLocalServiceUtil"]> 
17<#-- Get SERVICE End --> 
18 
19<#-- Get Article Data--> 
20<#assign currentArticle = journalArticleLocalService.getArticle(groupId, .vars['reserved-article-id'].data) /> 
21<#assign rootMioArticolo = saxReaderUtil.read(currentArticle.getContentByLocale(localeUtil.toLanguageId(localeUtil.getDefault()))).getRootElement() /> 
22<#assign currentArticleResourcePrimKey = currentArticle.getResourcePrimKey() /> 
23 
24<#-- Get Category e Vocabulary --> 
25<#assign categoryList=categoryService.getCategories("com.liferay.journal.model.JournalArticle", currentArticleResourcePrimKey) > 
26<#assign vocabularyStatoBando = vocabularyService.getGroupVocabulary(groupId, "Tipo Stato Bando Gara"?lower_case) /> 
27<#assign vocabularyTipoCategoriaBando = vocabularyService.getGroupVocabulary(groupId, "tipo categoria bando di gara"?lower_case) /> 
28<#assign vocabularyTipoBando = vocabularyService.getGroupVocabulary(groupId, "Tipo Bando"?lower_case) /> 
29<#assign vocabularyDirezione = vocabularyService.getGroupVocabulary(groupId, "Direzione Riferimento Bando di Gara"?lower_case) /> 
30 
31<#assign currentArticleAssetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", currentArticleResourcePrimKey) /> 
32<#assign currentArticleAssetEntryId = currentArticleAssetEntry.getEntryId() /> 
33<#assign currentArticleRelatedLinks = assetLinkLocalService.getDirectLinks(currentArticleAssetEntryId) /> 
34 
35<#assign rootBreadcrumb = cdmLocalService.titoloRootBreadCrumb(themeDisplay, currentArticle.getDDMStructureKey())/> 
36 
37<style> 
38    .component-title, .lfr-asset-anchor, .metadata-author { 
39        display: none !important; 
40
41     
42    .text-primary { 
43	    color: #007bff !important; 
44
45	 
46	a.text-primary:hover { 
47	    color: #007bff !important; 
48
49	 
50	#_com_liferay_site_navigation_breadcrumb_web_portlet_SiteNavigationBreadcrumbPortlet_breadcrumbs-defaultScreen { 
51    	display: none !important; 
52
53</style> 
54 
55<nav aria-label="Briciole di pane"> 
56	<ul class="breadcrumb breadcrumb-vertical"> 
57		<li class=""> 
58			<a href="/ricerca-bandi-gara"> 
59				${rootBreadcrumb} 
60			</a> 
61		</li> 
62		<li class="active" aria-current="page"> 
63			${titolo.getData()?truncate(50)} 
64		</li> 
65	</ul> 
66</nav> 
67 
68<div class="row"> 
69	<div class="col-md-12">  
70		<#if saxReaderUtil.createXPath("dynamic-element[@name='titolo']").selectNodes(rootMioArticolo)?size != 0 && titolo.getData() !=''> 
71            <h2>${titolo.getData()}</h2> 
72		</#if> 
73		 
74		<section class="lista_generica"> 
75		  	<ul> 
76				<li> 
77					<#if categoryList?has_content> 
78						<#list categoryList as categoryList> 
79							<#if categoryList.vocabularyId == vocabularyTipoCategoriaBando.vocabularyId> 
80								<p><strong>Categoria: </strong> 
81									<span class="uppercase">${categoryList.getName()}</span> 
82								</p> 
83							</#if> 
84						</#list> 
85					</#if> 
86					<#if categoryList?has_content> 
87						<#list categoryList as categoryList> 
88							<#if categoryList.vocabularyId == vocabularyTipoBando.vocabularyId> 
89								<p><strong>Tipologia: </strong> 
90									<span class="uppercase">${categoryList.getName()}</span> 
91								</p> 
92							</#if> 
93						</#list> 
94					</#if> 
95					<#if categoryList?has_content> 
96						<#list categoryList as categoryList> 
97							<#if categoryList.vocabularyId == vocabularyDirezione.vocabularyId> 
98								<p><strong>Direzione: </strong> 
99									<span class="uppercase">${categoryList.getName()}</span> 
100								</p> 
101							</#if> 
102						</#list> 
103					</#if> 
104					<#if categoryList?has_content> 
105						<#list categoryList as categoryList> 
106							<#if categoryList.vocabularyId == vocabularyStatoBando.vocabularyId> 
107								<p><strong>Stato: </strong> 
108									<#if categoryList.getName()?upper_case == "APERTO"> 
109										<span class="text-success"> 
110									<#elseif categoryList.getName()?upper_case == "CHIUSO"> 
111										<span class="text-danger"> 
112									<#elseif categoryList.getName()?upper_case == "AGGIUDICATO"> 
113										<span class="text-primary"> 
114									</#if > 
115									<b>${categoryList.getName()?upper_case}</b></span> 
116								</p> 
117							</#if> 
118						</#list> 
119					</#if> 
120					<#if dataEmissioneBandoDiGara.getData() !=''> 
121						<p><strong>Data Emissione: </strong> 
122							<#assign dataEmissioneBandoDiGara_Data = getterUtil.getString(dataEmissioneBandoDiGara.getData())> 
123							<#if validator.isNotNull(dataEmissioneBandoDiGara_Data)> 
124								<#assign dataEmissioneBandoDiGara_DateObj = dateUtil.parseDate("yyyy-MM-dd", dataEmissioneBandoDiGara_Data, locale)> 
125 
126								${dateUtil.getDate(dataEmissioneBandoDiGara_DateObj, "dd/MM/yyyy", locale)} 
127							</#if> 
128							<#if orarioEmissioneDocumentoBando?? && orarioEmissioneDocumentoBando.getData() != '' > 
129								<#assign secondoStr = '00' > 
130									<#if minutoEmissioneDocumentoBando?? && minutoEmissioneDocumentoBando.getData() != '' > 
131										${orarioEmissioneDocumentoBando.getData()?substring(0,2)}:${minutoEmissioneDocumentoBando.getData()}:${secondoStr} 
132									<#else> 
133										${orarioEmissioneDocumentoBando.getData()?substring(0,2)}:00:${secondoStr} 
134									</#if> 
135							</#if> 
136						</p> 
137					</#if> 
138					<#if dataScadenzaBandoDiGara.getData() !=''> 
139						<p><strong>Data Scadenza: </strong> 
140							<#assign dataScadenzaBandoDiGara_Data = getterUtil.getString(dataScadenzaBandoDiGara.getData())> 
141 
142							<#if validator.isNotNull(dataScadenzaBandoDiGara_Data)> 
143								<#assign dataScadenzaBandoDiGara_DateObj = dateUtil.parseDate("yyyy-MM-dd", dataScadenzaBandoDiGara_Data, locale)> 
144 
145								${dateUtil.getDate(dataScadenzaBandoDiGara_DateObj, "dd/MM/yyyy", locale)} 
146							</#if> 
147							<#if orarioScadenzaBandoDiGara?? && orarioScadenzaBandoDiGara.getData() != '' > 
148								<#assign secondoStr = '00' > 
149								<#if minutoScadenzaBandoDiGara?? && minutoScadenzaBandoDiGara.getData() != '' > 
150									${orarioScadenzaBandoDiGara.getData()?substring(0,2)}:${minutoScadenzaBandoDiGara.getData()}:${secondoStr} 
151								<#else> 
152									${orarioScadenzaBandoDiGara.getData()?substring(0,2)}:00:${secondoStr} 
153								</#if> 
154							</#if> 
155						</p> 
156					</#if> 
157					<#if dataPubblicazioneEsitoBandoDiGara.getData() !=''> 
158						<p><strong>Data Determina Graduatoria: </strong> 
159							<#assign dataPubblicazioneEsitoBandoDiGara_Data = getterUtil.getString(dataPubblicazioneEsitoBandoDiGara.getData())> 
160 
161							<#if validator.isNotNull(dataPubblicazioneEsitoBandoDiGara_Data)> 
162								<#assign dataPubblicazioneEsitoBandoDiGara_DateObj = dateUtil.parseDate("yyyy-MM-dd", dataPubblicazioneEsitoBandoDiGara_Data, locale)> 
163								${dateUtil.getDate(dataPubblicazioneEsitoBandoDiGara_DateObj, "dd/MM/yyyy", locale)} 
164							</#if> 
165						</p> 
166					</#if> 
167				</li> 
168			</ul> 
169		</section> 
170								 
171		<#if (descrizione?has_content && descrizione.getData() !='') || noteBandoDiGara.getData() !=''> 
172			<section id="accordionservizi1" class="accordion boxed servizi"> 
173				<article class="card"> 
174					<div class="card-header" id="headingservizi2"> 
175						<h4 class="mb-0"> 
176							<a class="collapsed" data-toggle="collapse" href="#collapseservizi2" aria-expanded="false" aria-controls="collapseservizi2">Testo del bando</a> 
177						</h4> 
178					</div> 
179					<div id="collapseservizi2" data-parent="#accordionservizi1" class="collapse" role="tabpanel" aria-labelledby="headingservizi2"> 
180					  	<div class="card-body"> 
181							<div class="content-editor blu"> 
182								<#if descrizione?has_content && descrizione.getData() !=''> 
183									<p>${descrizione.getData()}</p> 
184								</#if> 
185								<#if noteBandoDiGara.getData() !='' > 
186									<p>Note: ${noteBandoDiGara.getData()}</p> 
187								</#if> 
188							</div> 
189					  	</div> 
190					</div> 
191				</article> 
192			</section> 
193		</#if> 
194		 
195<!--	ACCORDION "FAQ"	-->	 
196		<#if faq?has_content && faq.getData() !=''> 
197			<section id="accordion21" class="accordion boxed"> 
198				<h3 class="sr-only">Accordion</h3> 
199			  	<article class="card collegamenti"> 
200					<div class="card-header" id="heading21"> 
201				  		<h4 class="mb-0"> <a class="collapsed" data-toggle="collapse" href="#collapse21" aria-expanded="false" aria-controls="collapse41">FAQ</a></h4> 
202					</div> 
203					<div id="collapse21" class="collapse" role="tabpanel" aria-labelledby="heading21"> 
204				  		<div class="card-body"> 
205				  			${faq.getData()} 
206				  		</div> 
207					</div> 
208			  	</article> 
209			</section> 
210		</#if> 
211 
212		<#if urlAccediBando.getData() != ''> 
213			<h3 class="servizionline"> 
214				<a href="${urlAccediBando.getData()}" title="Accedi al bando" target="_blank">Accedi al bando</a> 
215			</h3> 
216		</#if> 
217		 
218		<!--	ACCORDION "ALLEGATI"	--> 
219		<#if documentoAllegato?has_content && documentoAllegato.getData() !=''> 
220			<section id="accordion31" class="accordion boxed"> 
221				<article class="card allegati"> 
222					<div class="card-header" id="heading31"> 
223						<h4 class="mb-0">  
224							<a class="collapsed" data-toggle="collapse" href="#collapse31" aria-expanded="false" aria-controls="collapse31">  
225								Allegati  
226							</a>  
227						</h4> 
228					</div> 
229					<div id="collapse31" class="collapse" role="tabpanel" aria-labelledby="heading31"> 
230						<div class="card-body"> 
231							<ul> 
232								<#list documentoAllegato.getSiblings() as node> 
233									<#assign doc=getDlFileEntry(node.getData()) /> 
234									<#if doc != ''> 
235										<#assign nomeAllegato = ""> 
236										<#if node.label.getData() != ''> 
237											<#assign nomeAllegato = node.label.getData()> 
238										<#else> 
239											<#assign nomeAllegato = doc.getTitle()> 
240										</#if> 
241										<li class="${doc.getExtension()?lower_case}"> 
242											<a class="anchorNomeAllegato" href="${node.getData()}" target="_blank">${nomeAllegato}</a> 
243											<span>(${doc.getExtension()} - ${textFormatter.formatStorageSize(doc.size, locale)}) - ${dateUtil.getDate(doc.getCreateDate(), "dd/MM/yyyy", locale)}</span> 
244											<br/> 
245											<#if node.descrizioneAllegato?? && node.descrizioneAllegato.getData() != ''> 
246												<em>${node.descrizioneAllegato.getData()}</em> 
247											</#if> 
248										</li> 
249									</#if> 
250								</#list> 
251							</ul> 
252						</div> 
253					</div> 
254				</article> 
255			</section> 
256		</#if> 
257 
258		<!--	ACCORDION "COLLEGAMENTI"	--> 
259		<#if Collegamenti.urlCollegamentoEsternoPaginaStandard.getData()!= "" || Collegamenti.collegamentoContenutoWeb.getData()!="" > 
260			<section id="accordion41" class="accordion boxed"> 
261				<article class="card collegamenti"> 
262					<div class="card-header" id="heading41"> 
263					<h4 class="mb-0">  
264						<a class="collapsed" data-toggle="collapse" href="#collapse41" aria-expanded="false" aria-controls="collapse41">  
265							Collegamenti  
266						</a>  
267					</h4> 
268					</div> 
269					<div id="collapse41" class="collapse" role="tabpanel" aria-labelledby="heading41"> 
270						<div class="card-body"> 
271							<#if Collegamenti.collegamentoContenutoWeb.getData()!='' > 
272								<#list Collegamenti.collegamentoContenutoWeb.getSiblings() as cur_urlCollegamentoContenutoWeb > 
273									<#assign clsPk = jsonFactoryUtil.createJSONObject(cur_urlCollegamentoContenutoWeb.getData()).getLong("classPK")/> 
274									<#assign articleTitle = jsonFactoryUtil.createJSONObject(cur_urlCollegamentoContenutoWeb.getData()).getString("title")/> 
275									<#assign jArtic = journalArticleLocalService.getLatestArticle(clsPk)/> 
276									<#assign urlFromArticleId = cdmLocalService.getUrlFromArticleId(jArtic.articleId)/> 
277									<p> 
278										<a href="${urlFromArticleId}" target="_blank">${articleTitle}</a> 
279									</p> 
280								</#list> 
281							</#if> 
282							<#if Collegamenti.urlCollegamentoEsternoPaginaStandard.getData()!='' > 
283								<#list Collegamenti.urlCollegamentoEsternoPaginaStandard.getSiblings() as cur_urlCollegamentoEsternoPaginaStandard > 
284									<#if cur_urlCollegamentoEsternoPaginaStandard.checkAperturaNuovaPaginaCollegamentoEsternoPaginaStandard.getData() = "true"> 
285										<p> 
286											<a href="${cur_urlCollegamentoEsternoPaginaStandard.getData()}" target="_blank"> 
287												${cur_urlCollegamentoEsternoPaginaStandard.campoLiberoCollegamentoEsternoPaginaStandard.getData()} 
288											</a> 
289										</p>     
290									<#else> 
291										<p> 
292											<a href="{$cur_urlCollegamentoEsternoPaginaStandard.getData()}"> 
293												${cur_urlCollegamentoEsternoPaginaStandard.campoLiberoCollegamentoEsternoPaginaStandard.getData()} 
294											</a> 
295										</p>      
296									</#if> 
297								</#list> 
298							</#if>    
299						</div> 
300					</div> 
301				</article> 
302			</section>		 
303		</#if> 
304		 
305		<#if urlChiarimentiBando.getData() != ''> 
306			<h3 class="servizionline"> 
307				<a href="${urlChiarimentiBando.getData()}" title="Richiedi chiarimenti sul bando" target="_blank">Richiedi chiarimenti sul bando</a> 
308			</h3> 
309		</#if> 
310		 
311	</div> 
312</div> 
313 
314<section class="infopage"> 
315	<#if validator.isNotNull(currentArticle.getModifiedDate())> 
316		<p class="updatedpage">Aggiornato il: ${dateUtil.getDate(currentArticle.getModifiedDate(), "dd/MM/yyyy", locale)}</p> 
317	</#if> 
318	<div> 
319		<p class="printpage"> 
320			<a href="#" onclick="window.print();" title="stampa il contenuto di questa pagina">Stampa<span class="sr-only"> questa pagina</span></a> 
321		</p> 
322	</div> 
323</section> 
324	 
325 
326<#function getDlFileEntry url> 
327    <#assign parts=url?string?split("/") /> 
328 
329    <#assign groupId=0 /> 
330    <#assign uuid='' /> 
331    <#assign dlFileEntry='' /> 
332 
333    <#list parts as curPart> 
334 
335      <#if curPart_index == 2> 
336        <#assign groupId=parts[2]?number /> 
337      </#if> 
338 
339      <#if curPart_index == 5> 
340        <#assign uuid=parts[5]?string?split("?")[0] /> 
341      </#if> 
342    </#list> 
343 
344    <#if groupId != 0 &&  uuid != ''> 
345        <#assign dlFileEntry=dLFileLocalService.fetchDLFileEntryByUuidAndGroupId(uuid, groupId)! /> 
346    </#if> 
347 
348    <#return dlFileEntry /> 
349 
350</#function> 
351 
352<!--<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>--> 
353<script type="text/javascript" src="https://getbootstrap.com/docs/4.0/dist/js/bootstrap.min.js"></script>  
354<script type="text/javascript"> 
355	// Codice JS per lo scrollTop all'apertura dell'accordion 
356	$('.collapse').on('shown.bs.collapse', function(e) { 
357		var $card = $(this).closest('.card'), 
358	    	$card_offset = $card.offset().top, 
359	    	$header_group_h = $('.group-header').outerHeight(); // Altezza del gruppo header (inclusi margin, padding e border) 
360		$('html,body').animate({ 
361	    	scrollTop: $card_offset - $header_group_h 
362		}, 200); 
363	}); 
364</script>