null Rinnovo abbonamento servizi on-line gruppo delfino
Si è verificato un errore nell'elaborarazione del modello.
The following has evaluated to null or missing: ==> administrative_people_webContentData.classPK [in template "34140#34167#40318" at line 721, column 141] ---- Tip: It's the step after the last dot that caused this error, not those before it. ---- Tip: If the failing expression is known to be legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign cur_administrative_staff_clas... [in template "34140#34167#40318" at line 721, column 97] ----
1<#-- ricavo i valori dei custom field con structureKey -->
2<#if validator.isNotNull(themeDisplay.getLayout().getGroup().getExpandoBridge()) >
3 <#assign STRUCTURE_KEY_UFFICIO = "" />
4 <#assign STRUCTURE_KEY_PERSONALE_AMMINISTRATIVO = "" />
5 <#if (( themeDisplay.getLayout().getGroup().getExpandoBridge().hasAttribute("structure_key_ufficio"))) >
6 <#if themeDisplay.getLayout().getGroup().getExpandoBridge().getAttribute("structure_key_ufficio")??>
7 <#assign STRUCTURE_KEY_UFFICIO = themeDisplay.getLayout().getGroup().getExpandoBridge().getAttribute("structure_key_ufficio")/>
8 </#if>
9 </#if>
10 <#if (( themeDisplay.getLayout().getGroup().getExpandoBridge().hasAttribute("structure_key_personale_amministrativo"))) >
11 <#if themeDisplay.getLayout().getGroup().getExpandoBridge().getAttribute("structure_key_personale_amministrativo")??>
12 <#assign STRUCTURE_KEY_PERSONALE_AMMINISTRATIVO = themeDisplay.getLayout().getGroup().getExpandoBridge().getAttribute("structure_key_personale_amministrativo")/>
13 </#if>
14 </#if>
15</#if>
16
17<#-- instanceId -->
18<#assign instanceId = themeDisplay.getPortletDisplay().getId()?keep_after("INSTANCE_") />
19
20<#-- etichette -->
21<#assign label_bando_gara_contratto = languageUtil.get(locale, "label_bando_gara_contratto") />
22<#assign label_numero = languageUtil.get(locale, "label_numero") />
23<#assign label_del = languageUtil.get(locale, "label_del") />
24<#assign label_date = languageUtil.get(locale, "label_date") />
25<#assign label_data_atto = languageUtil.get(locale, "label_data_atto") />
26<#assign label_data_ultima_modifica = languageUtil.get(locale, "label_data_ultima_modifica") />
27<#assign label_data_inizio_validita = languageUtil.get(locale, "label_data_inizio_validita") />
28<#assign label_data_fine_validita = languageUtil.get(locale, "label_data_fine_validita") />
29<#assign label_data_cig = languageUtil.get(locale, "label_data_cig") />
30<#assign label_data_fine_liquidazione = languageUtil.get(locale, "label_data_fine_liquidazione") />
31<#assign label_data_inizio_lavori = languageUtil.get(locale, "label_data_inizio_lavori") />
32<#assign label_data_fine_lavori = languageUtil.get(locale, "label_data_fine_lavori") />
33<#assign label_importo = languageUtil.get(locale, "label_importo") />
34<#assign label_cig = languageUtil.get(locale, "label_cig") />
35<#assign label_importo_aggiudicazione = languageUtil.get(locale, "label_importo_aggiudicazione") />
36<#assign label_importo_somme_liquidate = languageUtil.get(locale, "label_importo_somme_liquidate") />
37<#assign label_documenti = languageUtil.get(locale, "label_documenti") />
38<#assign label_ulteriori_informazioni = languageUtil.get(locale, "label_ulteriori_informazioni") />
39<#assign label_ultimo_aggiornamento = languageUtil.get(locale, "label_ultimo_aggiornamento") />
40<#assign label_responsabile_del_procedimento = languageUtil.get(locale, "label_responsabile_del_procedimento") />
41<#assign label_ufficio_responsabile = languageUtil.get(locale, "label_ufficio_responsabile") />
42<#assign label_risorse_correlate = languageUtil.get(locale, "label_risorse_correlate") />
43<#assign label_dati_generali = languageUtil.get(locale, "label_dati_generali") />
44<#assign label_importi = languageUtil.get(locale, "label_importi") />
45<#assign label_contracting_authority_name = languageUtil.get(locale, "label_contracting_authority_name") />
46<#assign label_fiscal_code_contracting_authority = languageUtil.get(locale, "label_fiscal_code_contracting_authority") />
47<#assign label_act_custody_extremes = languageUtil.get(locale, "label_act_custody_extremes") />
48<#assign label_notes_choose_contractor_mode = languageUtil.get(locale, "label_notes_choose_contractor_mode") />
49
50<#assign label_condividi = languageUtil.get(locale, "label_condividi") />
51<#assign label_vedi_azioni = languageUtil.get(locale, "label_vedi_azioni") />
52<#assign label_argomenti = languageUtil.get(locale, "label_argomenti") />
53<#assign label_facebook = languageUtil.get(locale, "label_facebook") />
54<#assign label_twitter = languageUtil.get(locale, "label_twitter") />
55<#assign label_linkedin = languageUtil.get(locale, "label_linkedin") />
56<#assign label_whatsapp = languageUtil.get(locale, "label_whatsapp") />
57<#assign label_stampa = languageUtil.get(locale, "label_stampa") />
58<#assign label_invia = languageUtil.get(locale, "label_invia") />
59<#assign label_indice_pagina = languageUtil.get(locale, "label_indice_pagina") />
60
61<#assign label_vai_sezione = languageUtil.get(locale, "label_vai_sezione") />
62<#assign label_vai_alla_pagina = languageUtil.get(locale, "label_vai_alla_pagina") />
63<#assign label_documento = languageUtil.get(locale, "label_documento") />
64<#assign label_data = languageUtil.get(locale, "label_data") />
65
66<#-- Ricavo servizi utili in seguito -->
67<#-- Servizo per ricavare le categorie -->
68<#assign catLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") />
69<#-- Servizio per ricavare dati del journal article -->
70<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
71<#-- Servizio per ricavare il nome del gruppo corrente -->
72<#assign groupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService") />
73<#-- Nome del sito -->
74<#assign currentGroupName = groupLocalService.getGroup(groupId).getName(locale) />
75<#-- Servizio per ricavare l'oggetto layout -->
76<#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService") />
77<#assign assetLinkLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService") />
78<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") />
79
80<#-- Ricavo alcuni meta dati associati all'articolo -->
81<#-- Ricavo article id -->
82<#assign articleId = .vars['reserved-article-id'].data />
83<#-- Ricavo il titolo -->
84<#assign titolo = .vars['reserved-article-title'].data />
85<#assign titolo = escapeExtraChar(titolo) />
86
87<#-- Altri dati associati all'articolo che ricavo tramite API -->
88<#assign article = journalArticleLocalService.getArticle( groupId, articleId ) />
89
90<#-- Data ultima modifica articolo -->
91<#assign articleModifiedDateObj = article.getModifiedDate() />
92<#if validator.isNotNull(articleModifiedDateObj)>
93 <#assign articleModifiedDate = dateUtil.getDate(articleModifiedDateObj, "dd/MM/yyyy, hh:mm", locale) />
94</#if>
95
96<#-- Url Title journal article -->
97<#assign articleUrlTitle = article.getUrlTitle() />
98<#-- Primary key journal article -->
99<#assign articlePrimKey = article.resourcePrimKey/>
100
101<#-- Se il carattere indicato è il prefisso della categoria, indica che la stessa non deve essere mostrata a video, ma viene solo usata per scopi funzionali -->
102<#assign PREFIX_SERVICE_CATEGORY = "_" />
103
104<#-- Ricavo tutte le categorie associate ad un articolo a meno di quelle che hanno un prefisso "_" -->
105<#function getCategoryByArticlePrimKey articlePrimKey>
106 <#assign tmp = "" />
107 <#assign articleCatNames = catLocalService.getCategories("com.liferay.journal.model.JournalArticle", getterUtil.getLong(articlePrimKey)) />
108 <#if (articleCatNames?size > 0)>
109 <#list articleCatNames as category>
110 <#if category.name?substring(0,1) != PREFIX_SERVICE_CATEGORY >
111 <#assign tmp = tmp + category.name + ", " />
112 </#if>
113 </#list>
114 <#assign tmp = tmp?keep_before_last(",") />
115 </#if>
116 <#return tmp>
117</#function>
118
119<#-- Variante: restituisce solo la lista di oggetti category -->
120<#function getListCategoryByArticlePrimKey articlePrimKey>
121 <#assign listCategories = [] />
122 <#assign articleCat = catLocalService.getCategories("com.liferay.journal.model.JournalArticle", getterUtil.getLong(articlePrimKey)) />
123 <#if (articleCat?size > 0)>
124 <#list articleCat as category>
125 <#if category.name?substring(0,1) != PREFIX_SERVICE_CATEGORY >
126 <#assign listCategories = listCategories + [category] />
127 </#if>
128 </#list>
129 </#if>
130 <#return listCategories>
131</#function>
132
133<#-- Funzione formatta euro -->
134<#function formatEuro amount>
135 <#assign str = amount?replace("\\.","" "r")?replace(",","." "r")>
136 <#attempt>
137 <#assign x = str?number>
138 <#return x?string[",##0.00"]>
139 <#recover>
140 <#return amount>
141 </#attempt>
142</#function>
143
144<#-- Funzione escape su stringa -->
145<#function escapeExtraChar text>
146 <#return text?replace("\"",""", "r")?replace("'","’", "r")>
147</#function>
148
149<#-- Verifico se il primo elemento di una lista esiste -->
150<#function firstOfListNotEmpty list>
151 <#assign result = false />
152 <#if list?? && list?has_content && list.getSiblings()?has_content && list.getSiblings()?first.getData()?has_content>
153 <#assign result = true />
154 </#if>
155 <#return result>
156</#function>
157
158<#-- Verifico che ci sia almeno un elemento in lista -->
159<#function oneAtLeastOfListNotEmpty list>
160 <#assign esito = false />
161 <#if list?? && list?has_content && list.getSiblings()?has_content>
162 <#list list.getSiblings() as cur_elem>
163 <#if cur_elem.getData()?has_content>
164 <#assign esito = true />
165 <#break>
166 </#if>
167 </#list>
168 </#if>
169 <#return esito>
170</#function>
171
172<#-- parso tutte le date della struttura -->
173<#-- data dell'atto -->
174<#if validator.isNotNull(release_date) && validator.isNotNull(release_date.getData())>
175 <#assign release_date_string = getterUtil.getString(release_date.getData()) />
176 <#if validator.isNotNull(release_date_string) && release_date_string?trim != "">
177 <#assign release_date_DateObj = dateUtil.parseDate("yyyy-MM-dd", release_date.getData(), locale) />
178 <#assign release_date_res = dateUtil.getDate(release_date_DateObj, "dd MMMM yyyy", locale) />
179 <#assign release_date_compact = dateUtil.getDate(release_date_DateObj, "dd-MMM-yy", locale) />
180 </#if>
181</#if>
182
183<#-- data ultima modifica dell'atto -->
184<#if validator.isNotNull(last_modification_date) && validator.isNotNull(last_modification_date.getData())>
185 <#assign last_modification_date_string = getterUtil.getString(last_modification_date.getData()) />
186 <#if validator.isNotNull(last_modification_date_string) && last_modification_date_string?trim != "">
187 <#assign last_modification_date_DateObj = dateUtil.parseDate("yyyy-MM-dd", last_modification_date.getData(), locale) />
188 <#assign last_modification_date_res = dateUtil.getDate(last_modification_date_DateObj, "dd MMMM yyyy", locale) />
189 <#assign last_modification_date_compact = dateUtil.getDate(last_modification_date_DateObj, "dd-MMM-yy", locale) />
190 </#if>
191</#if>
192
193<#-- data inizio validita' -->
194<#if validator.isNotNull(start_date) && validator.isNotNull(start_date.getData())>
195 <#assign start_date_string = getterUtil.getString(start_date.getData()) />
196 <#if validator.isNotNull(start_date_string) && start_date_string?trim != "">
197 <#assign start_date_DateObj = dateUtil.parseDate("yyyy-MM-dd", start_date.getData(), locale) />
198 <#assign start_date_res = dateUtil.getDate(start_date_DateObj, "dd MMMM yyyy", locale) />
199 <#assign start_date_compact = dateUtil.getDate(start_date_DateObj, "dd-MMM-yy", locale) />
200 </#if>
201</#if>
202
203<#-- data fine validita' -->
204<#if validator.isNotNull(end_date) && validator.isNotNull(end_date.getData())>
205 <#assign end_date_string = getterUtil.getString(end_date.getData()) />
206 <#if validator.isNotNull(end_date_string) && end_date_string?trim != "">
207 <#assign end_date_DateObj = dateUtil.parseDate("yyyy-MM-dd", end_date.getData(), locale) />
208 <#assign end_date_res = dateUtil.getDate(end_date_DateObj, "dd MMMM yyyy", locale) />
209 <#assign end_date_compact = dateUtil.getDate(end_date_DateObj, "dd-MMM-yy", locale) />
210 </#if>
211</#if>
212
213<#-- data cig -->
214<#if validator.isNotNull(cig_date) && validator.isNotNull(cig_date.getData())>
215 <#assign cig_date_string = getterUtil.getString(cig_date.getData()) />
216 <#if validator.isNotNull(cig_date_string) && cig_date_string?trim != "">
217 <#assign cig_date_DateObj = dateUtil.parseDate("yyyy-MM-dd", cig_date.getData(), locale) />
218 <#assign cig_date_res = dateUtil.getDate(cig_date_DateObj, "dd MMMM yyyy", locale) />
219 <#assign cig_date_compact = dateUtil.getDate(cig_date_DateObj, "dd-MMM-yy", locale) />
220 </#if>
221</#if>
222
223<#-- data inizio lavori -->
224<#if validator.isNotNull(start_work_date) && validator.isNotNull(start_work_date.getData())>
225 <#assign start_work_date_string = getterUtil.getString(start_work_date.getData()) />
226 <#if validator.isNotNull(start_work_date_string) && start_work_date_string?trim != "">
227 <#assign start_work_date_DateObj = dateUtil.parseDate("yyyy-MM-dd", start_work_date.getData(), locale) />
228 <#assign start_work_date_res = dateUtil.getDate(start_work_date_DateObj, "dd MMMM yyyy", locale) />
229 <#assign start_work_date_compact = dateUtil.getDate(start_work_date_DateObj, "dd-MMM-yy", locale) />
230 </#if>
231</#if>
232
233<#-- data fine lavori -->
234<#if validator.isNotNull(end_work_date) && validator.isNotNull(end_work_date.getData())>
235 <#assign end_work_date_string = getterUtil.getString(end_work_date.getData()) />
236 <#if validator.isNotNull(end_work_date_string) && end_work_date_string?trim != "">
237 <#assign end_work_date_DateObj = dateUtil.parseDate("yyyy-MM-dd", end_work_date.getData(), locale) />
238 <#assign end_work_date_res = dateUtil.getDate(end_work_date_DateObj, "dd MMMM yyyy", locale) />
239 <#assign end_work_date_compact = dateUtil.getDate(end_work_date_DateObj, "dd-MMM-yy", locale) />
240 </#if>
241</#if>
242
243<#-- data liquidazione finale -->
244<#if validator.isNotNull(final_settlement_date) && validator.isNotNull(final_settlement_date.getData())>
245 <#assign final_settlement_date_string = getterUtil.getString(final_settlement_date.getData()) />
246 <#if validator.isNotNull(final_settlement_date_string) && final_settlement_date_string?trim != "">
247 <#assign final_settlement_date_DateObj = dateUtil.parseDate("yyyy-MM-dd", final_settlement_date.getData(), locale) />
248 <#assign final_settlement_date_res = dateUtil.getDate(final_settlement_date_DateObj, "dd MMMM yyyy", locale) />
249 <#assign final_settlement_date_compact = dateUtil.getDate(final_settlement_date_DateObj, "dd-MMM-yy", locale) />
250 </#if>
251</#if>
252
253<#-- ricavo elenco di articoli correlati -->
254<#assign currentArticleResourcePrimKey = article.getResourcePrimKey() />
255<#assign currentArticleAssetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", currentArticleResourcePrimKey) />
256<#assign currentArticleAssetEntryId = currentArticleAssetEntry.getEntryId() />
257<#assign currentArticleRelatedLinks = assetLinkLocalService.getDirectLinks(currentArticleAssetEntryId) />
258
259<#-- HTML -->
260<section class="comuni-scheda scheda-bando-gara-contratto">
261 <div class="container">
262
263 <#-- intro scheda + funzionalita trasversali -->
264 <div class="row">
265 <div class="offset-lg-1 col-lg-6 col-md-8">
266 <section class="intro-sezione">
267 <#-- titolo scheda -->
268 <#assign titoloScheda = escapeExtraChar(titolo) />
269 <#if validator.isNotNull(title) && validator.isNotNull(title.getData())>
270 <h2 class="titolo-sezione">${title.getData()}</h2>
271 <#assign titoloScheda = escapeExtraChar(title.getData()) />
272 </#if>
273 <#-- non c'è sottotitolo, ma inserisco le date di validita -->
274 <#if start_date_res?has_content>
275 <p class="sottotitolo-sezione mb-0"><span>${label_data_inizio_validita}:</span> <strong>${start_date_res}</strong></p>
276 <#if end_date_res?has_content>
277 <p class="sottotitolo-sezione mb-0"><span>${label_data_fine_validita}:</span> <strong>${end_date_res}</strong></p>
278 </#if>
279 </#if>
280 </section>
281 </div>
282
283 <#-- blocco funzionalita trasversali -->
284 <div class="offset-lg-1 col-lg-3 col-md-4">
285 <#-- condivisione sui social -->
286 <#assign currentPageURL = themeDisplay.getPortalURL()+themeDisplay.getURLCurrent() />
287 <#assign companyName = themeDisplay.getCompany().getName() />
288
289 <#assign twitterUrl = "http://twitter.com/share?text=${companyName} - ${titoloScheda} &url=${currentPageURL}" />
290 <#assign facebookUrl = "http://www.facebook.com/sharer/sharer.php?u=${currentPageURL}" />
291 <#assign linkedinUrl = "https://www.linkedin.com/shareArticle?mini=true&url=${currentPageURL}&title=${companyName} - ${titoloScheda}" />
292 <#assign whatsappUrl = "https://api.whatsapp.com/send?text=${companyName} - ${titoloScheda} - ${currentPageURL}" />
293
294 <#-- condivisione social -->
295 <div class="dropdown d-inline share-functions">
296 <button class="btn btn-dropdown dropdown-toggle btn-sm" type="button" id="shareActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
297 <svg class="icon">
298 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-share"></use>
299 </svg>
300 <span>${label_condividi}</span>
301 </button>
302
303 <div class="dropdown-menu shadow-lg" aria-labelledby="shareActions">
304 <div class="link-list-wrapper">
305 <ul class="link-list">
306 <li>
307 <a class="list-item" href="${facebookUrl}" target="_blank">
308 <svg class="icon icon-sm">
309 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-facebook"></use>
310 </svg>
311 <span>${label_facebook}</span>
312 </a>
313 </li>
314 <li>
315 <a class="list-item" href="${twitterUrl}" target="_blank">
316 <svg class="icon icon-sm">
317 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-twitter"></use>
318 </svg>
319 <span>${label_twitter}</span>
320 </a>
321 </li>
322 <li>
323 <a class="list-item" href="${linkedinUrl}" target="_blank">
324 <svg class="icon icon-sm">
325 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-linkedin"></use>
326 </svg>
327 <span>${label_linkedin}</span>
328 </a>
329 </li>
330 <li>
331 <a class="list-item" href="${whatsappUrl}" target="_blank">
332 <svg class="icon icon-sm">
333 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-whatsapp"></use>
334 </svg>
335 <span>${label_whatsapp}</span>
336 </a>
337 </li>
338 </ul>
339 </div>
340 </div>
341 </div>
342
343 <#-- stampa + invia via email -->
344 <#assign subjectEmail = companyName+" - "+titoloScheda />
345 <#assign bodyEmail = currentPageURL />
346
347 <div class="dropdown d-inline other-functions">
348 <button class="btn btn-dropdown dropdown-toggle btn-sm" type="button" id="viewActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
349 <svg class="icon">
350 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-more-items"></use>
351 </svg>
352 <span>${label_vedi_azioni}</span>
353 </button>
354 <div class="dropdown-menu shadow-lg" aria-labelledby="viewActions">
355 <div class="link-list-wrapper">
356 <ul class="link-list">
357 <li>
358 <a class="list-item" href="javascript:void(0);" onclick="window.print();">
359 <svg class="icon icon-sm">
360 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-print"></use>
361 </svg>
362 <span>${label_stampa}</span>
363 </a>
364 </li>
365 <li>
366 <a class="list-item" href="mailto:?subject=${subjectEmail}&body=${bodyEmail}">
367 <svg class="icon icon-sm">
368 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-mail"></use>
369 </svg>
370 <span>${label_invia}</span>
371 </a>
372 </li>
373 </ul>
374 </div>
375 </div>
376 </div>
377
378 <#-- categorie -->
379 <#assign categorie = [] />
380
381 <#-- recupero l'elenco delle categorie da visualizzare -->
382 <#assign categorie = getListCategoryByArticlePrimKey(articlePrimKey) />
383
384 <#if categorie?? && (categorie?size > 0)>
385 <div class="mt-4 mb-4">
386 <h6>${label_argomenti}</h6>
387 <#list categorie as cur_cat>
388 <#if validator.isNotNull(cur_cat) && cur_cat != "">
389 <div class="chip chip-simple chip-primary no-link">
390 <span class="chip-label">${cur_cat.getName()}</span>
391 </div>
392 </#if>
393 </#list>
394 </div>
395 </#if>
396 </div>
397 </div>
398 </div>
399
400 <#-- dettaglio scheda -->
401 <div class="container">
402 <div class="row">
403 <div class="col">
404 <section class="dettaglio-scheda border-top">
405 <div class="row">
406 <#-- menu ancore sinistra -->
407 <div class="col-lg-3 col-md-4">
408 <aside class="left-anchor-menu">
409
410 <h4 class="left-anchor-menu-header" id="${instanceId}_${articleId}_left-anchor-menu-header" data-toggle="collapse" data-target="#${instanceId}_${articleId}_left-anchor-menu" aria-expanded="true" aria-controls="${instanceId}_${articleId}_left-anchor-menu">
411 <span>${label_indice_pagina}</span>
412 <svg class="icon icon-sm">
413 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-arrow-up"></use>
414 </svg>
415 </h4>
416
417 <div class="left-anchor-menu-separator"><div class="left-anchor-menu-separator-inner"></div></div>
418
419 <div id="${instanceId}_${articleId}_left-anchor-menu" class="collapse show" aria-labelledby="${instanceId}_${articleId}_left-anchor-menu-header">
420 <div class="anchor-menu-wrapper">
421 <ul>
422 <#-- sezione dati generali -->
423 <#if description?has_content || number?has_content || cig?has_content || contracting_authority_name?has_content ||
424 fiscal_code_contracting_authority?has_content || act_custody_extremes?has_content || notes_choose_contractor_mode?has_content>
425 <li class="anchor-item">
426 <a class="anchor-link" href="#${instanceId}_${articleId}_dati_generali" title="${label_vai_sezione} ${label_dati_generali}">${label_dati_generali}</a>
427 </li>
428 </#if>
429 <#-- sezione importi -->
430 <#if
431 (validator.isNotNull(amount_award) && validator.isNotNull(amount_award.getData())) ||
432 (validator.isNotNull(amount_paid) && validator.isNotNull(amount_paid.getData()))
433 >
434 <li class="anchor-item">
435 <a class="anchor-link" href="#${instanceId}_${articleId}_importi" title="${label_vai_sezione} ${label_importi}">${label_importi}</a>
436 </li>
437 </#if>
438 <#-- gia ricavato nella sezione principale della scheda -->
439 <#if start_work_date_compact?has_content || end_work_date_compact?has_content || final_settlement_date_compact?has_content>
440 <li class="anchor-item">
441 <a class="anchor-link" href="#${instanceId}_${articleId}_date" title="${label_vai_sezione} ${label_date}">${label_date}</a>
442 </li>
443 </#if>
444 <#-- sezione responsabile procedimento -->
445 <#if administrative_people?has_content>
446 <li class="anchor-item">
447 <a class="anchor-link" href="#${instanceId}_${articleId}_responsabile_del_procedimento" title="${label_vai_sezione} ${label_responsabile_del_procedimento}">${label_responsabile_del_procedimento}</a>
448 </li>
449 </#if>
450 <#-- sezione ufficio -->
451 <#if office?has_content>
452 <li class="anchor-item">
453 <a class="anchor-link" href="#${instanceId}_${articleId}_ufficio" title="${label_vai_sezione} ${label_ufficio_responsabile}">${label_ufficio_responsabile}</a>
454 </li>
455 </#if>
456 <#-- articoli correlati -->
457 <#if validator.isNotNull(currentArticleRelatedLinks) && currentArticleRelatedLinks?size gt 0 >
458 <li class="anchor-item">
459 <a class="anchor-link" href="#${instanceId}_${articleId}_related_articles" title="${label_vai_sezione} ${label_risorse_correlate}">${label_risorse_correlate}</a>
460 </li>
461 </#if>
462 <#-- sezione documenti -->
463 <#if oneAtLeastOfListNotEmpty(attachment)>
464 <li class="anchor-item">
465 <a class="anchor-link" href="#${instanceId}_${articleId}_attachments" title="${label_vai_sezione} ${label_documenti}">${label_documenti}</a>
466 </li>
467 </#if>
468 <#-- sezione ulteriori informazioni + ultimo aggiornamento -->
469 <li class="anchor-item">
470 <a class="anchor-link" href="#${instanceId}_${articleId}_further_information" title="${label_vai_sezione} ${label_ulteriori_informazioni}">${label_ulteriori_informazioni}</a>
471 </li>
472 </ul>
473 </div>
474 </div>
475 </aside>
476 </div>
477
478 <div class="col-lg-9 col-md-8">
479 <div class="border-left pl-md-4 pt-4">
480 <#-- sezione testo principale -->
481 <#if
482 (validator.isNotNull(description) && validator.isNotNull(description.getData())) ||
483 (validator.isNotNull(cig) && validator.isNotNull(cig.getData())) ||
484 (validator.isNotNull(number) && validator.isNotNull(number.getData())) ||
485 (validator.isNotNull(contracting_authority_name) && validator.isNotNull(contracting_authority_name.getData())) ||
486 (validator.isNotNull(fiscal_code_contracting_authority) && validator.isNotNull(fiscal_code_contracting_authority.getData())) ||
487 (validator.isNotNull(act_custody_extremes) && validator.isNotNull(act_custody_extremes.getData())) ||
488 (validator.isNotNull(notes_choose_contractor_mode) && validator.isNotNull(notes_choose_contractor_mode.getData())) ||
489 release_date_compact?has_content || last_modification_date_compact?has_content || cig_date?has_content || start_date?has_content || end_date?has_content
490 >
491 <article id="${instanceId}_${articleId}_dati_generali" class="page-section anchor-section">
492 <h4 class="h2">${label_dati_generali}</h4>
493 <div class="row">
494 <div class="col-12">
495 <div class="page-section-text">
496 <#if validator.isNotNull(description) && validator.isNotNull(description.getData())>
497 ${description.getData()}
498 </#if>
499 <#if validator.isNotNull(number) && validator.isNotNull(number.getData())>
500 <div><strong>${label_numero}: </strong>${number.getData()}</div>
501 </#if>
502 <#if validator.isNotNull(cig) && validator.isNotNull(cig.getData())>
503 <div><strong>${label_cig} </strong>${cig.getData()}</div>
504 </#if>
505 <#if validator.isNotNull(contracting_authority_name) && validator.isNotNull(contracting_authority_name.getData())>
506 <div><strong>${label_contracting_authority_name} </strong>${contracting_authority_name.getData()}</div>
507 </#if>
508 <#if validator.isNotNull(fiscal_code_contracting_authority) && validator.isNotNull(fiscal_code_contracting_authority.getData())>
509 <div><strong>${label_fiscal_code_contracting_authority} </strong>${fiscal_code_contracting_authority.getData()}</div>
510 </#if>
511 <#if validator.isNotNull(act_custody_extremes) && validator.isNotNull(act_custody_extremes.getData())>
512 <div><strong>${label_act_custody_extremes} </strong>${act_custody_extremes.getData()}</div>
513 </#if>
514 <#if validator.isNotNull(notes_choose_contractor_mode) && validator.isNotNull(notes_choose_contractor_mode.getData())>
515 <div><strong>${label_notes_choose_contractor_mode} </strong><br/>${notes_choose_contractor_mode.getData()}</div>
516 </#if>
517
518 <div class="point-list-wrapper my-4">
519 <#-- data ultima modifica dell'atto -->
520 <#if last_modification_date_compact?has_content>
521 <#assign last_modification_date_split = last_modification_date_compact?split("-") />
522 <div class="point-list">
523 <div class="point-list-aside point-list-warning">
524 <div class="point-date">${last_modification_date_split[0]}</div>
525 <div class="point-month">${last_modification_date_split[1]}/${last_modification_date_split[2]}</div>
526 <#-- <div class="point-year">${last_modification_date_split[2]}</div> -->
527 </div>
528 <div class="point-list-content">
529 <div class="card m-0">
530 <div class="card-body">
531 <h5 class="h3 card-title m-0"><span>${label_data_ultima_modifica}</span></h5>
532 </div>
533 </div>
534 </div>
535 </div>
536 </#if>
537
538 <#-- data acquisizione cig -->
539 <#if cig_date_compact?has_content>
540 <#assign cig_date_split = cig_date_compact?split("-") />
541 <div class="point-list">
542 <div class="point-list-aside point-list-warning">
543 <div class="point-date">${cig_date_split[0]}</div>
544 <div class="point-month">${cig_date_split[1]}/${cig_date_split[2]}</div>
545 <#-- <div class="point-year">${cig_date_split[2]}</div> -->
546 </div>
547 <div class="point-list-content">
548 <div class="card m-0">
549 <div class="card-body">
550 <h5 class="h3 card-title m-0"><span>${label_data_cig}</span></h5>
551 </div>
552 </div>
553 </div>
554 </div>
555 </#if>
556
557 <#-- data dell'atto -->
558 <#if release_date_compact?has_content>
559 <#assign release_date_split = release_date_compact?split("-") />
560 <div class="point-list">
561 <div class="point-list-aside point-list-warning">
562 <div class="point-date">${release_date_split[0]}</div>
563 <div class="point-month">${release_date_split[1]}/${release_date_split[2]}</div>
564 <#-- <div class="point-year">${release_date_split[2]}</div> -->
565 </div>
566 <div class="point-list-content">
567 <div class="card m-0">
568 <div class="card-body">
569 <h5 class="h3 card-title m-0"><span>${label_data_atto}</span></h5>
570 </div>
571 </div>
572 </div>
573 </div>
574 </#if>
575
576 <#-- data inizio validita' -->
577 <#if start_date_compact?has_content>
578 <#assign start_date_split = start_date_compact?split("-") />
579 <div class="point-list">
580 <div class="point-list-aside point-list-warning">
581 <div class="point-date">${start_date_split[0]}</div>
582 <div class="point-month">${start_date_split[1]}/${start_date_split[2]}</div>
583 <#-- <div class="point-year">${start_date_split[2]}</div> -->
584 </div>
585 <div class="point-list-content">
586 <div class="card m-0">
587 <div class="card-body">
588 <h5 class="h3 card-title m-0"><span>${label_data_inizio_validita}</span></h5>
589 </div>
590 </div>
591 </div>
592 </div>
593 </#if>
594
595 <#-- data fine validita' -->
596 <#if end_date_compact?has_content>
597 <#assign end_date_split = end_date_compact?split("-") />
598 <div class="point-list">
599 <div class="point-list-aside point-list-warning">
600 <div class="point-date">${end_date_split[0]}</div>
601 <div class="point-month">${end_date_split[1]}/${end_date_split[2]}</div>
602 <#-- <div class="point-year">${end_date_split[2]}</div> -->
603 </div>
604 <div class="point-list-content">
605 <div class="card m-0">
606 <div class="card-body">
607 <h5 class="h3 card-title m-0"><span>${label_data_fine_validita}</span></h5>
608 </div>
609 </div>
610 </div>
611 </div>
612 </#if>
613 </div>
614 </div>
615 </div>
616 </div>
617 </article>
618 </#if>
619
620 <#-- sezione importi -->
621 <#if
622 (validator.isNotNull(amount_award) && validator.isNotNull(amount_award.getData())) ||
623 (validator.isNotNull(amount_paid) && validator.isNotNull(amount_paid.getData()))
624 >
625 <article id="${instanceId}_${articleId}_importi" class="page-section anchor-section">
626 <h4 class="h2">${label_importi}</h4>
627 <div class="row">
628 <div class="col-12">
629 <div class="page-section-text">
630 <#if validator.isNotNull(amount_award) && validator.isNotNull(amount_award.getData())>
631 <div><strong>${label_importo_aggiudicazione} </strong>${formatEuro(amount_award.getData())} €</div>
632 </#if>
633 <#if validator.isNotNull(amount_paid) && validator.isNotNull(amount_paid.getData())>
634 <div><strong>${label_importo_somme_liquidate} </strong>${formatEuro(amount_paid.getData())} €</div>
635 </#if>
636 </div>
637 </div>
638 </div>
639 </article>
640 </#if>
641
642 <#-- sezione date dell' atto -->
643 <#if start_work_date_compact?has_content || end_work_date_compact?has_content || final_settlement_date_compact?has_content>
644 <article id="${instanceId}_${articleId}_date" class="page-section anchor-section">
645 <h4 class="h2">${label_date}</h4>
646 <div class="row">
647 <div class="col-12">
648 <div class="point-list-wrapper my-4">
649
650 <#-- data inizio lavori -->
651 <#if start_work_date_compact?has_content>
652 <#assign start_work_date_split = start_work_date_compact?split("-") />
653 <div class="point-list">
654 <div class="point-list-aside point-list-warning">
655 <div class="point-date">${start_work_date_split[0]}</div>
656 <div class="point-month">${start_work_date_split[1]}/${start_work_date_split[2]}</div>
657 <#-- <div class="point-year">${start_work_date_split[2]}</div> -->
658 </div>
659 <div class="point-list-content">
660 <div class="card m-0">
661 <div class="card-body">
662 <h5 class="h3 card-title m-0"><span>${label_data_inizio_lavori}</span></h5>
663 </div>
664 </div>
665 </div>
666 </div>
667 </#if>
668
669 <#-- data fine lavori -->
670 <#if end_work_date_compact?has_content>
671 <#assign end_work_date_split = end_work_date_compact?split("-") />
672 <div class="point-list">
673 <div class="point-list-aside point-list-warning">
674 <div class="point-date">${end_work_date_split[0]}</div>
675 <div class="point-month">${end_work_date_split[1]}/${end_work_date_split[2]}</div>
676 <#-- <div class="point-year">${end_work_date_split[2]}</div> -->
677 </div>
678 <div class="point-list-content">
679 <div class="card m-0">
680 <div class="card-body">
681 <h5 class="h3 card-title m-0"><span>${label_data_fine_lavori}</span></h5>
682 </div>
683 </div>
684 </div>
685 </div>
686 </#if>
687
688 <#-- data fine liquidazione -->
689 <#if final_settlement_date_compact?has_content>
690 <#assign final_settlement_date_split = final_settlement_date_compact?split("-") />
691 <div class="point-list">
692 <div class="point-list-aside point-list-warning">
693 <div class="point-date">${final_settlement_date_split[0]}</div>
694 <div class="point-month">${final_settlement_date_split[1]}/${final_settlement_date_split[2]}</div>
695 <#-- <div class="point-year">${final_settlement_date_split[2]}</div> -->
696 </div>
697 <div class="point-list-content">
698 <div class="card m-0">
699 <div class="card-body">
700 <h5 class="h3 card-title m-0"><span>${label_data_fine_liquidazione}</span></h5>
701 </div>
702 </div>
703 </div>
704 </div>
705 </#if>
706
707 </div>
708 </div>
709 </div>
710 </article>
711 </#if>
712
713 <#-- sezione responsabile procedimento -->
714 <article id="${instanceId}_${articleId}_responsabile_del_procedimento" class="page-section anchor-section">
715 <h4 class="h2">${label_responsabile_del_procedimento}</h4>
716 <div class="row">
717 <div class="col-12">
718 <#assign administrative_people_webContentData = jsonFactoryUtil.createJSONObject(administrative_people.getData()) />
719 <#if validator.isNotNull(administrative_people_webContentData)>
720 <#-- ricavo il classPK -->
721 <#assign cur_administrative_staff_classPK = administrative_people_webContentData.classPK?number />
722 <#-- ricavo il journal article -->
723 <#assign cur_administrative_staff_ja = journalArticleLocalService.getLatestArticle(cur_administrative_staff_classPK) />
724 <#-- ricavo il nome della struttura -->
725 <#assign cur_administrative_staff_ja_structure_name = cur_administrative_staff_ja.getDDMStructure().getName(locale) />
726 <#-- ricavo structureKey -->
727 <#assign cur_administrative_staff_ja_structureKey = cur_administrative_staff_ja.getDDMStructureKey() />
728
729 <#if cur_administrative_staff_ja??>
730 <#if cur_administrative_staff_ja_structureKey == STRUCTURE_KEY_PERSONALE_AMMINISTRATIVO>
731
732 <#-- ricavo l'url title associato all'articolo -->
733 <#assign cur_administrative_staff_ja_url_title= cur_administrative_staff_ja.getUrlTitle() />
734
735 <#-- ricavo il metodo di saxReaderUtil utile per ricavare poi gli elementi della struttura -->
736 <#assign document = saxReaderUtil.read(cur_administrative_staff_ja.getContentByLocale(locale)) />
737 <#assign rootElement = document.getRootElement() />
738
739 <#-- inizio a ricavare i dati dalla struttura dell'articolo -->
740 <#-- nome -->
741 <#assign name = "" />
742 <#assign name_xpath = saxReaderUtil.createXPath("dynamic-element[@name='name']") />
743 <#assign name = name_xpath.selectSingleNode(rootElement).getStringValue() />
744 <#assign name = name?trim />
745
746 <#-- cognome -->
747 <#assign surname = "" />
748 <#assign surname_xpath = saxReaderUtil.createXPath("dynamic-element[@name='surname']") />
749 <#assign surname = surname_xpath.selectSingleNode(rootElement).getStringValue() />
750 <#assign surname = surname?trim />
751
752 <#if name?has_content && surname?has_content>
753 <a class="chip-link" href="/-/${cur_administrative_staff_ja_url_title}" title="${label_vai_alla_pagina} ${escapeExtraChar(name)} ${escapeExtraChar(surname)}">
754 <div class="chip chip-simple chip-primary">
755 <span class="chip-label">${name} ${surname}</span>
756 </div>
757 </a>
758 </#if>
759
760 </#if>
761 </#if>
762 </#if>
763 </div>
764 </div>
765 </article>
766
767 <#-- sezione ufficio -->
768 <article id="${instanceId}_${articleId}_ufficio" class="page-section anchor-section">
769 <div class="row">
770 <div class="col-12">
771 <h4 class="h2">${label_ufficio_responsabile}</h4>
772 <div class="row">
773 <#assign office_webContentData = jsonFactoryUtil.createJSONObject(office.getData()) />
774 <#-- ricavo il classPK -->
775 <#assign cur_office_classPK = office_webContentData.classPK?number />
776 <#-- ricavo il journal article -->
777 <#assign cur_office_ja = journalArticleLocalService.getLatestArticle(cur_office_classPK) />
778 <#-- ricavo il nome della struttura -->
779 <#assign cur_office_ja_structure_name = cur_office_ja.getDDMStructure().getName(locale) />
780 <#-- ricavo structureKey -->
781 <#assign cur_office_ja_structureKey = cur_office_ja.getDDMStructureKey() />
782
783 <#if cur_office_ja??>
784 <#if cur_office_ja_structureKey == STRUCTURE_KEY_UFFICIO>
785
786 <#-- ricavo l'url title associato all'articolo -->
787 <#assign cur_office_ja_url_title= cur_office_ja.getUrlTitle() />
788
789 <#-- ricavo il metodo di saxReaderUtil utile per ricavare poi gli elementi della struttura -->
790 <#assign document = saxReaderUtil.read(cur_office_ja.getContentByLocale(locale)) />
791 <#assign rootElement = document.getRootElement() />
792
793 <#-- inizio a ricavare i dati dalla struttura dell'articolo -->
794 <#-- titolo -->
795 <#assign title = "" />
796 <#assign title_xpath = saxReaderUtil.createXPath("dynamic-element[@name='title']") />
797 <#assign title = title_xpath.selectSingleNode(rootElement).getStringValue() />
798 <#assign title = title?trim />
799
800 <#if title?has_content>
801 <div class="col-lg-6">
802 <div class="card">
803 <div class="card-body p-3">
804 <h2 class="h2 card-title m-0 d-inline-flex">
805 <div class="category-top mb-0 mr-2">
806 <svg class="icon icon-primary">
807 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-pa"></use>
808 </svg>
809 </div>
810 <a href="/-/${cur_office_ja_url_title}" title="${label_vai_alla_pagina} ${escapeExtraChar(title)}">
811 ${title}
812 </a>
813 </h2>
814 </div>
815 </div>
816 </div>
817 </#if>
818 </#if>
819 </#if>
820 </div>
821 </div>
822 </div>
823 </article>
824
825 <#-- sezione link articoli correlati -->
826 <#if validator.isNotNull(currentArticleRelatedLinks) && currentArticleRelatedLinks?size gt 0 >
827 <div class="row">
828 <div class="col-12">
829 <article id="${instanceId}_${articleId}_related_articles" class="page-section anchor-section">
830 <h4 class="h2">${label_risorse_correlate}</h4>
831 <div class="row">
832 <#list currentArticleRelatedLinks as related_entry>
833 <#assign relatedAssetEntryId = related_entry.getEntryId2() />
834 <#assign relatedAssetEntry = assetEntryLocalService.getEntry(relatedAssetEntryId) />
835 <#assign relatedAssetEntryPrimKey = relatedAssetEntry.getClassPK() />
836 <#assign relatedArticle = journalArticleLocalService.getLatestArticle(relatedAssetEntryPrimKey) />
837
838 <#-- ricavo l'url title associato all'articolo -->
839 <#assign related_js_url_title = relatedArticle.getUrlTitle() />
840
841 <#-- ricavo il metodo di saxReaderUtil utile per ricavare poi gli elementi della struttura -->
842 <#assign document = saxReaderUtil.read(relatedArticle.getContentByLocale(locale)) />
843 <#assign rootElement = document.getRootElement() />
844
845 <#-- inizio a ricavare i dati dalla struttura dell'articolo -->
846 <#-- titolo -->
847 <#assign title = "" />
848 <#assign title_xpath = saxReaderUtil.createXPath("dynamic-element[@name='title']") />
849 <#assign title = title_xpath.selectSingleNode(rootElement).getStringValue() />
850 <#assign title = title?trim />
851
852 <#if title?has_content>
853 <div class="col-lg-6">
854 <div class="card">
855 <div class="card-body">
856 <h2 class="h2 card-title m-0 d-inline-flex">
857 <div class="category-top mb-0 mr-2">
858 <svg class="icon icon-primary">
859 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-files"></use>
860 </svg>
861 </div>
862 <a href="/-/${related_js_url_title}" title="${label_vai_alla_pagina} ${escapeExtraChar(title)}">
863 ${title}
864 </a>
865 </h2>
866 </div>
867 </div>
868 </div>
869 </#if>
870 </#list>
871 </div>
872 </article>
873 </div>
874 </div>
875 </#if>
876
877 <#-- sezione documenti -->
878 <#if oneAtLeastOfListNotEmpty(attachment)>
879 <article id="${instanceId}_${articleId}_attachments" class="page-section anchor-section">
880 <h4 class="h2">${label_documenti}</h4>
881 <div class="row">
882 <#list attachment.getSiblings() as cur_attachment>
883 <#if validator.isNotNull(cur_attachment) && validator.isNotNull(cur_attachment.getData())>
884 <#attempt>
885
886 <#-- ricavo la size del documento -->
887 <#-- a partire dal link, lo splitto e ricavo il secondo ed il 5 argomento che mi servono per il metodo successivo -->
888 <#assign dlFileEntrySize = "" />
889 <#assign parts = (cur_attachment.getData())?split("/") />
890 <#assign groupId = parts[2] />
891 <#assign uuId = parts[5]?split("?")[0] />
892
893 <#assign dlFileEntryService = serviceLocator.findService('com.liferay.document.library.kernel.service.DLFileEntryLocalService') />
894 <#assign dlFileEntry = dlFileEntryService.getFileEntryByUuidAndGroupId(uuId,groupId?number) />
895
896 <#assign dlFileEntrySize = dlFileEntry.getSize() />
897 <#assign dlFileEntryExtension = dlFileEntry.getExtension()?upper_case?trim />
898
899 <#-- trasformo la dimensione in KB -->
900 <#if (dlFileEntrySize gt 0) >
901 <#assign dlFileEntrySize = (dlFileEntrySize / 1000) + " KB"/>
902 </#if>
903
904 <#-- ricavo il titolo dell'allegato: se nn c'è passo un titolo generico -->
905 <#assign attachment_header = label_documento />
906 <#if validator.isNotNull(cur_attachment.attachment_header) && validator.isNotNull(cur_attachment.attachment_header.getData()) >
907 <#assign attachment_header = cur_attachment.attachment_header.getData()?trim />
908 </#if>
909
910 <#-- visualizzo il link dell'allegato -->
911 <div class="col-lg-6">
912 <div class="card allegati-card">
913 <div class="card-body">
914 <div class="allegato d-flex">
915 <div class="icon-img-wrapper">
916 <svg class="icon">
917 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-clip"></use>
918 </svg>
919 </div>
920 <div class="text-wrapper pl-3">
921 <h5 class="h3 card-title m-0">
922 <a href="${cur_attachment.getData()}" target="_blank" title='File <#if dlFileEntryExtension != "">in formato ${dlFileEntryExtension}</#if> - ${dlFileEntrySize}'>
923 <strong>${attachment_header}</strong>
924 </a>
925 </h5>
926 <#if cur_attachment.attachment_description?? && validator.isNotNull(cur_attachment.attachment_description) && validator.isNotNull(cur_attachment.attachment_description.getData()) >
927 <div class="card-text"><small>${cur_attachment.attachment_description.getData()}</small></div>
928 </#if>
929 </div>
930 </div>
931 </div>
932 </div>
933 </div>
934 <#recover>
935 <#-- non visualizzo nulla -->
936 </#attempt>
937 </#if>
938 </#list>
939 </div>
940 </article>
941 </#if>
942
943 <#-- sezione ulteriori informazioni + data ultimo aggiornamento -->
944 <article id="${instanceId}_${articleId}_further_information" class="page-section anchor-section">
945 <h4 class="h2">${label_ulteriori_informazioni}</h4>
946 <#if validator.isNotNull(further_information) && validator.isNotNull(further_information.getData())>
947 <div class="row">
948 <div class="col-12">
949 <div class="callout">
950 <div class="callout-title">
951 <svg class="icon">
952 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-info-circle"></use>
953 </svg>
954 </div>
955 <div class="callout-text">
956 ${further_information.getData()}
957 </div>
958 </div>
959 </div>
960 </div>
961 </#if>
962 <#-- data ultimo aggiornamento -->
963 <div class="row">
964 <div class="col-12">
965 <p class="mb-0">${label_ultimo_aggiornamento}</p>
966 <p><strong>${articleModifiedDate}</strong></p>
967 </div>
968 </div>
969 </article>
970
971 </div>
972 </div>
973 </div>
974 </section>
975 </div>
976 </div>
977 </div>
978</section>