Ance Reggio Emilia – Superbonus: le novità fiscali previste dalla Legge di Bilancio 2022
Approfondimento sulle ultime novità introdotte dalla Legge di Bilancio 2022 sul Superbonus.
An error occurred while processing the template.
The following has evaluated to null or missing:
==> cena  [in template "20097#20123#DETTAGLIO-APPUNTAMENTO" at line 37, column 24]

----
Tip: If the failing expression is known to 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 dinnerCheck = cena.getData()  [in template "20097#20123#DETTAGLIO-APPUNTAMENTO" at line 37, column 1]
----
1<#include "${templatesPath}/MACRO-DETAIL-PAGE" /> 
2 
3<#assign userLocalService = serviceLocator.findService('com.liferay.portal.kernel.service.UserLocalService') /> 
4 
5<#assign detailURL = aireWidgetTemplateTool.getDetailDisplayPageURL(assetEntry, serviceContext.getThemeDisplay().getDoAsUserId()) /> 
6<#assign downloadIcsURL = "/o/unindustria/ics/calendar?groupId=" + groupId + "&eventId=" + articleid + "&eventUrl=" + detailURL /> 
7<#assign customSvgPath = themeDisplay.getPathThemeImages() + "/assets/images/icons.svg" /> 
8 
9<#assign isLoggedIn = false /> 
10<#if serviceContext.getThemeDisplay().isSignedIn()> 
11	<#assign isLoggedIn = true /> 
12</#if> 
13 
14<#assign userId = serviceContext.getThemeDisplay().getUserId() /> 
15<#assign isSubscribed = aireWidgetTemplateTool.isSubscribedEvent(articleid, userId, themeDisplay) /> 
16<#assign idEventCreation = id.getData() /> 
17<#if viewForm??> 
18	<#assign viewForm = viewForm.getData() /> 
19<#else> 
20	<#assign viewForm = "false" /> 
21</#if> 
22<#if formNotes??> 
23	<#assign formNotes = formNotes.getData() /> 
24<#else> 
25	<#assign formNotes = "" /> 
26</#if> 
27<#if formCompany??> 
28	<#assign formCompany = formCompany.getData() /> 
29<#else> 
30	<#assign formCompany = "" /> 
31</#if> 
32<#assign user = userLocalService.fetchUser(userId) /> 
33<#assign userFirstName = user.getFirstName() /> 
34<#assign userSurname = user.getLastName() /> 
35<#assign userEmail = user.getEmailAddress() /> 
36 
37<#assign dinnerCheck = cena.getData() /> 
38<#assign publicPartCheck = parte_pubblica.getData() /> 
39<#assign privatePartCheck = parte_privata.getData() /> 
40<#assign streamingCheck = streaming.getData() /> 
41 
42<#assign selfCheckboxVisibility = ""/> 
43<#assign selfAutoFlagged = "false" /> 
44<#assign selfFormVisibility = "d-none"/> 
45 
46<#if !isLoggedIn> 
47	<#assign selfCheckboxVisibility = "d-none"/> 
48	<#assign selfAutoFlagged = "true" /> 
49	<#assign selfFormVisibility = ""/> 
50</#if> 
51 
52<div class="webcontent-detail pt-0"> 
53	<div class="webcontent-detail__calendar-info"> 
54		<div class="container"> 
55			<div class="row"> 
56				<div class="col-12"> 
57					<div class="d-flex flex-column flex-md-row justify-content-md-between align-items-md-center"> 
58						<div> 
59							<strong class="text-uppercase">${dateUtil.getDate(data.getData()?date("yyyy-MM-dd"), 'dd MMMM yyyy', locale)}</strong> 
60							- ${languageUtil.get(locale, "aire.hour.from")} ${ora_inizio.getData()} ${languageUtil.get(locale, "aire.hour.to")} ${ora_fine.getData()} 
61						</div> 
62						<div class="d-flex align-items-center justify-content-between"> 
63							<div> 
64								<button type="button" onclick="window.open('${downloadIcsURL}','_self')" target="_self" class="webcontent-detail__calendar d-flex align-items-center"> 
65									<svg class="ico-svg add"> 
66										<use xlink:href="${themeIconsPath}#calendar-alt-light"></use> 
67									</svg> 
68									<span class="add">${languageUtil.get(locale, "aire.mark.calendar")}</span> 
69								</button> 
70							</div> 
71							<#if partecipazione?? && partecipazione.getData()?has_content> 
72								<#if viewForm == "true"> 
73									<#if aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && !isLoggedIn> 
74										<div class="ml-md-4"> 
75											<button type="button" class="cta-link cta-link--icon" data-toggle="modal" data-target="#login"> 
76												<span class="d-none d-lg-inline-block"><@liferay.language key="aire.signing" /></span> 
77												<svg class="ico-svg"> 
78													<use xlink:href="${customSvgPath}#user-light"></use> 
79												</svg> 
80											</button> 
81										</div> 
82									<#elseif aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && isLoggedIn && !isSubscribed> 
83										<div class="ml-md-4"> 
84											<a href="#subscribe-event" title="${languageUtil.get(locale, "aire.signing")}" class="cta-link"><span>${languageUtil.get(locale, "aire.signing")}</span></a> 
85										</div> 
86									<#elseif !aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && isLoggedIn && !isSubscribed> 
87										<div class="ml-md-4"> 
88											<a href="#subscribe-event" title="${languageUtil.get(locale, "aire.signing")}" class="btn-cta btn-cta--white"><span>${languageUtil.get(locale, "aire.signing")}</span></a> 
89										</div> 
90									<#elseif !aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && !isLoggedIn> 
91										<div class="ml-md-4"> 
92											<a href="#subscribe-event" title="${languageUtil.get(locale, "aire.signing")}" class="btn-cta btn-cta--white"><span>${languageUtil.get(locale, "aire.signing")}</span></a> 
93										</div> 
94									</#if> 
95								<#elseif link_iscriviti.getData()?has_content> 
96									<#if aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && !isLoggedIn> 
97										<div class="ml-md-4"> 
98											<button type="button" class="cta-link cta-link--icon" data-toggle="modal" data-target="#login"> 
99												<span class="d-none d-lg-inline-block"><@liferay.language key="aire.signing" /></span> 
100												<svg class="ico-svg"> 
101													<use xlink:href="${customSvgPath}#user-light"></use> 
102												</svg> 
103											</button> 
104										</div> 
105									<#elseif aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && isLoggedIn> 
106										<div class="ml-md-4"> 
107											<a href="${link_iscriviti.getData()}" target="_blank" title="${languageUtil.get(locale, "aire.signing")}" class="cta-link"><span>${languageUtil.get(locale, "aire.signing")}</span></a> 
108										</div> 
109									<#elseif !aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData())> 
110										<div class="ml-md-4"> 
111											<a href="${link_iscriviti.getData()}" target="_blank" title="${languageUtil.get(locale, "aire.signing")}" class="cta-link"><span>${languageUtil.get(locale, "aire.signing")}</span></a> 
112										</div> 
113									</#if> 
114								</#if> 
115							</#if> 
116						</div> 
117					</div> 
118				</div> 
119			</div> 
120		</div> 
121	</div> 
122	<div class="container"> 
123		<div class="row"> 
124			<nav class="col-md-4"> 
125				<div class="webcontent-detail__nav"> 
126					<ul> 
127    					<#if programma_titolo.getSiblings()[0].getData() != ""> 
128    					    <li><a href="#section-1" title="${languageUtil.get(locale, "aire.program")}">${languageUtil.get(locale, "aire.program")}</a></li> 
129    					</#if> 
130    					<#if logo_sponsor.getSiblings()[0].getData() != ""> 
131	                        <li><a href="#section-2" title="${languageUtil.get(locale, "aire.partner")}">${languageUtil.get(locale, "aire.partner")}</a></li> 
132                        </#if> 
133                        <#if documenti_allegati.getSiblings()[0].getData() != "" && ((aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && isLoggedIn) ||  !aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()))> 
134                        	<li><a href="#section-3" title="${languageUtil.get(locale, "aire.section.documents")}">${languageUtil.get(locale, "aire.section.documents")}</a></li> 
135                        </#if> 
136					</ul> 
137					<div class="webcontent-detail__box"> 
138						<div class="webcontent-detail__box-title">${languageUtil.get(locale, "aire.information")}</div> 
139						<div class="webcontent-detail__info d-flex"> 
140							<svg class="ico-svg add"> 
141								<use xlink:href="${themeIconsPath}#calendar-alt-light"></use> 
142							</svg> 
143							<div> 
144								<div class="webcontent-detail__info-title">${languageUtil.get(locale, "aire.event.date")}</div> 
145								<div> 
146									<span class="text-uppercase">${dateUtil.getDate(data.getData()?date("yyyy-MM-dd"), 'dd MMMM yyyy', locale)}</span> 
147									<br> 
148									${languageUtil.get(locale, "aire.hour.from")} ${ora_inizio.getData()} ${languageUtil.get(locale, "aire.hour.to")} ${ora_fine.getData()} 
149								</div> 
150							</div> 
151						</div> 
152						<div class="webcontent-detail__info d-flex"> 
153							<svg class="ico-svg add"> 
154								<use xlink:href="${themeIconsPath}#map-marker-alt-light"></use> 
155							</svg> 
156							<div> 
157								<div class="webcontent-detail__info-title">${languageUtil.get(locale, "aire.location")}</div> 
158								<div>${luogo.getData()}</div> 
159							</div> 
160						</div> 
161						<#if categorieEvento?has_content> 
162    						<div class="webcontent-detail__info d-flex"> 
163    							<svg class="ico-svg add"> 
164    								<use xlink:href="${themeIconsPath}#info-light"></use> 
165    							</svg> 
166    							<div> 
167    								<div class="webcontent-detail__info-title">${languageUtil.get(locale, "aire.typology")}</div> 
168    								<#list categorieEvento as tipoEvento> 
169    								    <div>${tipoEvento.getName()}</div> 
170    								</#list> 
171    							</div> 
172    						</div> 
173						</#if> 
174					</div> 
175					<div class="webcontent-detail__box"> 
176						<div class="webcontent-detail__box-title">${languageUtil.get(locale, "aire.signing")}</div> 
177						<div> 
178							<button type="button" onclick="window.open('${downloadIcsURL}','_self')" target="_self" class="webcontent-detail__calendar d-flex align-items-center"> 
179								<svg class="ico-svg add"> 
180									<use xlink:href="${themeIconsPath}#calendar-alt-light"></use> 
181								</svg> 
182								<span class="add">${languageUtil.get(locale, "aire.mark.calendar")}</span> 
183							</button> 
184							<#if partecipazione?? && partecipazione.getData()?has_content> 
185								<#if viewForm == "true"> 
186									<#if aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && !isLoggedIn> 
187											<button type="button" class="cta-link cta-link--icon" data-toggle="modal" data-target="#login"> 
188												<span class="d-none d-lg-inline-block"><@liferay.language key="aire.signing" /></span> 
189												<svg class="ico-svg"> 
190													<use xlink:href="${customSvgPath}#user-light"></use> 
191												</svg> 
192											</button> 
193									<#elseif aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && isLoggedIn && !isSubscribed> 
194											<a href="#subscribe-event" title="${languageUtil.get(locale, "aire.signing")}" class="cta-link"><span>${languageUtil.get(locale, "aire.signing")}</span></a> 
195									<#elseif !aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && isLoggedIn && !isSubscribed> 
196											<a href="#subscribe-event" title="${languageUtil.get(locale, "aire.signing")}" class="btn-cta btn-cta--white"><span>${languageUtil.get(locale, "aire.signing")}</span></a> 
197									<#elseif !aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && !isLoggedIn> 
198											<a href="#subscribe-event" title="${languageUtil.get(locale, "aire.signing")}" class="btn-cta btn-cta--white"><span>${languageUtil.get(locale, "aire.signing")}</span></a> 
199									</#if> 
200								<#elseif link_iscriviti.getData()?has_content> 
201									<#if aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && !isLoggedIn> 
202										<button type="button" class="cta-link cta-link--icon" data-toggle="modal" data-target="#login"> 
203											<span class="d-none d-lg-inline-block"><@liferay.language key="aire.signing" /></span> 
204											<svg class="ico-svg"> 
205												<use xlink:href="${customSvgPath}#user-light"></use> 
206											</svg> 
207										</button> 
208									<#elseif aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && isLoggedIn> 
209										<a href="${link_iscriviti.getData()}" target="_blank" title="${languageUtil.get(locale, "aire.signing")}" class="cta-link"><span>${languageUtil.get(locale, "aire.signing")}</span></a> 
210									<#elseif !aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData())> 
211										<a href="${link_iscriviti.getData()}" target="_blank" title="${languageUtil.get(locale, "aire.signing")}" class="cta-link"><span>${languageUtil.get(locale, "aire.signing")}</span></a> 
212									</#if> 
213								</#if> 
214							</#if> 
215						</div> 
216					</div> 
217					<#if partecipazione.getData() != ""> 
218    					<div class="webcontent-detail__box"> 
219    						<div class="webcontent-detail__box-title">${languageUtil.get(locale, "aire.participation")}</div> 
220							<div> 
221								${partecipazione.getData()} 
222							</div> 
223    					</div> 
224    				</#if> 
225					<#if tags?has_content> 
226						<div class="webcontent-detail__box"> 
227							<div class="webcontent-detail__box-title">${languageUtil.get(locale, "aire.section.tag")}</div> 
228							<div> 
229								<#list tags as tag> 
230									<a href="/ricerca?tag=${tag.getTagId()}" title="${tag.getName()}" class="webcontent-detail__tag">#${tag.getName()}</a> 
231								</#list> 
232							</div> 
233						</div> 
234					</#if> 
235				</div> 
236			</nav> 
237			<div class="col-md-8"> 
238				<div class="webcontent-detail__main"> 
239					<div class="d-flex justify-content-between"> 
240						<div class="d-flex"> 
241							<div class="webcontent-detail__category"> 
242								<#list categorieTema as categoria> 
243									<span>${categoria.getName()?upper_case}</span> 
244								</#list> 
245							</div> 
246							<#if categorieGruppo?has_content> 
247								<div class="webcontent-detail__category_group"><#list categorieGruppo as categoriaG><span>${categoriaG.getName()?upper_case}</span></#list></div> 
248							</#if> 
249						</div> 
250						<div class="bookmark position-relative"> 
251							<@bookmarkCheck className=className classPK=classPK structureId=structureId /> 
252						</div> 
253					</div> 
254                    <#if video?? && video.getSiblings()[0].getData() != ""> 
255                        <section id="section-video" class="webcontent-detail__img"> 
256                            <#list video.getSiblings() as cur_video> 
257                                <#if cur_video.getData()?? && cur_video.getData() != ""> 
258                                    <div class="article-detail__video iframe-responsive"> 
259                                        <iframe src="${cur_video.getData()}" width="640" height="362" frameborder="0" allow="autoplay; fullscreen" allowfullscreen="allowfullscreen" loading="lazy">..</iframe> 
260                                    </div> 
261                                </#if> 
262                            </#list> 
263                        </section> 
264                    <#elseif immagine.getData()?has_content> 
265                        <img src="${immagine.getData()}" alt="${titolo.getData()}" class="webcontent-detail__img" /> 
266                    </#if> 
267 
268					<#if descrizione.getData()?has_content> 
269						${descrizione.getData()} 
270					</#if> 
271					<#if programma_titolo.getSiblings()[0].getData() != ""> 
272						<section id="section-1" class="webcontent-detail__section"> 
273							<h2 class="webcontent-detail__section-title">${languageUtil.get(locale, "aire.program")}</h2> 
274								<#if programma_titolo.getSiblings()?has_content> 
275									<#list programma_titolo.getSiblings() as cur_programma_titolo> 
276										<p> 
277											<strong>${cur_programma_titolo.programma_ora.getData()} - ${cur_programma_titolo.getData()}</strong> 
278										</p> 
279										${cur_programma_titolo.programma_descrizione.getData()} 
280									</#list> 
281								</#if> 
282						</section> 
283					</#if> 
284					<#if logo_sponsor.getSiblings()[0].getData() != ""> 
285						<section id="section-2" class="webcontent-detail__section"> 
286							<h2 class="webcontent-detail__section-title">${languageUtil.get(locale, "aire.partner")}</h2> 
287						    <div class="row"> 
288    							<#list logo_sponsor.getSiblings() as logo> 
289    							    <div class="col-md-3 mb-2"> 
290    							        <img alt="${logo.getAttribute('alt')}" src="${logo.getData()}" /> 
291    							    </div> 
292    							</#list> 
293						    </div> 
294						</section> 
295					</#if> 
296					<#if documenti_allegati.getSiblings()[0].getData() != "" && ((aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && isLoggedIn) || !aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()))> 
297						<section id="section-3" class="webcontent-detail__section"> 
298							<h2 class="webcontent-detail__section-title">${languageUtil.get(locale, "aire.section.documents")}</h2> 
299							<#list documenti_allegati.getSiblings() as allegato> 
300								<#if allegato.getData() != ""> 
301									<@mostraAllegato allegato /> 
302									<#if allegato.titolo_doc.getData() != ""> 
303										<#assign titoloAllegato = allegato.titolo_doc.getData()> 
304									<#else> 
305										<#assign titoloAllegato = allegatoTitle> 
306									</#if> 
307									<a href="${fileEntryDownloadURL}" title="${titoloAllegato}" class="webcontent-detail__attachment d-flex align-items-end w-100"> 
308										<svg class="ico-svg"> 
309											<use xlink:href="${themeIconsPath}#arrow-to-bottom-light"></use> 
310										</svg> 
311										<span>${titoloAllegato}</span> 
312									</a> 
313								</#if> 
314							</#list> 
315						</section> 
316					</#if> 
317				</div> 
318			</div> 
319		</div> 
320	</div> 
321</div> 
322 
323<#assign formVisible = "false" /> 
324<#if partecipazione?? && partecipazione.getData()?has_content && viewForm == "true"> 
325    <#if isLoggedIn && !isSubscribed> 
326        <#assign formVisible = "true" /> 
327    <#elseif !isLoggedIn && !aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData())> 
328        <#assign formVisible = "true" /> 
329    </#if> 
330</#if> 
331 
332<#if formVisible == "true"> 
333	<div class="container"> 
334		<div class="row"> 
335			<div class="col-12"> 
336				<form action="javascript:void(0);" method="post" id="subscribe-event" class="form" aria-label="<@liferay.language key='aire.subscribe.event' />"> 
337					<div class="row"> 
338						<div class="col-12"> 
339							<h2 style="margin-bottom: 10px;"><@liferay.language key="aire.subscribe.event" /></h2> 
340						</div> 
341					</div> 
342					<#if isLoggedIn> 
343                        <div class="row" id="detail-appointment-text"> 
344                            <div class="col-12"> 
345                                <h5 style="margin-bottom: 20px;font-weight: 400;"><@liferay.language key="aire.text.detail.appointment" /></h5> 
346                            </div> 
347                        </div> 
348					</#if> 
349					<div class="row"> 
350						<div class="col-12"> 
351							<div class="d-flex flex-wrap"> 
352								<div class="mr-5" style="min-width: 150px; max-width: 500px;"> 
353									<fieldset> 
354 
355										<div class="row" id="form-event-subscribe-self"> 
356 
357											<div class="col-12 ${selfCheckboxVisibility}"> 
358												<div class="d-flex align-items-center"> 
359													<div class="d-flex py-2"> 
360														<label class="form__label m-0" for="subscribeSelf" style="width: 220px;"><@liferay.language key="aire.subscribe.self" /></label> 
361													</div> 
362													<div class="form__group d-flex flex-column align-content-center mr-5"> 
363														<input type="checkbox" name="subscribeSelf" id="subscribeSelf" class="form__input-text align-self-center checkbox-change" value="${selfAutoFlagged}"/> 
364													</div> 
365												</div> 
366											</div> 
367 
368											<div class="col-12"> 
369												<div class="form__group subscribe-self mt-3 ${selfFormVisibility}"> 
370													<label class="form__label" for="nameSelf" style="width: 200px;"> 
371														<@liferay.language key="aire.name" /> 
372														<span class="reference-mark text-warning" id="fehs____"><svg aria-hidden="true" class="lexicon-icon lexicon-icon-asterisk" focusable="false"><use href="https://aire-dev.ariadnedev.it/o/unindustria-theme/images/clay/icons.svg#asterisk"></use></svg></span> 
373													</label> 
374													<#if isLoggedIn> 
375														<input type="text" name="nameSelf" id="nameSelf" class="form__input-text w-100 required" readonly value="${userFirstName}" style="min-width: 100px; max-width: 500px;background-color: rgba(18,80,149,.1);border: 0px;"/> 
376													<#else> 
377														<input type="text" name="nameSelf" id="nameSelf" class="form__input-text w-100 required" style="min-width: 100px; max-width: 500px;"/> 
378													</#if> 
379												</div> 
380											</div> 
381											<div class="col-12"> 
382												<div class="form__group subscribe-self ${selfFormVisibility}"> 
383													<label class="form__label" for="surnameSelf" style="width: 200px;"> 
384														<@liferay.language key="aire.surname" /> 
385														<span class="reference-mark text-warning" id="fehs____"><svg aria-hidden="true" class="lexicon-icon lexicon-icon-asterisk" focusable="false"><use href="https://aire-dev.ariadnedev.it/o/unindustria-theme/images/clay/icons.svg#asterisk"></use></svg></span> 
386													</label> 
387													<#if isLoggedIn> 
388														<input type="text" name="surnameSelf" id="surnameSelf" class="form__input-text w-100 required" readonly value="${userSurname}" style="min-width: 100px; max-width: 500px;background-color: rgba(18,80,149,.1);border: 0px;"/> 
389													<#else> 
390														<input type="text" name="surnameSelf" id="surnameSelf" class="form__input-text w-100 required" style="min-width: 100px; max-width: 500px;"/> 
391													</#if> 
392												</div> 
393											</div> 
394											<div class="col-12"> 
395												<div class="form__group subscribe-self ${selfFormVisibility}"> 
396													<label class="form__label" for="emailSelf" style="width: 200px;"> 
397														<@liferay.language key="aire.email" /> 
398														<span class="reference-mark text-warning" id="fehs____"><svg aria-hidden="true" class="lexicon-icon lexicon-icon-asterisk" focusable="false"><use href="https://aire-dev.ariadnedev.it/o/unindustria-theme/images/clay/icons.svg#asterisk"></use></svg></span> 
399													</label> 
400													<#if isLoggedIn> 
401														<input type="text" name="emailSelf" id="emailSelf" class="form__input-text w-100 required" readonly value="${userEmail}" style="min-width: 100px; max-width: 500px;background-color: rgba(18,80,149,.1);border: 0px;"/> 
402													<#else> 
403														<input type="text" name="emailSelf" id="emailSelf" class="form__input-text w-100 required" style="min-width: 100px; max-width: 500px;"/> 
404													</#if> 
405												</div> 
406											</div> 
407											<#if formCompany == "true"> 
408												<div class="col-12"> 
409													<div class="form__group  ${selfFormVisibility} subscribe-self"> 
410														<label class="form__label" for="companySelf" style="width: 200px;"><@liferay.language key="aire.company" /></label> 
411														<textarea type="text" name="companySelf" id="companySelf" class="form__input-text w-100" style="min-width: 100px; max-width: 500px;"></textarea> 
412													</div> 
413												</div> 
414											</#if> 
415											<#if formNotes == "true"> 
416												<div class="col-12"> 
417													<div class="form__group ${selfFormVisibility} subscribe-self"> 
418														<label class="form__label" for="notesSelf" style="width: 200px;"><@liferay.language key="aire.notes" /></label> 
419														<textarea type="text" name="notesSelf" id="notesSelf" class="form__input-text w-100" style="min-width: 100px; max-width: 500px;"></textarea> 
420													</div> 
421												</div> 
422											</#if> 
423 
424											<#if dinnerCheck == "true"> 
425											<div class="col-12"> 
426												<div class="subscribe-self ${selfFormVisibility}"> 
427													<div class="d-flex align-items-center"> 
428														<div class="d-flex py-2"> 
429															<label class="form__label m-0" for="dinnerSelf" style="width: 220px;"><@liferay.language key="aire.dinner" /></label> 
430														</div> 
431														<div class="form__group d-flex flex-column align-content-center"> 
432															<input type="checkbox" name="dinnerSelf" id="dinnerSelf" class="form__input-text align-self-center checkbox-change" value="false"/> 
433														</div> 
434													</div> 
435												</div> 
436											</div> 
437											</#if> 
438 
439											<#if streamingCheck == "true"> 
440												<div class="col-12"> 
441													<div class="subscribe-self ${selfFormVisibility}"> 
442														<div class="d-flex align-items-center"> 
443															<div class="d-flex py-2"> 
444																<label class="form__label m-0" for="streamingSelf" style="width: 220px;"><@liferay.language key="aire.remote" /></label> 
445															</div> 
446															<div class="form__group d-flex flex-column align-content-center"> 
447																<input type="checkbox" name="streamingSelf" id="streamingSelf" class="form__input-text align-self-center checkbox-change" value="false"/> 
448															</div> 
449														</div> 
450													</div> 
451												</div> 
452											</#if> 
453 
454											<#if publicPartCheck == "true"> 
455												<div class="col-12"> 
456													<div class="subscribe-self ${selfFormVisibility}"> 
457														<div class="d-flex align-items-center"> 
458															<div class="d-flex py-2"> 
459																<label class="form__label m-0" for="publicPartSelf" style="width: 220px;"><@liferay.language key="aire.public.part" /></label> 
460															</div> 
461															<div class="form__group d-flex flex-column align-content-center mr-5"> 
462																<input type="checkbox" name="publicPartSelf" id="publicPartSelf" class="form__input-text align-self-center checkbox-change" value="false"/> 
463															</div> 
464														</div> 
465													</div> 
466												</div> 
467											</#if> 
468 
469											<#if privatePartCheck == "true"> 
470												<div class="col-12"> 
471													<div class="subscribe-self ${selfFormVisibility}"> 
472														<div class="d-flex align-items-center"> 
473															<div class="d-flex py-2"> 
474																<label class="form__label m-0" for="privatePartSelf" style="width: 220px;"><@liferay.language key="aire.private.part" /></label> 
475															</div> 
476															<div class="form__group d-flex flex-column align-content-center mr-5"> 
477																<input type="checkbox" name="privatePartSelf" id="privatePartSelf" class="form__input-text align-self-center checkbox-change" value="false"/> 
478															</div> 
479														</div> 
480													</div> 
481												</div> 
482											</#if> 
483											<#if !aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && !isLoggedIn> 
484												<div class="col-12"> 
485													<@liferay_captcha["captcha"]/> 
486												</div> 
487											</#if> 
488										</div> 
489 
490									</fieldset> 
491								</div> 
492								<#if isLoggedIn> 
493									<div class="mr-5" style="min-width: 150px; max-width: 500px;"> 
494 
495										<fieldset> 
496											<div class="row" id="form-event-subscribe-other"> 
497 
498												<div class="col-12"> 
499													<div class="d-flex align-items-center"> 
500														<div class="d-flex py-2"> 
501															<label class="form__label m-0" for="subscribeOther" style="width: 220px;"><@liferay.language key="aire.subscribe.other" /></label> 
502														</div> 
503														<div class="form__group d-flex flex-column align-content-center mr-5"> 
504															<input type="checkbox" name="subscribeOther" id="subscribeOther" class="form__input-text align-self-center checkbox-change" value="false"/> 
505														</div> 
506													</div> 
507												</div> 
508												<div class="col-12"> 
509													<div class="form__group subscribe-other d-none mt-3"> 
510														<label class="form__label" for="nameOther" style="width: 200px;"> 
511															<@liferay.language key="aire.name" /> 
512															<span class="reference-mark text-warning" id="fehs____"><svg aria-hidden="true" class="lexicon-icon lexicon-icon-asterisk" focusable="false"><use href="https://aire-dev.ariadnedev.it/o/unindustria-theme/images/clay/icons.svg#asterisk"></use></svg></span> 
513														</label> 
514															<input type="text" name="nameOther" id="nameOther" class="form__input-text w-100 required" style="min-width: 100px; max-width: 500px;"/> 
515													</div> 
516												</div> 
517												<div class="col-12"> 
518													<div class="form__group subscribe-other d-none"> 
519														<label class="form__label" for="surnameOther" style="width: 200px;"> 
520															<@liferay.language key="aire.surname" /> 
521															<span class="reference-mark text-warning" id="fehs____"><svg aria-hidden="true" class="lexicon-icon lexicon-icon-asterisk" focusable="false"><use href="https://aire-dev.ariadnedev.it/o/unindustria-theme/images/clay/icons.svg#asterisk"></use></svg></span> 
522														</label> 
523														<input type="text" name="surnameOther" id="surnameOther" class="form__input-text w-100 required" style="min-width: 100px; max-width: 500px;"/> 
524													</div> 
525												</div> 
526												<div class="col-12"> 
527													<div class="form__group subscribe-other d-none"> 
528														<label class="form__label" for="emailOther" style="width: 200px;"> 
529															<@liferay.language key="aire.email" /> 
530															<span class="reference-mark text-warning" id="fehs____"><svg aria-hidden="true" class="lexicon-icon lexicon-icon-asterisk" focusable="false"><use href="https://aire-dev.ariadnedev.it/o/unindustria-theme/images/clay/icons.svg#asterisk"></use></svg></span> 
531														</label> 
532														<input type="text" name="emailOther" id="emailOther" class="form__input-text w-100 required" style="min-width: 100px; max-width: 500px;"/> 
533													</div> 
534												</div> 
535												<#if formCompany == "true"> 
536													<div class="col-12"> 
537														<div class="form__group subscribe-other d-none"> 
538															<label class="form__label" for="companyOther" style="width: 200px;"><@liferay.language key="aire.company" /></label> 
539															<textarea type="text" name="companyOther" id="companyOther" class="form__input-text w-100" style="min-width: 100px; max-width: 500px;"></textarea> 
540														</div> 
541													</div> 
542												</#if> 
543												<#if formNotes == "true"> 
544													<div class="col-12"> 
545														<div class="form__group subscribe-other d-none"> 
546															<label class="form__label" for="notesOther" style="width: 200px;"><@liferay.language key="aire.notes" /></label> 
547															<textarea type="text" name="notesOther" id="notesOther" class="form__input-text w-100" style="min-width: 100px; max-width: 500px;"></textarea> 
548														</div> 
549													</div> 
550												</#if> 
551 
552												<#if dinnerCheck == "true"> 
553													<div class="col-12"> 
554														<div class="subscribe-other d-none"> 
555															<div class="d-flex align-items-center"> 
556																<div class="d-flex py-2"> 
557																	<label class="form__label m-0" for="dinnerOther" style="width: 220px;"><@liferay.language key="aire.dinner" /></label> 
558																</div> 
559																<div class="form__group d-flex flex-column align-content-center"> 
560																	<input type="checkbox" name="dinnerOther" id="dinnerOther" class="form__input-text align-self-center checkbox-change" value="false"/> 
561																</div> 
562															</div> 
563														</div> 
564													</div> 
565												</#if> 
566 
567												<#if streamingCheck == "true"> 
568													<div class="col-12"> 
569														<div class="subscribe-other d-none align-items-center"> 
570															<div class="d-flex align-items-center"> 
571																<div class="d-flex py-2"> 
572																	<label class="form__label m-0" for="streamingOther" style="width: 220px;"><@liferay.language key="aire.remote" /></label> 
573																</div> 
574																<div class="form__group d-flex flex-column align-content-center"> 
575																	<input type="checkbox" name="streamingOther" id="streamingOther" class="form__input-text align-self-center checkbox-change" value="false"/> 
576																</div> 
577															</div> 
578														</div> 
579													</div> 
580												</#if> 
581 
582												<#if publicPartCheck == "true"> 
583													<div class="col-12"> 
584														<div class="subscribe-other d-none"> 
585															<div class="d-flex align-items-center"> 
586																<div class="d-flex py-2"> 
587																	<label class="form__label m-0" for="publicPartOther" style="width: 220px;"><@liferay.language key="aire.public.part" /></label> 
588																</div> 
589																<div class="form__group d-flex flex-column align-content-center mr-5"> 
590																	<input type="checkbox" name="publicPartOther" id="publicPartOther" class="form__input-text align-self-center checkbox-change" value="false"/> 
591																</div> 
592															</div> 
593														</div> 
594													</div> 
595												</#if> 
596 
597												<#if privatePartCheck == "true"> 
598													<div class="col-12"> 
599														<div class="subscribe-other d-none"> 
600															<div class="d-flex align-items-center"> 
601																<div class="d-flex py-2"> 
602																	<label class="form__label m-0" for="privatePartOther" style="width: 220px;"><@liferay.language key="aire.private.part" /></label> 
603																</div> 
604																<div class="form__group d-flex flex-column align-content-center mr-5"> 
605																	<input type="checkbox" name="privatePartOther" id="privatePartOther" class="form__input-text align-self-center checkbox-change" value="false"/> 
606																</div> 
607															</div> 
608														</div> 
609													</div> 
610												</#if> 
611											</div> 
612										</fieldset> 
613									</div> 
614								</#if> 
615								<div id="privacy-element" class="col-12 pl-0 ${selfFormVisibility}"> 
616									<div class=""> 
617										<div class="d-flex align-items-center"> 
618											<div class="form__group d-flex flex-column align-content-center mr-3"> 
619												<input type="checkbox" name="privacy" id="privacy" class="form__input-text align-self-center" value="false"/> 
620											</div> 
621											<div class="d-flex py-2"> 
622												<label class="form__label m-0" for="privacy"><i><@liferay.language key='aire.privacy.condition' /></i> 
623												    <span class="reference-mark text-warning" id="fehs____"><svg aria-hidden="true" class="lexicon-icon lexicon-icon-asterisk" focusable="false"><use href="https://aire-dev.ariadnedev.it/o/unindustria-theme/images/clay/icons.svg#asterisk"></use></svg></span> 
624												</label> 
625 
626											</div> 
627										</div> 
628									</div> 
629								</div> 
630							</div> 
631						</div> 
632					</div> 
633					<div class="row"> 
634						<div class="col-12"> 
635							<div class="form__group" id="submit-form-event"> 
636								<input id="submitInput" type="submit" value="<@liferay.language key='aire.signing' />" aria-label="<@liferay.language key='aire.signing'/>" title="<@liferay.language key='aire.signing' />" class="form__submit cta-link" style="margin-bottom: 20px;margin-top: 10px;padding: 0 10px"/> 
637							</div> 
638						</div> 
639					</div> 
640					<div class="row"> 
641						<div class="col-12"> 
642							<span class="d-none" id="subscription-required" style="color: red;"><@liferay.language key="aire.subscribe.event.required" /></span> 
643							<span class="d-none" id="subscription-successful"><@liferay.language key="aire.subscribe.event.success" /></span> 
644							<span class="d-none" id="subscription-error"><@liferay.language key="aire.subscribe.event.error" /></span> 
645						</div> 
646					</div> 
647				</form> 
648			</div> 
649		</div> 
650	</div> 
651</#if> 
652 
653<#if isSubscribed> 
654  <div class="container"> 
655    <div class="row"> 
656      <div class="col-12"> 
657          <div class="row"> 
658            <div class="col-12"> 
659            	<h4 style="margin-bottom: 10px;"><@liferay.language key="aire.appointment.already.subscribed" /></h4> 
660            </div> 
661          </div> 
662      </div> 
663    </div> 
664  </div> 
665</#if> 
666 
667<div> 
668	<#if id?? && id.getData()?has_content> 
669		<input type="hidden" id="field-id" value="${id.getData()}"> 
670	</#if> 
671	<#if partecipazione?? && partecipazione.getData()?has_content> 
672		<input type="hidden" id="field-hidden-partecipazione" value="${partecipazione.getData()}"> 
673	</#if> 
674	<#if cena?? && cena.getData()?has_content> 
675		<input type="hidden" id="field-hidden-cena" value="${cena.getData()}"> 
676	</#if> 
677	<#if presenza?? && presenza.getData()?has_content> 
678		<input type="hidden" id="field-hidden-presenza" value="${presenza.getData()}"> 
679	</#if> 
680	<#if streaming?? && streaming.getData()?has_content> 
681		<input type="hidden" id="field-hidden-streaming" value="${streaming.getData()}"> 
682	</#if> 
683	<#if parte_pubblica?? && parte_pubblica.getData()?has_content> 
684		<input type="hidden" id="field-hidden-parte-pubblica" value="${parte_pubblica.getData()}"> 
685	</#if> 
686	<#if parte_privata?? && parte_privata.getData()?has_content> 
687		<input type="hidden" id="field-hidden-parte-privata" value="${parte_privata.getData()}"> 
688	</#if> 
689</div> 
690 
691<#include "${templatesPath}/A-CHI-RIVOLGERSI" /> 
692 
693<#assign isLoggedIn = isLoggedIn?string('true', 'false') /> 
694 
695<script> 
696 
697	$(document).ready(function() { 
698		$("#subscribeOther").click(function() { 
699 
700			if ($(this).is(":checked") || $("#subscribeSelf").is(":checked")) { 
701				document.getElementById("privacy-element").classList.remove('d-none'); 
702				document.getElementById("privacy-element").classList.remove('d-block'); 
703				document.getElementById("privacy-element").classList.add('d-block'); 
704			} else { 
705				document.getElementById("privacy-element").classList.remove('d-none'); 
706				document.getElementById("privacy-element").classList.remove('d-block'); 
707				document.getElementById("privacy-element").classList.add('d-none'); 
708
709		}); 
710 
711		$("#subscribeSelf").click(function() { 
712			if ($(this).is(":checked") || $("#subscribeOther").is(":checked")) { 
713				document.getElementById("privacy-element").classList.remove('d-none'); 
714				document.getElementById("privacy-element").classList.remove('d-block'); 
715				document.getElementById("privacy-element").classList.add('d-block'); 
716			} else { 
717				document.getElementById("privacy-element").classList.remove('d-none'); 
718				document.getElementById("privacy-element").classList.remove('d-block'); 
719				document.getElementById("privacy-element").classList.add('d-none'); 
720
721		}); 
722	}); 
723 
724	$(".checkbox-change").on('change', function() { 
725		$(this).attr('value', $(this).is(':checked') ? 'true' : 'false'); 
726	}); 
727 
728	function setupSubscriptionHandler(checkboxId, containerClass) { 
729 
730		let subscribeCheckbox = document.getElementById(checkboxId); 
731		let dependentContainers = document.querySelectorAll("." + containerClass); 
732		let dependentFields = document.querySelectorAll("." + containerClass + " > input"); 
733 
734		if (!subscribeCheckbox) { 
735			return; 
736
737 
738		subscribeCheckbox.addEventListener('change', function () { 
739			let isChecked = subscribeCheckbox.checked; 
740 
741			dependentContainers.forEach(container => { 
742				if (isChecked) { 
743					container.classList.remove('d-none'); 
744					container.classList.add('d-block'); 
745				} else { 
746					container.classList.remove('d-block'); 
747					container.classList.add('d-none'); 
748
749			}); 
750 
751			dependentFields.forEach(field => { 
752				if (isChecked) { 
753					field.setAttribute('required', 'required'); 
754					field.classList.add('required'); 
755				} else { 
756					field.removeAttribute('required'); 
757					field.classList.remove('required'); 
758
759			}); 
760		}); 
761
762 
763	setupSubscriptionHandler('subscribeSelf', 'subscribe-self'); 
764	setupSubscriptionHandler('subscribeOther', 'subscribe-other'); 
765 
766	$(document).on("click", "#submitInput", function(e){ 
767		e.preventDefault(); 
768 
769		function gatherValues(fields, permission) { 
770			if (!permission) { 
771				return ""; 
772
773 
774			let values = {}; 
775			fields.forEach(function(id) { 
776				let element = $("#" + id); 
777				if (element.length) { 
778					values[id] = element.val(); 
779
780			}); 
781			return values; 
782
783 
784		function generateUrl(values, suffix) { 
785 
786			let captchaInput = ($("[id$='captchaText']").length)? $("[id$='captchaText']").val() : ""; 
787 
788			return "/o/unindustria/form/event/subscribe?eventId=" + "${articleid}" 
789				+ "&userId=" + ${userId} 
790				+ "&userName=" + values["name" + suffix] 
791				+ "&userSurname=" + values["surname" + suffix] 
792				+ "&userEmail=" + values["email" + suffix] 
793				+ "&dinner=" + values["dinner" + suffix] 
794				+ "&userNotes=" + values["notes" + suffix] 
795				+ "&company=" + values["company" + suffix] 
796				+ "&captchaInput=" + captchaInput 
797				+ "&eventIdCreation=" + "${idEventCreation}" 
798				+ "&publicPart=" + values["publicPart" + suffix] 
799				+ "&privatePart=" + values["privatePart" + suffix] 
800				+ "&streaming=" + values["streaming" + suffix] 
801				+ "&isLoggedIn=" + "${isLoggedIn}"; 
802
803 
804		let valuesSelf = gatherValues([ 
805			"notesSelf", "companySelf", "nameSelf", "surnameSelf", "emailSelf", 
806			"dinnerSelf", "streamingSelf", "publicPartSelf", "privatePartSelf" 
807		], $('#subscribeSelf').val()=='true'); 
808 
809		let valuesOther = gatherValues([ 
810			"notesOther", "companyOther", "nameOther", "surnameOther", "emailOther", 
811			"dinnerOther", "streamingOther", "publicPartOther", "privatePartOther" 
812		], $('#subscribeOther').val()=='true'); 
813 
814		let validateEmail = (email) => { 
815		  return String(email) 
816		    .toLowerCase() 
817			.trim() 
818		    .match( 
819				/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|.(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ 
820		    ); 
821		}; 
822 
823		let isSelfInputValid = (valuesSelf.nameSelf?.trim().length > 0 && valuesSelf.surnameSelf?.trim().length > 0 && validateEmail(valuesSelf.emailSelf?.trim()) && $("#privacy").is(":checked")); 
824		let isOtherInputValid = (valuesOther.nameOther?.trim().length > 0 && valuesOther.surnameOther?.trim().length > 0 && validateEmail(valuesOther.emailOther?.trim()) && $("#privacy").is(":checked")); 
825 
826		if ((!isSelfInputValid && !isOtherInputValid) || (isSelfInputValid && !isOtherInputValid && $("#subscribeOther").is(":checked")) || (isOtherInputValid && !isSelfInputValid && $("#subscribeSelf").is(":checked"))) { 
827 
828			$("#subscription-required").removeClass("d-none"); 
829			$("#submitInput") 
830				.removeAttr("disabled") 
831				.css({ 
832					"background-color": "", 
833					"color": "", 
834					"opacity": "" 
835        	}); 
836			return; 
837
838 
839		$("#subscription-required").addClass("d-none"); 
840		$("#submitInput") 
841			.attr("disabled", true) 
842			.css({ 
843			"background-color": "dimgrey", 
844			"color": "linen", 
845			"opacity": "1" 
846			}); 
847 
848		function subscribe(urlSubscribe, callback) { 
849			$.ajax({ 
850				type: "GET", 
851				url: urlSubscribe, 
852				dataType: 'json', 
853				success: function (data) { 
854					if (data.results == "ok") { 
855						$("#subscription-successful").removeClass("d-none"); 
856						$("#subscription-error").addClass("d-none"); 
857 
858						$("#form-event-subscribe-self").hide(); 
859						$("#form-event-subscribe-other").hide(); 
860						$("#submit-form-event").hide(); 
861						$("#privacy-element").removeClass("d-block"); 
862						$("#privacy-element").addClass("d-none"); 
863						$("#detail-appointment-text").addClass("d-none"); 
864					} else { 
865						$("#subscription-error").removeClass("d-none"); 
866						$("#submitInput") 
867							.removeAttr("disabled") 
868							.css({ 
869							"background-color": "", 
870							"color": "", 
871							"opacity": "" 
872						}); 
873
874				}, 
875				error: function (xhr, ajaxOptions, thrownError) { 
876					console.log("error"); 
877				}, 
878				complete: function () { 
879					if (callback) { 
880						callback(); 
881
882
883			}); 
884
885 
886		if (isSelfInputValid) { 
887			// First subscribe call with callback to handle the second subscribe 
888			subscribe(generateUrl(valuesSelf, "Self"), function() { 
889				if (isOtherInputValid) { 
890					subscribe(generateUrl(valuesOther, "Other"), null); 
891
892			}); 
893		} else if (isOtherInputValid) { 
894			// Handle the case where only the second input is valid 
895			subscribe(generateUrl(valuesOther, "Other"), null); 
896
897	}); 
898 
899</script>