null AVVISO PUBBLICO per l'assegnazione di un contributo regionale finalizzato al superamento del DIGITAL DIVIDE (art. 4 L. R. n. 32/2021, come modificato dall’art. 73 della L.R. n. 51/2021)
Si è verificato un errore nell'elaborarazione del modello.
The following has evaluated to null or missing: ==> office_webContentData.classPK [in template "34140#34167#38494" at line 557, column 119] ---- 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_office_classPK = office_w... [in template "34140#34167#38494" at line 557, column 89] ----
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_del = languageUtil.get(locale, "label_del") />
22<#assign label_date = languageUtil.get(locale, "label_date") />
23<#assign label_data_emissione = languageUtil.get(locale, "label_data_emissione") />
24<#assign label_data_ultima_modifica = languageUtil.get(locale, "label_data_ultima_modifica") />
25<#assign label_data_inizio_validita = languageUtil.get(locale, "label_data_inizio_validita") />
26<#assign label_data_fine_validita = languageUtil.get(locale, "label_data_fine_validita") />
27<#assign label_importo = languageUtil.get(locale, "label_importo") />
28<#assign label_documenti = languageUtil.get(locale, "label_documenti") />
29<#assign label_ulteriori_informazioni = languageUtil.get(locale, "label_ulteriori_informazioni") />
30<#assign label_ultimo_aggiornamento = languageUtil.get(locale, "label_ultimo_aggiornamento") />
31<#assign label_responsabile_del_procedimento = languageUtil.get(locale, "label_responsabile_del_procedimento") />
32<#assign label_ufficio_responsabile = languageUtil.get(locale, "label_ufficio_responsabile") />
33
34<#assign label_condividi = languageUtil.get(locale, "label_condividi") />
35<#assign label_vedi_azioni = languageUtil.get(locale, "label_vedi_azioni") />
36<#assign label_argomenti = languageUtil.get(locale, "label_argomenti") />
37<#assign label_facebook = languageUtil.get(locale, "label_facebook") />
38<#assign label_twitter = languageUtil.get(locale, "label_twitter") />
39<#assign label_linkedin = languageUtil.get(locale, "label_linkedin") />
40<#assign label_whatsapp = languageUtil.get(locale, "label_whatsapp") />
41<#assign label_stampa = languageUtil.get(locale, "label_stampa") />
42<#assign label_invia = languageUtil.get(locale, "label_invia") />
43<#assign label_indice_pagina = languageUtil.get(locale, "label_indice_pagina") />
44
45<#assign label_vai_sezione = languageUtil.get(locale, "label_vai_sezione") />
46<#assign label_vai_alla_pagina = languageUtil.get(locale, "label_vai_alla_pagina") />
47<#assign label_documento = languageUtil.get(locale, "label_documento") />
48<#assign label_data = languageUtil.get(locale, "label_data") />
49
50<#-- Ricavo servizi utili in seguito -->
51<#-- Servizo per ricavare le categorie -->
52<#assign catLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") />
53<#-- Servizio per ricavare dati del journal article -->
54<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
55<#-- Servizio per ricavare il nome del gruppo corrente -->
56<#assign groupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService") />
57<#-- Nome del sito -->
58<#assign currentGroupName = groupLocalService.getGroup(groupId).getName(locale) />
59<#-- Servizio per ricavare l'oggetto layout -->
60<#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService") />
61
62<#-- Ricavo alcuni meta dati associati all'articolo -->
63<#-- Ricavo article id -->
64<#assign articleId = .vars['reserved-article-id'].data />
65<#-- Ricavo il titolo -->
66<#assign titolo = .vars['reserved-article-title'].data />
67<#assign titolo = escapeExtraChar(titolo) />
68
69<#-- Altri dati associati all'articolo che ricavo tramite API -->
70<#assign article = journalArticleLocalService.getArticle( groupId, articleId ) />
71
72<#-- Data ultima modifica articolo -->
73<#assign articleModifiedDateObj = article.getModifiedDate() />
74<#if validator.isNotNull(articleModifiedDateObj)>
75 <#assign articleModifiedDate = dateUtil.getDate(articleModifiedDateObj, "dd/MM/yyyy, hh:mm", locale) />
76</#if>
77
78<#-- Url Title journal article -->
79<#assign articleUrlTitle = article.getUrlTitle() />
80<#-- Primary key journal article -->
81<#assign articlePrimKey = article.resourcePrimKey/>
82
83<#-- 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 -->
84<#assign PREFIX_SERVICE_CATEGORY = "_" />
85
86<#-- Ricavo tutte le categorie associate ad un articolo a meno di quelle che hanno un prefisso "_" -->
87<#function getCategoryByArticlePrimKey articlePrimKey>
88 <#assign tmp = "" />
89 <#assign articleCatNames = catLocalService.getCategories("com.liferay.journal.model.JournalArticle", getterUtil.getLong(articlePrimKey)) />
90 <#if (articleCatNames?size > 0)>
91 <#list articleCatNames as category>
92 <#if category.name?substring(0,1) != PREFIX_SERVICE_CATEGORY >
93 <#assign tmp = tmp + category.name + ", " />
94 </#if>
95 </#list>
96 <#assign tmp = tmp?keep_before_last(",") />
97 </#if>
98 <#return tmp>
99</#function>
100
101<#-- Variante: restituisce solo la lista di oggetti category -->
102<#function getListCategoryByArticlePrimKey articlePrimKey>
103 <#assign listCategories = [] />
104 <#assign articleCat = catLocalService.getCategories("com.liferay.journal.model.JournalArticle", getterUtil.getLong(articlePrimKey)) />
105 <#if (articleCat?size > 0)>
106 <#list articleCat as category>
107 <#if category.name?substring(0,1) != PREFIX_SERVICE_CATEGORY >
108 <#assign listCategories = listCategories + [category] />
109 </#if>
110 </#list>
111 </#if>
112 <#return listCategories>
113</#function>
114
115<#-- Funzione formatta euro -->
116<#function formatEuro amount>
117 <#assign str = amount?replace("\\.","" "r")?replace(",","." "r")>
118 <#assign x = str?number>
119 <#return x?string[",##0.00"]>
120</#function>
121
122<#-- Funzione escape su stringa -->
123<#function escapeExtraChar text>
124 <#return text?replace("\"",""", "r")?replace("'","’", "r")>
125</#function>
126
127<#-- Verifico se il primo elemento di una lista esiste -->
128<#function firstOfListNotEmpty list>
129 <#assign result = false />
130 <#if list?? && list?has_content && list.getSiblings()?has_content && list.getSiblings()?first.getData()?has_content>
131 <#assign result = true />
132 </#if>
133 <#return result>
134</#function>
135
136<#-- Verifico che ci sia almeno un elemento in lista -->
137<#function oneAtLeastOfListNotEmpty list>
138 <#assign esito = false />
139 <#if list?? && list?has_content && list.getSiblings()?has_content>
140 <#list list.getSiblings() as cur_elem>
141 <#if cur_elem.getData()?has_content>
142 <#assign esito = true />
143 <#break>
144 </#if>
145 </#list>
146 </#if>
147 <#return esito>
148</#function>
149
150<#-- parso tutte le date della struttura -->
151<#-- data dell'atto -->
152<#if validator.isNotNull(release_date) && validator.isNotNull(release_date.getData())>
153 <#assign release_date_string = getterUtil.getString(release_date.getData()) />
154 <#if validator.isNotNull(release_date_string) && release_date_string?trim != "">
155 <#assign release_date_DateObj = dateUtil.parseDate("yyyy-MM-dd", release_date.getData(), locale) />
156 <#assign release_date_res = dateUtil.getDate(release_date_DateObj, "dd MMMM yyyy", locale) />
157 <#assign release_date_compact = dateUtil.getDate(release_date_DateObj, "dd-MMM-yy", locale) />
158 </#if>
159</#if>
160
161<#-- data ultima modifica dell'atto -->
162<#if validator.isNotNull(last_modification_date) && validator.isNotNull(last_modification_date.getData())>
163 <#assign last_modification_date_string = getterUtil.getString(last_modification_date.getData()) />
164 <#if validator.isNotNull(last_modification_date_string) && last_modification_date_string?trim != "">
165 <#assign last_modification_date_DateObj = dateUtil.parseDate("yyyy-MM-dd", last_modification_date.getData(), locale) />
166 <#assign last_modification_date_res = dateUtil.getDate(last_modification_date_DateObj, "dd MMMM yyyy", locale) />
167 <#assign last_modification_date_compact = dateUtil.getDate(last_modification_date_DateObj, "dd-MMM-yy", locale) />
168 </#if>
169</#if>
170
171<#-- data inizio validita' -->
172<#if validator.isNotNull(start_date) && validator.isNotNull(start_date.getData())>
173 <#assign start_date_string = getterUtil.getString(start_date.getData()) />
174 <#if validator.isNotNull(start_date_string) && start_date_string?trim != "">
175 <#assign start_date_DateObj = dateUtil.parseDate("yyyy-MM-dd", start_date.getData(), locale) />
176 <#assign start_date_res = dateUtil.getDate(start_date_DateObj, "dd MMMM yyyy", locale) />
177 <#assign start_date_compact = dateUtil.getDate(start_date_DateObj, "dd-MMM-yy", locale) />
178 </#if>
179</#if>
180
181<#-- data fine validita' -->
182<#if validator.isNotNull(end_date) && validator.isNotNull(end_date.getData())>
183 <#assign end_date_string = getterUtil.getString(end_date.getData()) />
184 <#if validator.isNotNull(end_date_string) && end_date_string?trim != "">
185 <#assign end_date_DateObj = dateUtil.parseDate("yyyy-MM-dd", end_date.getData(), locale) />
186 <#assign end_date_res = dateUtil.getDate(end_date_DateObj, "dd MMMM yyyy", locale) />
187 <#assign end_date_compact = dateUtil.getDate(end_date_DateObj, "dd-MMM-yy", locale) />
188 </#if>
189</#if>
190
191<#-- HTML -->
192<section class="comuni-scheda scheda-avviso-pubblico">
193 <div class="container">
194
195 <#-- intro scheda + funzionalita trasversali -->
196 <div class="row">
197 <div class="offset-lg-1 col-lg-6 col-md-8">
198 <section class="intro-sezione">
199 <#-- titolo -->
200 <#assign titoloScheda = escapeExtraChar(titolo) />
201 <#if validator.isNotNull(title) && validator.isNotNull(title.getData())>
202 <h2 class="titolo-sezione">${title.getData()}</h2>
203 <#assign titoloScheda = escapeExtraChar(title.getData()) />
204 </#if>
205
206 <#-- non cè sottotitolo, ma inserisco le date di validita -->
207 <#if start_date_res?has_content>
208 <h4 class="sottotitolo-sezione mb-0"><strong>${label_data_inizio_validita}:</strong> ${start_date_res}</h4>
209 <#if end_date_res?has_content>
210 <h4 class="sottotitolo-sezione"><strong>${label_data_fine_validita}:</strong> ${end_date_res}</h4>
211 </#if>
212 </#if>
213 </section>
214 </div>
215
216 <#-- blocco funzionalita trasversali -->
217 <div class="offset-lg-1 col-lg-3 col-md-4">
218 <#-- condivisione sui social -->
219 <#assign currentPageURL = themeDisplay.getPortalURL()+themeDisplay.getURLCurrent() />
220 <#assign companyName = themeDisplay.getCompany().getName() />
221
222 <#assign twitterUrl = "http://twitter.com/share?text=${companyName} - ${titoloScheda} &url=${currentPageURL}" />
223 <#assign facebookUrl = "http://www.facebook.com/sharer/sharer.php?u=${currentPageURL}" />
224 <#assign linkedinUrl = "https://www.linkedin.com/shareArticle?mini=true&url=${currentPageURL}&title=${companyName} - ${titoloScheda}" />
225 <#assign whatsappUrl = "https://api.whatsapp.com/send?text=${companyName} - ${titoloScheda} - ${currentPageURL}" />
226
227 <#-- condivisione social -->
228 <div class="dropdown d-inline share-functions">
229 <button class="btn btn-dropdown dropdown-toggle btn-sm" type="button" id="shareActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
230 <svg class="icon">
231 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-share"></use>
232 </svg>
233 <span>${label_condividi}</span>
234 </button>
235
236 <div class="dropdown-menu shadow-lg" aria-labelledby="shareActions">
237 <div class="link-list-wrapper">
238 <ul class="link-list">
239 <li>
240 <a class="list-item" href="${facebookUrl}" target="_blank">
241 <svg class="icon icon-sm">
242 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-facebook"></use>
243 </svg>
244 <span>${label_facebook}</span>
245 </a>
246 </li>
247 <li>
248 <a class="list-item" href="${twitterUrl}" target="_blank">
249 <svg class="icon icon-sm">
250 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-twitter"></use>
251 </svg>
252 <span>${label_twitter}</span>
253 </a>
254 </li>
255 <li>
256 <a class="list-item" href="${linkedinUrl}" target="_blank">
257 <svg class="icon icon-sm">
258 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-linkedin"></use>
259 </svg>
260 <span>${label_linkedin}</span>
261 </a>
262 </li>
263 <li>
264 <a class="list-item" href="${whatsappUrl}" target="_blank">
265 <svg class="icon icon-sm">
266 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-whatsapp"></use>
267 </svg>
268 <span>${label_whatsapp}</span>
269 </a>
270 </li>
271 </ul>
272 </div>
273 </div>
274 </div>
275
276 <#-- stampa + invia via email -->
277 <#assign subjectEmail = companyName+" - "+titoloScheda />
278 <#assign bodyEmail = currentPageURL />
279
280 <div class="dropdown d-inline other-functions">
281 <button class="btn btn-dropdown dropdown-toggle btn-sm" type="button" id="viewActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
282 <svg class="icon">
283 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-more-items"></use>
284 </svg>
285 <span>${label_vedi_azioni}</span>
286 </button>
287 <div class="dropdown-menu shadow-lg" aria-labelledby="viewActions">
288 <div class="link-list-wrapper">
289 <ul class="link-list">
290 <li>
291 <a class="list-item" href="javascript:void(0);" onclick="window.print();">
292 <svg class="icon icon-sm">
293 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-print"></use>
294 </svg>
295 <span>${label_stampa}</span>
296 </a>
297 </li>
298 <li>
299 <a class="list-item" href="mailto:?subject=${subjectEmail}&body=${bodyEmail}">
300 <svg class="icon icon-sm">
301 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-mail"></use>
302 </svg>
303 <span>${label_invia}</span>
304 </a>
305 </li>
306 </ul>
307 </div>
308 </div>
309 </div>
310
311 <#-- categorie -->
312 <#assign categorie = [] />
313
314 <#-- recupero l'elenco delle categorie da visualizzare -->
315 <#assign categorie = getListCategoryByArticlePrimKey(articlePrimKey) />
316
317 <#if categorie?? && (categorie?size > 0)>
318 <div class="mt-4 mb-4">
319 <h6>${label_argomenti}</h6>
320 <#list categorie as cur_cat>
321 <#if validator.isNotNull(cur_cat) && cur_cat != "">
322 <div class="chip chip-simple chip-primary no-link">
323 <span class="chip-label">${cur_cat.getName()}</span>
324 </div>
325 </#if>
326 </#list>
327 </div>
328 </#if>
329 </div>
330 </div>
331 </div>
332
333 <#-- dettaglio scheda -->
334 <div class="container">
335 <div class="row">
336 <div class="col">
337 <section class="dettaglio-scheda border-top">
338 <div class="row">
339 <#-- menu ancore sinistra -->
340 <div class="col-lg-3 col-md-4">
341 <aside class="left-anchor-menu">
342
343 <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">
344 <span>${label_indice_pagina}</span>
345 <svg class="icon icon-sm">
346 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-arrow-up"></use>
347 </svg>
348 </h4>
349
350 <div class="left-anchor-menu-separator"><div class="left-anchor-menu-separator-inner"></div></div>
351
352 <div id="${instanceId}_${articleId}_left-anchor-menu" class="collapse show" aria-labelledby="${instanceId}_${articleId}_left-anchor-menu-header">
353 <div class="anchor-menu-wrapper">
354 <ul>
355 <#-- gia ricavato nella sezione principale della scheda -->
356 <#if release_date_compact?has_content || last_modification_date_compact?has_content || start_date_compact?has_content || end_date_compact?has_content>
357 <li class="anchor-item">
358 <a class="anchor-link" href="#${instanceId}_${articleId}_date" title="${label_vai_sezione} ${label_date}">${label_date}</a>
359 </li>
360 </#if>
361 <#-- sezione responsabile procedimento -->
362 <#if administrative_people?has_content>
363 <li class="anchor-item">
364 <a class="anchor-link" href="#${instanceId}_${articleId}_responsabile_del_procedimento" title="${label_vai_sezione} ${label_responsabile_del_procedimento}">${label_responsabile_del_procedimento}</a>
365 </li>
366 </#if>
367 <#-- sezione ufficio -->
368 <#if office?has_content>
369 <li class="anchor-item">
370 <a class="anchor-link" href="#${instanceId}_${articleId}_ufficio" title="${label_vai_sezione} ${label_ufficio_responsabile}">${label_ufficio_responsabile}</a>
371 </li>
372 </#if>
373 <#-- sezione documenti -->
374 <#if oneAtLeastOfListNotEmpty(attachment)>
375 <li class="anchor-item">
376 <a class="anchor-link" href="#${instanceId}_${articleId}_attachments" title="${label_vai_sezione} ${label_documenti}">${label_documenti}</a>
377 </li>
378 </#if>
379 <#-- sezione ulteriori informazioni + ultimo aggiornamento -->
380 <li class="anchor-item">
381 <a class="anchor-link" href="#${instanceId}_${articleId}_further_information" title="${label_vai_sezione} ${label_ulteriori_informazioni}">${label_ulteriori_informazioni}</a>
382 </li>
383 </ul>
384 </div>
385 </div>
386 </aside>
387 </div>
388
389 <div class="col-lg-9 col-md-8">
390 <div class="border-left pl-md-4 pt-4">
391 <#-- sezione testo principale -->
392 <#if
393 (validator.isNotNull(description) && validator.isNotNull(description.getData()))
394 >
395 <article class="page-section">
396 <div class="row">
397 <div class="col-12">
398 <div class="page-section-text">
399 <#if validator.isNotNull(description) && validator.isNotNull(description.getData())>
400 ${description.getData()}
401 </#if>
402 </div>
403 </div>
404 </div>
405 </article>
406 </#if>
407
408 <#-- sezione date dell' atto -->
409 <#if release_date_compact?has_content || last_modification_date_compact?has_content || start_date_compact?has_content || end_date_compact?has_content>
410 <article id="${instanceId}_${articleId}_date" class="page-section anchor-section">
411 <h4 class="h2">${label_date}</h4>
412 <div class="row">
413 <div class="col-12">
414 <div class="point-list-wrapper my-4">
415
416 <#-- data ultima modifica dell'atto -->
417 <#if last_modification_date_compact?has_content>
418 <#assign last_modification_date_split = last_modification_date_compact?split("-") />
419 <div class="point-list">
420 <div class="point-list-aside point-list-warning">
421 <div class="point-date">${last_modification_date_split[0]}</div>
422 <div class="point-month">${last_modification_date_split[1]}/${last_modification_date_split[2]}</div>
423 <#-- <div class="point-year">${last_modification_date_split[2]}</div> -->
424 </div>
425 <div class="point-list-content">
426 <div class="card m-0">
427 <div class="card-body">
428 <h5 class="h3 card-title m-0"><span>${label_data_ultima_modifica}</span></h5>
429 </div>
430 </div>
431 </div>
432 </div>
433 </#if>
434
435 <#-- data dell'atto -->
436 <#if release_date_compact?has_content>
437 <#assign release_date_split = release_date_compact?split("-") />
438 <div class="point-list">
439 <div class="point-list-aside point-list-warning">
440 <div class="point-date">${release_date_split[0]}</div>
441 <div class="point-month">${release_date_split[1]}/${release_date_split[2]}</div>
442 <#-- <div class="point-year">${release_date_split[2]}</div> -->
443 </div>
444 <div class="point-list-content">
445 <div class="card m-0">
446 <div class="card-body">
447 <h5 class="h3 card-title m-0"><span>${label_data_emissione}</span></h5>
448 </div>
449 </div>
450 </div>
451 </div>
452 </#if>
453
454 <#-- data inizio validita' -->
455 <#if start_date_compact?has_content>
456 <#assign start_date_split = start_date_compact?split("-") />
457 <div class="point-list">
458 <div class="point-list-aside point-list-warning">
459 <div class="point-date">${start_date_split[0]}</div>
460 <div class="point-month">${start_date_split[1]}/${start_date_split[2]}</div>
461 <#-- <div class="point-year">${start_date_split[2]}</div> -->
462 </div>
463 <div class="point-list-content">
464 <div class="card m-0">
465 <div class="card-body">
466 <h5 class="h3 card-title m-0"><span>${label_data_inizio_validita}</span></h5>
467 </div>
468 </div>
469 </div>
470 </div>
471 </#if>
472
473 <#-- data fine validita' -->
474 <#if end_date_compact?has_content>
475 <#assign end_date_split = end_date_compact?split("-") />
476 <div class="point-list">
477 <div class="point-list-aside point-list-warning">
478 <div class="point-date">${end_date_split[0]}</div>
479 <div class="point-month">${end_date_split[1]}/${end_date_split[2]}</div>
480 <#-- <div class="point-year">${end_date_split[2]}</div> -->
481 </div>
482 <div class="point-list-content">
483 <div class="card m-0">
484 <div class="card-body">
485 <h5 class="h3 card-title m-0"><span>${label_data_fine_validita}</span></h5>
486 </div>
487 </div>
488 </div>
489 </div>
490 </#if>
491
492 </div>
493 </div>
494 </div>
495 </article>
496 </#if>
497
498 <#-- sezione responsabile procedimento -->
499 <article id="${instanceId}_${articleId}_responsabile_del_procedimento" class="page-section anchor-section">
500 <h4 class="h2">${label_responsabile_del_procedimento}</h4>
501 <div class="row">
502 <div class="col-12">
503 <#assign administrative_people_webContentData = jsonFactoryUtil.createJSONObject(administrative_people.getData()) />
504 <#-- ricavo il classPK -->
505 <#assign cur_administrative_staff_classPK = administrative_people_webContentData.classPK?number />
506 <#-- ricavo il journal article -->
507 <#assign cur_administrative_staff_ja = journalArticleLocalService.getLatestArticle(cur_administrative_staff_classPK) />
508 <#-- ricavo il nome della struttura -->
509 <#assign cur_administrative_staff_ja_structure_name = cur_administrative_staff_ja.getDDMStructure().getName(locale) />
510 <#-- ricavo structureKey -->
511 <#assign cur_administrative_staff_ja_structureKey = cur_administrative_staff_ja.getDDMStructureKey() />
512
513 <#if cur_administrative_staff_ja??>
514 <#if cur_administrative_staff_ja_structureKey == STRUCTURE_KEY_PERSONALE_AMMINISTRATIVO>
515
516 <#-- ricavo l'url title associato all'articolo -->
517 <#assign cur_administrative_staff_ja_url_title= cur_administrative_staff_ja.getUrlTitle() />
518
519 <#-- ricavo il metodo di saxReaderUtil utile per ricavare poi gli elementi della struttura -->
520 <#assign document = saxReaderUtil.read(cur_administrative_staff_ja.getContentByLocale(locale)) />
521 <#assign rootElement = document.getRootElement() />
522
523 <#-- inizio a ricavare i dati dalla struttura dell'articolo -->
524 <#-- nome -->
525 <#assign name = "" />
526 <#assign name_xpath = saxReaderUtil.createXPath("dynamic-element[@name='name']") />
527 <#assign name = name_xpath.selectSingleNode(rootElement).getStringValue() />
528 <#assign name = name?trim />
529
530 <#-- cognome -->
531 <#assign surname = "" />
532 <#assign surname_xpath = saxReaderUtil.createXPath("dynamic-element[@name='surname']") />
533 <#assign surname = surname_xpath.selectSingleNode(rootElement).getStringValue() />
534 <#assign surname = surname?trim />
535
536 <#if name?has_content && surname?has_content>
537 <a class="chip-link" href="/-/${cur_administrative_staff_ja_url_title}" title="${label_vai_alla_pagina} ${escapeExtraChar(name)} ${escapeExtraChar(surname)}">
538 <div class="chip chip-simple chip-primary">
539 <span class="chip-label">${name} ${surname}</span>
540 </div>
541 </a>
542 </#if>
543
544 </#if>
545 </#if>
546 </div>
547 </div>
548 </article>
549
550 <#-- sezione ufficio -->
551 <article id="${instanceId}_${articleId}_ufficio" class="page-section anchor-section">
552 <h4 class="h2">${label_ufficio_responsabile}</h4>
553 <div class="row">
554 <div class="col-12">
555 <#assign office_webContentData = jsonFactoryUtil.createJSONObject(office.getData()) />
556 <#-- ricavo il classPK -->
557 <#assign cur_office_classPK = office_webContentData.classPK?number />
558 <#-- ricavo il journal article -->
559 <#assign cur_office_ja = journalArticleLocalService.getLatestArticle(cur_office_classPK) />
560 <#-- ricavo il nome della struttura -->
561 <#assign cur_office_ja_structure_name = cur_office_ja.getDDMStructure().getName(locale) />
562 <#-- ricavo structureKey -->
563 <#assign cur_office_ja_structureKey = cur_office_ja.getDDMStructureKey() />
564
565 <#if cur_office_ja??>
566 <#if cur_office_ja_structureKey == STRUCTURE_KEY_UFFICIO>
567
568 <#-- ricavo l'url title associato all'articolo -->
569 <#assign cur_office_ja_url_title= cur_office_ja.getUrlTitle() />
570
571 <#-- ricavo il metodo di saxReaderUtil utile per ricavare poi gli elementi della struttura -->
572 <#assign document = saxReaderUtil.read(cur_office_ja.getContentByLocale(locale)) />
573 <#assign rootElement = document.getRootElement() />
574
575 <#-- inizio a ricavare i dati dalla struttura dell'articolo -->
576 <#-- titolo -->
577 <#assign title = "" />
578 <#assign title_xpath = saxReaderUtil.createXPath("dynamic-element[@name='title']") />
579 <#assign title = title_xpath.selectSingleNode(rootElement).getStringValue() />
580 <#assign title = title?trim />
581
582 <#if title?has_content>
583 <div class="col-lg-6">
584 <div class="card">
585 <div class="card-body p-3">
586 <h2 class="h2 card-title m-0 d-inline-flex">
587 <div class="category-top mb-0 mr-2">
588 <svg class="icon icon-primary">
589 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-pa"></use>
590 </svg>
591 </div>
592 <a href="/-/${cur_office_ja_url_title}" title="${label_vai_alla_pagina} ${escapeExtraChar(title)}">
593 ${title}
594 </a>
595 </h2>
596 </div>
597 </div>
598 </div>
599 </#if>
600
601 </#if>
602 </#if>
603 </div>
604 </div>
605 </article>
606
607 <#-- sezione documenti -->
608 <#if oneAtLeastOfListNotEmpty(attachment)>
609 <article id="${instanceId}_${articleId}_attachments" class="page-section anchor-section">
610 <h4 class="h2">${label_documenti}</h4>
611 <div class="row">
612 <#list attachment.getSiblings() as cur_attachment>
613 <#if validator.isNotNull(cur_attachment) && validator.isNotNull(cur_attachment.getData())>
614 <#attempt>
615
616 <#-- ricavo la size del documento -->
617 <#-- a partire dal link, lo splitto e ricavo il secondo ed il 5 argomento che mi servono per il metodo successivo -->
618 <#assign dlFileEntrySize = "" />
619 <#assign parts = (cur_attachment.getData())?split("/") />
620 <#assign groupId = parts[2] />
621 <#assign uuId = parts[5]?split("?")[0] />
622
623 <#assign dlFileEntryService = serviceLocator.findService('com.liferay.document.library.kernel.service.DLFileEntryLocalService') />
624 <#assign dlFileEntry = dlFileEntryService.getFileEntryByUuidAndGroupId(uuId,groupId?number) />
625
626 <#assign dlFileEntrySize = dlFileEntry.getSize() />
627 <#assign dlFileEntryExtension = dlFileEntry.getExtension()?upper_case?trim />
628
629 <#-- trasformo la dimensione in KB -->
630 <#if (dlFileEntrySize gt 0) >
631 <#assign dlFileEntrySize = (dlFileEntrySize / 1000) + " KB"/>
632 </#if>
633
634 <#-- ricavo il titolo dell'allegato: se nn c'è passo un titolo generico -->
635 <#assign attachment_header = label_documento />
636 <#if validator.isNotNull(cur_attachment.attachment_header) && validator.isNotNull(cur_attachment.attachment_header.getData()) >
637 <#assign attachment_header = cur_attachment.attachment_header.getData()?trim />
638 </#if>
639
640 <#-- visualizzo il link dell'allegato -->
641 <div class="col-lg-6">
642 <div class="card allegati-card">
643 <div class="card-body">
644 <div class="allegato d-flex">
645 <div class="icon-img-wrapper">
646 <svg class="icon">
647 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-clip"></use>
648 </svg>
649 </div>
650 <div class="text-wrapper pl-3">
651 <h5 class="h3 card-title m-0">
652 <a href="${cur_attachment.getData()}" target="_blank" title='File <#if dlFileEntryExtension != "">in formato ${dlFileEntryExtension}</#if> - ${dlFileEntrySize}'>
653 <strong>${attachment_header}</strong>
654 </a>
655 </h5>
656 <#if cur_attachment.attachment_description?? && validator.isNotNull(cur_attachment.attachment_description) && validator.isNotNull(cur_attachment.attachment_description.getData()) >
657 <div class="card-text"><small>${cur_attachment.attachment_description.getData()}</small></div>
658 </#if>
659 </div>
660 </div>
661 </div>
662 </div>
663 </div>
664 <#recover>
665 <#-- non visualizzo nulla -->
666 </#attempt>
667 </#if>
668 </#list>
669 </div>
670 </article>
671 </#if>
672
673 <#-- sezione ulteriori informazioni + data ultimo aggiornamento -->
674 <article id="${instanceId}_${articleId}_further_information" class="page-section anchor-section">
675 <h4 class="h2">${label_ulteriori_informazioni}</h4>
676 <#if validator.isNotNull(further_information) && validator.isNotNull(further_information.getData())>
677 <div class="row">
678 <div class="col-12">
679 <div class="callout">
680 <div class="callout-title">
681 <svg class="icon">
682 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-info-circle"></use>
683 </svg>
684 </div>
685 <div class="callout-text">
686 ${further_information.getData()}
687 </div>
688 </div>
689 </div>
690 </div>
691 </#if>
692 <#-- data ultimo aggiornamento -->
693 <div class="row">
694 <div class="col-12">
695 <p class="mb-0">${label_ultimo_aggiornamento}</p>
696 <p><strong>${articleModifiedDate}</strong></p>
697 </div>
698 </div>
699 </article>
700
701 </div>
702 </div>
703 </div>
704 </section>
705 </div>
706 </div>
707 </div>
708</section>