Errorea gertatu da txantiloia prozesatzerakoan.
The following has evaluated to null or missing:
==> sede [in template "387440#387480#1070294" at line 73, column 34]
----
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: @liferay.language key=sede.tramites.d... [in template "387440#387480#1070294" at line 73, column 11]
----
1<#assign DLFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService")>
2
3<#assign themeImagesPath = themeDisplay.getPathThemeImages()>
4<#assign dniSvgPath = themeImagesPath + "/iconos_acceso/dni_electronico.svg">
5<#assign certificadoSvgPath = themeImagesPath + "/iconos_acceso/certificado_electronico.svg">
6<#assign claveSvgPath = themeImagesPath + "/iconos_acceso/clave.svg">
7<#assign autofirmaSvgPath = themeImagesPath + "/iconos_acceso/autofirma.svg">
8
9<#assign DNIe = getterUtil.getBoolean(modoAccesoTramite.checkDNIe.getData())>
10<#assign certificado = getterUtil.getBoolean(modoAccesoTramite.certificadoElectronico.getData())>
11<#assign clave = getterUtil.getBoolean(modoAccesoTramite.checkClave.getData())>
12<#assign autofirma = getterUtil.getBoolean(modoAccesoTramite.checkAutofirma.getData())>
13
14<#assign hermanosAviso = avisosTramite.getSiblings()>
15
16<#assign summaryFields = [
17 { "field": plazosTramite.getData(), "labelKey": "tramites.detalles.plazos" },
18 { "field": tramiteDescripcion.getData(), "labelKey": "sede.tramites.detalles.descripcion" },
19 { "field": tramiteRequisitos.getData(), "labelKey": "sede.tramites.detalles.requisitos" },
20 { "field": tramiteSolicitud.getData(), "labelKey": "sede.tramites.detalles.solicitud" },
21 { "field": tramiteDocumentacionSolicitudInscripcion.getData(), "labelKey": "sede.tramites.detalles.documentacionSolicitudInscripcion" },
22 { "field": tramiteOtraDocumentacion.getData(), "labelKey": "sede.tramites.detalles.otraDocumentacion" },
23 { "field": modoAccesoTramite.getData(), "labelKey": "sede.tramites.detalles.acceso" },
24 { "field": tramiteUnidadGestion.getData(), "labelKey": "sede.tramites.detalles.unidad.gestion" },
25 { "field": tramiteCodigoSIA.getData(), "labelKey": "sede.tramites.detalles.codigo.SIA" },
26 { "field": avisoProcedim.getData(), "labelKey": "sede.tramites.detalles.avisos" }
27] />
28
29
30<article class="sede-ficha m-vertical-content">
31 <#if tramiteTitulo.getData()?has_content>
32 <h2>${tramiteTitulo.getData()}</h2>
33 </#if>
34
35 <!-- Avisos y plazos -->
36 <#assign warningsHasData = false>
37 <#list hermanosAviso as cur_aviso>
38 <#if cur_aviso.tituloAvisosTramite.getData()?has_content || cur_aviso.contenidoAvisosTramite.getData()?has_content>
39 <#assign warningsHasData = true>
40 <#break>
41 </#if>
42 </#list>
43
44 <#assign deadlinesHasData = false>
45 <#list plazosTramite.getSiblings() as cur_plazo>
46 <#if cur_plazo.getData()?has_content>
47 <#assign deadlinesHasData = true>
48 <#break>
49 </#if>
50 </#list>
51
52 <#if warningsHasData || deadlinesHasData>
53 <#if hermanosAviso?? && hermanosAviso?has_content>
54 <#list hermanosAviso as cur>
55 <#if cur.tituloAvisosTramite.getData()?has_content || cur.contenidoAvisosTramite.getData()?has_content>
56 <div class="sede-alert">
57 <span class="sede-icon sede-icon--alert sede-icon--size-48" aria-hidden="true"></span>
58
59 <div class="sede-alert__body">
60 <#if cur.tituloAvisosTramite.getData()?has_content><h4 class="sede-alert__title">${cur.tituloAvisosTramite.getData()}</h4></#if>
61 <#if cur.contenidoAvisosTramite.getData()??><div>${cur.contenidoAvisosTramite.getData()}</div></#if>
62 </div>
63 </div>
64 </#if>
65 </#list>
66 <#else>
67 <p><@liferay.language key="sede.tramites.detalles.avisos.vacio" /></p>
68 </#if>
69
70 <section class="sede-ficha__resumen">
71 <section class="sede-ficha__fila">
72 <h3 class="h5 sede-ficha__fila-label">
73 <@liferay.language key=sede.tramites.detalles.plazos />
74 </h3>
75
76 <div class="sede-ficha__fila-valor">
77 <#if plazosTramite.getData()?has_content>
78 <#list plazosTramite.getSiblings() as cur_plazo>
79 <#if cur_plazo.getData()?has_content>
80 <div>${cur_plazo.getData()}</div>
81 </#if>
82 </#list>
83 <#else>
84 <p><@liferay.language key="sede.tramites.detalles.plazos.vacio" /></p>
85 </#if>
86 </div>
87 </section>
88 </section>
89
90 </#if>
91
92 <!-- Tabla resumen -->
93 <section class="sede-ficha__resumen">
94 <#list summaryFields as item>
95 <#if item.field?has_content || item.labelKey == "sede.tramites.detalles.acceso">
96 <section class="sede-ficha__fila">
97 <h3 class="h5 sede-ficha__fila-label">
98 <@liferay.language key=item.labelKey />
99 </h5>
100
101 <div class="sede-ficha__fila-valor">
102 <#if item.labelKey == "sede.tramites.detalles.acceso">
103 <#if item.field?has_content><p>${item.field}</p></#if>
104
105 <div class="iconos-acceso">
106 <#if DNIe><img src="${dniSvgPath}" alt="${languageUtil.get(locale,'es.gob.inclusion.img.alt.dni.electronico','Icono del DNI electrónico')}"></#if>
107 <#if certificado><img src="${certificadoSvgPath}" alt="${languageUtil.get(locale,'es.gob.inclusion.img.alt.certificado.electronico','Icono del certificado electrónico')}"></#if>
108 <#if clave><img src="${claveSvgPath}" alt="${languageUtil.get(locale,'es.gob.inclusion.img.alt.clave','Icono de Cl@ve')}"></#if>
109 <#if autofirma><img src="${autofirmaSvgPath}" alt="${languageUtil.get(locale,'es.gob.inclusion.img.alt.autofirma','Icono de Autofirma')}"></#if>
110 </div>
111 <#else>
112 ${item.field}
113 </#if>
114 </div>
115 </section>
116 </#if>
117 </#list>
118
119 <#if tramiteAccesoTramite.getData()?has_content>
120 <section class="sede-ficha__cta">
121 <a class="sede-button noicon" href="${tramiteAccesoTramite.getData()}" <#if tramiteAccesoTramite.getData()?starts_with("http")>target="_blank" rel="noopener"</#if>>
122 <span><@liferay.language key="sede.tramites.detalles.accede.tramite" /></span>
123 <i class="sede-icon sede-icon--arrow-forward-long sede-icon--size-16" aria-hidden="true"></i>
124 </a>
125 </section>
126 </#if>
127 </section>
128
129 <!-- Paso a paso -->
130 <#if tramitePasoAPaso.getData()?has_content>
131 <section>
132 <h3><@liferay.language key="sede.tramites.detalles.paso.a.paso" /></h3>
133
134 <#if tramitePasoAPaso.getSiblings()?has_content>
135 <ol>
136 <#list tramitePasoAPaso.getSiblings() as paso>
137 <li>${paso.getData()}</li>
138 </#list>
139 </ol>
140 </#if>
141 </section>
142 </#if>
143
144 <!-- Requisitos y documentación -->
145 <#if tramiteRequisitosDocumentacion.getData()?has_content || tramiteRequisitosDocumentacion.tramiteTituloDocumento.tramiteDocumento.getData()?has_content>
146 <section>
147 <h3><@liferay.language key="sede.tramites.detalles.requisitos.documentacion" /></h3>
148 <#if tramiteRequisitosDocumentacion.getData()?has_content><p>${tramiteRequisitosDocumentacion.getData()}</p></#if>
149
150 <#if tramiteRequisitosDocumentacion.tramiteTituloDocumento.getSiblings()?has_content>
151 <ul>
152 <#list tramiteRequisitosDocumentacion.tramiteTituloDocumento.getSiblings() as cur_tramiteRequisitosDocumentacion_tramiteTituloDocumento>
153 <#if cur_tramiteRequisitosDocumentacion_tramiteTituloDocumento.tramiteDocumento.getData()?has_content>
154 <#assign curDocFile = cur_tramiteRequisitosDocumentacion_tramiteTituloDocumento.tramiteDocumento.getData() />
155 <li>
156 <a data-senna-off="true" href="${cur_tramiteRequisitosDocumentacion_tramiteTituloDocumento.tramiteDocumento.getData()}" <#if curDocFile?lower_case?contains(".pdf")>target="_blank"</#if>>
157 ${cur_tramiteRequisitosDocumentacion_tramiteTituloDocumento.getData()}
158 </a>
159 </li>
160 </#if>
161 </#list>
162 </ul>
163 </#if>
164 </section>
165 </#if>
166
167 <!-- Normativa básica -->
168 <#if tramiteNormativaBasica.getData()?has_content>
169 <section>
170 <h3><@liferay.language key="sede.tramites.detalles.normativa" /></h3>
171 <p>${tramiteNormativaBasica.getData()}</p>
172
173 <#if tramiteNormativaBasica.TituloNormativa.getSiblings()?has_content>
174 <ul>
175 <#list tramiteNormativaBasica.TituloNormativa.getSiblings() as cur_tramiteNormativaBasica_TituloNormativa>
176 <#if cur_tramiteNormativaBasica_TituloNormativa.getData()?has_content && cur_tramiteNormativaBasica_TituloNormativa.UrlNormativa.getData()?has_content>
177 <li>
178 <a href="${cur_tramiteNormativaBasica_TituloNormativa.UrlNormativa.getData()}">${cur_tramiteNormativaBasica_TituloNormativa.getData()}</a>
179 </li>
180 </#if>
181 </#list>
182 </ul>
183 </#if>
184 </section>
185 </#if>
186
187
188
189</article>
190
191<script>
192 document.addEventListener('DOMContentLoaded', () => {
193 const tabs = document.querySelectorAll('.sede-tabs__btn');
194 const panels = document.querySelectorAll('.sede-tabs__panel');
195
196 function activateTab(tab) {
197 tabs.forEach(t => {
198 t.classList.remove('is-active');
199 t.setAttribute('aria-selected', 'false');
200 t.setAttribute('tabindex', '-1');
201 });
202
203 panels.forEach(p => {
204 p.classList.remove('is-active');
205 p.setAttribute('hidden', 'true');
206 });
207
208 tab.classList.add('is-active');
209 tab.setAttribute('aria-selected', 'true');
210 tab.setAttribute('tabindex', '0');
211
212 const panel = document.getElementById(tab.getAttribute('aria-controls'));
213 panel.classList.add('is-active');
214 panel.removeAttribute('hidden');
215 }
216
217 tabs.forEach(tab => {
218 tab.addEventListener('click', () => activateTab(tab));
219
220 tab.addEventListener('keydown', e => {
221 let index = Array.prototype.indexOf.call(tabs, tab);
222 if (e.key === 'ArrowRight') {
223 index = (index + 1) % tabs.length;
224 tabs[index].focus();
225 } else if (e.key === 'ArrowLeft') {
226 index = (index - 1 + tabs.length) % tabs.length;
227 tabs[index].focus();
228 } else if (e.key === 'Home') {
229 tabs[0].focus();
230 } else if (e.key === 'End') {
231 tabs[tabs.length - 1].focus();
232 } else if (e.key === 'Enter' || e.key === ' ') {
233 e.preventDefault();
234 activateTab(tab);
235 }
236 });
237 });
238 });
239</script>