An error occurred while processing the template.
The following has evaluated to null or missing:
==> journalArticleLocalService.fetchLatestArticle(webContentData.classPK?number) [in template "74012524" at line 10, 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: #assign avisoEmergente = journalArtic... [in template "74012524" in macro "generarAvisoEmergente" at line 10, column 9]
- Reached through: @generarAvisoEmergente avisoEmergente [in template "20096#20121#37915" at line 26, column 1]
----
1<#-- Última versión 16/12/2025 -->
2<#-- Plantilla que muestra el detalle de contenido con los componentes:
3 - Avisos y novedades
4-->
5<#-- Obtener la ruta a las imágenes del tema -->
6<#assign
7 theme_display = themeDisplay
8 themeImagePath = theme_display.getPathThemeImages()
9/>
10
11<#-- Incluir la plantilla de selector de icono-->
12<#include "${templatesPath}/49219">
13
14
15<#-- Incluir la plantilla que genera la sección de recursos relacionados-->
16<#include "${templatesPath}/49195">
17
18
19<#-- Incluir la plantilla que genera la sección de avisos relacionados-->
20<#include "${templatesPath}/232636">
21
22<#-- Incluir la plantilla que genera la alerta -->
23<#include "${templatesPath}/74012524">
24
25<#if avisoEmergente?? && avisoEmergente.getData()??>
26<@generarAvisoEmergente avisoEmergente/>
27</#if>
28
29<div class="container">
30 <section class="sectTittel">
31 <div class="row">
32 <div class="col-12">
33 <#if (encabezado.getData())??>
34 <h1>${encabezado.getData()}</h1>
35 </#if>
36 <#-- Sección que muestra la fecha de la última actualización del artículo -->
37 <p style="font-size: 0.7778rem;color: #495C89;" class="docPub">Fecha de la última modificación:
38
39 <#assign fecha_Data = getterUtil.getString(fechaActualizacion.getData())>
40 <#if validator.isNotNull(fecha_Data)>
41 <#assign fecha_DateObj = dateUtil.parseDate("yyyy-MM-dd", fecha_Data, locale)>
42 ${dateUtil.getDate(fecha_DateObj, "dd/MM/yyyy", locale)}
43 <#else>
44 <#assign fechaModificacion_Data = .vars["reserved-article-modified-date"].data>
45 <#assign fechaActualizacion_Data = dateUtil.parseDate("EEE, dd MMM yyyy HH:mm:ss Z", fechaModificacion_Data , locale)>
46 ${dateUtil.getDate(fechaActualizacion_Data, "dd/MM/yyyy", locale)}
47 </#if>
48
49 </p>
50 </div>
51 </div>
52 </section>
53
54 <div class="row">
55 <#assign tramitacion=false />
56 <#if secTramitacion.getSiblings()?has_content && (secTramitacion.tituloSecTram?? && secTramitacion.tituloSecTram.getData()?has_content) || (secTramitacion.getSiblings()[0].gTramitacion.getSiblings()?? && secTramitacion.getSiblings()[0].gTramitacion.getSiblings()[0].tituloTramitacion.getData()?has_content)>
57 <#assign tramitacion=true />
58 </#if>
59
60 <#if ((secRecursos.tituloCon.getData())?? && secRecursos.tituloCon.getData()?has_content) || tramitacion>
61 <div class="col-12 col-lg-8 colpadR060" id="sectContPrin">
62 <#else>
63 <div class="col-12 colpadR060" id="sectContPrin">
64 </#if>
65 <!-- Section Acordeon -->
66
67 <section class="sectAccordModel">
68 <div class="row">
69 <div class="col-12">
70 <#if (secFij.tituloSecFij.getData())?? && secFij.tituloSecFij.getData()?has_content>
71 <h2 class="h2accord">${secFij.tituloSecFij.getData()} </h2>
72 </#if>
73 <div>
74 <#if (secFij.textoSecFij.getData())??>
75 ${secFij.textoSecFij.getData()}
76 </#if>
77 </div>
78 </div>
79 </div>
80 <div class="row">
81 <div class="col-12">
82 <div class="divAccorModel">
83 <div class="accordion accordionModel" id="accordionModel">
84 <div class="card" style="display:none;" >
85 <div class="card-header">
86 <h2 class="accordion-header" id="headingprueba" data-toggle="collapse" data-target="#collapseprueba" aria-expanded="false" aria-controls="collapseprueba">
87 Acordeón invisible
88 </h2>
89 </div>
90 <div id="collapseprueba" class="accordion-collapse collapse" aria-labelledby="headingprueba" data-parent="#accordionModel">
91
92 </div>
93 </div>
94
95 <#if ( acordeon.getSiblings()[0].tituloAcordeonGeneral.getData()?has_content )>
96 <#list acordeon.getSiblings() as cur_acordeon>
97 <div class="card">
98 <div class="card-header">
99 <h2 class="accordion-header collapsed" id="heading${cur_acordeon_index}" data-toggle="collapse" data-target="#collapse${cur_acordeon_index}" aria-expanded="false" aria-controls="collapse${cur_acordeon_index}">
100 <button class="accordion-button" type="button">
101 ${cur_acordeon.tituloAcordeonGeneral.getData()}
102 </button>
103 <img class="iconAccordion" src="${themeImagePath}/sm/icons/general/arrow_drop_down.svg" alt="icono flecha acordeón" title="icono flecha acordeón" style="transform: rotate(0deg);">
104 </h2>
105 </div>
106 <div id="collapse${cur_acordeon_index}" class="accordion-collapse collapse" aria-labelledby="heading${cur_acordeon_index}" data-parent="#accordionModel">
107 <#if cur_acordeon.contenidoGeneral.getData() != "" || cur_acordeon.subacordeon.getSiblings()?has_content>
108 <div class="accordion-bodyLeg mb-0" style="display:block">
109 ${cur_acordeon.contenidoGeneral.getData()}
110 </div>
111 <#if cur_acordeon.subacordeon.getSiblings()?has_content >
112
113 <div class="accordion accordionModel" id="accordionModel${cur_acordeon_index}">
114 <div class="card d-none">
115 <div class="card-header">
116 <h2 class="accordion-header collapsed" id="headingOculto" data-toggle="collapse" data-target="#collapseOculto" aria-expanded="false" aria-controls="collapseOculto">
117 Acordeón invisible</h2>
118 </div>
119 <div id="collapseOculto" class="accordion-collapse collapse" aria-labelledby="headingOculto" data-parent="#accordionModel${cur_acordeon_index}" style="">
120
121 </div>
122 </div>
123 <#list cur_acordeon.subacordeon.getSiblings() as cur_subacordeon>
124 <#if cur_subacordeon.tituloAcordeon.getData()?has_content && cur_subacordeon.tituloAcordeon.getData()!="">
125 <div class="card" style="margin-left: 1rem;">
126 <div class="card-header">
127 <h2 class="accordion-header collapsed" id="heading${cur_acordeon_index}${cur_subacordeon_index}" data-toggle="collapse" data-target="#collapse${cur_acordeon_index}${cur_subacordeon_index}" aria-expanded="false" aria-controls="collapse${cur_acordeon_index}${cur_subacordeon_index}">
128 <button class="accordion-button" type="button" style="font-size: 1rem;">
129 <#if (cur_subacordeon.tituloAcordeon.getData())??>
130 ${cur_subacordeon.tituloAcordeon.getData()}
131 </#if>
132 </button>
133 <img class="iconAccordion" src="${themeImagePath}/sm/icons/general/arrow_drop_down.svg" alt="icono flecha acordeón" title="icono flecha acordeón" style="transform: rotate(0deg);">
134 </h2>
135 </div>
136 <div id="collapse${cur_acordeon_index}${cur_subacordeon_index}" class="accordion-collapse collapse" aria-labelledby="heading${cur_acordeon_index}${cur_subacordeon_index}" data-parent="#accordionModel${cur_acordeon_index}">
137 <div class="accordion-bodyLeg mb-0" style="display:block">
138 <#if (cur_subacordeon.contenidoAcordeon.getData())??>
139 ${cur_subacordeon.contenidoAcordeon.getData()}
140 </#if>
141 </div>
142 </div>
143 </div>
144 </#if>
145 </#list>
146 </div>
147 </#if>
148 </#if>
149 </div>
150 </div>
151 </#list>
152 </#if>
153 </div>
154 </div>
155 </div>
156 </div>
157 </section>
158 <!-- Fin acordeon -->
159
160 <!-- FIN ACCORDMODEL -->
161
162
163 <#if secAvisos.aviso.getSiblings()?has_content && secAvisos.aviso?? && secAvisos.aviso.getData()?has_content>
164 <@secAvisosRelacionados secAvisos />
165 </#if>
166 </div>
167
168 <!-- Section Presentation -->
169 <!-- Bloque de Tramitación -->
170 <#if secTramitacion.getSiblings()?has_content>
171 <div class="col-12 col-lg-4" >
172 <#list secTramitacion.getSiblings() as cur_secTramitacion>
173
174 <#if cur_secTramitacion.gTramitacion.getSiblings()?has_content && (cur_secTramitacion.gTramitacion.tituloTramitacion.getData())?? && (cur_secTramitacion.gTramitacion.tituloTramitacion.getData())?has_content>
175 <section class="sectPresentation" style="margin-bottom:48px;" >
176 <div class="row">
177 <div class="col-12">
178 <div class="divPresentation">
179 <div class="row">
180 <#if (cur_secTramitacion.tituloSecTram.getData())?? && (cur_secTramitacion.tituloSecTram.getData())?has_content>
181 <div class="col-12">
182 <h3 style="font-size: 1.3rem !important;">${cur_secTramitacion.tituloSecTram.getData()}</h3>
183 </div>
184 </#if>
185
186 <div class="col-12">
187 <section class="sectAccordModel m-0">
188 <div class="divAccorModel">
189 <div class="accordion accordionModelAv" id="accordionModelTr${cur_secTramitacion_index}">
190 <div class="card" style="display:none;" >
191 <div class="card-header">
192 <h3 class="accordion-header" id="headingpruebaTr">
193 <button class="accordion-button collapsed" type="button" data-toggle="collapse" data-target="#collapsepruebaTr" aria-expanded="false" aria-controls="collapsepruebaTr">
194 <img class="iconAccordionAv" src="${themeImagePath}/sm/icons/general/arrow_drop_down_round.svg" alt="" title="Abrir acordeón">
195 Acordeón invisible
196 </button>
197 </h3>
198 </div>
199
200 <div id="collapsepruebaTr" class="accordion-collapse collapse" aria-labelledby="headingpruebaTr" data-parent="#accordionModelTr">
201
202 </div>
203 </div>
204
205 <#list cur_secTramitacion.gTramitacion.getSiblings() as cur_subSecTramitacion>
206 <#if (cur_subSecTramitacion.tituloTramitacion.getData())?? && (cur_subSecTramitacion.tituloTramitacion.getData())?has_content && (cur_subSecTramitacion.textoTramitacion.getData())?? && (cur_subSecTramitacion.textoTramitacion.getData())?has_content>
207
208 <div class="card">
209 <div class="card-header">
210 <h3 class="accordion-header" id="heading${cur_secTramitacion?index}${cur_subSecTramitacion_index+1}Tr">
211 <button class="accordion-button collapsed" type="button" data-toggle="collapse" data-target="#collapse${cur_secTramitacion?index}${cur_subSecTramitacion_index+1}Tr" aria-expanded="false" aria-controls="collapse${cur_secTramitacion?index}${cur_subSecTramitacion_index+1}Tr">
212 <img class="iconAccordionAv" src="${themeImagePath}/sm/icons/general/arrow_drop_down_round.svg" alt="icono flecha acordeón" title="icono flecha acordeón">
213 <span class="span-accbtn">${cur_subSecTramitacion.tituloTramitacion.getData()}</span>
214 </button>
215 <div class="divLinkAv">
216 </h3>
217 </div>
218
219 <div id="collapse${cur_secTramitacion?index}${cur_subSecTramitacion_index+1}Tr" class="accordion-collapse collapse" aria-labelledby="heading${cur_secTramitacion?index}${cur_subSecTramitacion_index+1}Tr" data-parent="#accordionModelTr${cur_secTramitacion_index}">
220 <div class="accordion-body">
221 ${cur_subSecTramitacion.textoTramitacion.getData()}
222 </div>
223 </div>
224
225 </div>
226 </#if>
227 </#list>
228 </div>
229 </div>
230 </section>
231 </div>
232 </div>
233 </div>
234 </div>
235 </div>
236 </section>
237 </#if>
238 </#list>
239 </#if>
240 <!-- FIN Bloque de Tramitación -->
241 <!-- FIN PRESENTATION -->
242 <!-- Section ProcedureCol -->
243 <#if (secRecursos.tituloCon.getData())??>
244 <@secRecursosRelacionados secRecursos />
245 </#if>
246
247 <!-- FIN PROCEDURECOL -->
248 </div>
249
250
251 </div>
252</div>
253<!-- FIN Two Column - Detalle y Contactos -->
254<style>
255 .lista-letras {
256 list-style-type: lower-alpha !important;
257 }
258 .span-accbtn, .divPresentation a{
259 color: #0068A8 !important;
260 }
261</style>
262
263<style>
264
265 main .container ul ul {
266 list-style: circle; /* Cambia el estilo de los puntos */
267 padding-left: 20px; /* Ajusta el nivel de indentación */
268}
269
270
271 #contenidoPrin {
272 border-bottom: 1px solid #45A2EB;
273}
274
275 .divAYNNew p, .accordion-bodyLeg, .divAYNNew ul, .divAYNNew ol {
276 text-align: justify;
277 }
278 .lista-letras {
279 list-style-type: lower-alpha !important;
280 }
281table {
282 margin-bottom: 36px;
283 width: 100%;
284 border-collapse: collapse;
285 border: none;
286}
287
288 caption {
289 caption-side: top;
290 margin: 12px 0 4px 0;
291 color: #021A47;
292 font-family: "Gilroy-Medium";
293 font-size: 1.2222rem;
294 line-height: 1.5556rem;
295 text-align: left;
296}
297
298table thead tr th {
299 padding-right: 0.2rem;
300 padding-left: 0.2rem;
301 min-width: 115px;
302 border-top: none;
303 border-bottom: 2px solid #FFB600; /* Borde inferior del encabezado */
304 color: #021A47;
305 font-family: "Gilroy-Bold";
306 font-size: 0.8889rem;
307 line-height: 1.2222rem;
308}
309
310table tbody tr th, table tbody tr td {
311 padding: 1rem;
312 padding-right: 0.2rem;
313 padding-left: 0.2rem;
314 border: none;
315 color: #021A47;
316 font-family: "Gilroy-Regular";
317 font-size: 0.8889rem;
318 line-height: 1.2222rem;
319}
320
321table tbody tr td {
322 border-bottom: 2px solid #BCC3D4;
323}
324
325table tbody tr ul {
326 padding-left: 20px;
327}
328
329table tbody tr ul li {
330 list-style-type: disc;
331}
332
333table tbody tr ul li a {
334 font-family: "Gilroy-Regular";
335 font-size: 0.7778rem;
336 line-height: 1.3333rem;
337}
338
339table tbody tr ul li:has(a) {
340 color: #0070B7;
341}
342
343table a {
344 text-decoration: underline;
345 color: #0070B7;
346}
347</style>
348
349
350
351<script>
352 // Comprobar si la página ya ha sido recargada
353 if (!localStorage.getItem('hasReloaded')) {
354 // Marcar que la página ha sido recargada
355 localStorage.setItem('hasReloaded', 'true');
356
357 // Recargar la página
358 location.reload();
359 } else {
360 // Seleccionar todas las tablas dentro del contenedor con clase "container"
361 const tables = document.querySelectorAll('.container table');
362
363 // Iterar sobre cada tabla y añadir las clases si aún no están presentes
364 tables.forEach(table => {
365 if (!table.classList.contains('table-hover') && !table.classList.contains('table-responsive')) {
366 table.classList.add('table-hover', 'table-responsive');
367 }
368 });
369
370 // Limpiar la clave de localStorage
371 localStorage.removeItem('hasReloaded');
372 }
373
374 // Escuchar el evento de Liferay cuando todos los portlets estén listos
375 Liferay.on('allportletsready', function() {
376 // Seleccionar todas las tablas dentro del contenedor con clase "container"
377 const tables = document.querySelectorAll('.container table');
378
379 // Iterar sobre cada tabla y añadir las clases si aún no están presentes
380 tables.forEach(table => {
381 if (!table.classList.contains('table-hover') && !table.classList.contains('table-responsive')) {
382 table.classList.add('table-hover', 'table-responsive');
383 }
384 });
385 });
386</script>