An error occurred while processing the template.
Java method "com.liferay.portal.kernel.util.DateUtil_IW.parseDate(String, String, Locale)" threw an exception when invoked on com.liferay.portal.kernel.util.DateUtil_IW object "com.liferay.portal.kernel.util.DateUtil_IW@619ebcfc"; see cause exception in the Java stack trace.
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign fechaActualizacion_Data = dat... [in template "20096#20121#49211" at line 38, column 9]
----
1<#-- 16/10/2024
2Detalle modelo con acordeones y subacordeones
3--->
4<#-- Obtener la ruta a las imágenes del tema -->
5<#assign
6 theme_display = themeDisplay
7 themeImagePath = theme_display.getPathThemeImages()
8/>
9
10<#-- Incluir la plantilla de selector de icono-->
11<#include "${templatesPath}/49219">
12
13<#-- Incluir la plantilla que genera la sección de recursos relacionados-->
14<#include "${templatesPath}/49195">
15
16<#-- Incluir la plantilla que genera la alerta -->
17<#include "${templatesPath}/74012524">
18
19<#if avisoEmergente?? && avisoEmergente.getData()??>
20<@generarAvisoEmergente avisoEmergente/>
21</#if>
22
23<div class="container containerPrin">
24 <section class="sectTittel">
25 <div class="row">
26 <div class="col-12">
27 <#if (encabezado.getData())??>
28 <h1 class="cHTittle">${encabezado.getData()}</h1>
29 </#if>
30 <#-- Sección que muestra la fecha de la última actualización del artículo -->
31<p style="font-size: 0.7778rem;color: #495C89;" class="docPub">Fecha de la última modificación:
32 <#assign fecha_Data = getterUtil.getString(fechaActualizacion.getData())>
33 <#if validator.isNotNull(fecha_Data)>
34 <#assign fecha_DateObj = dateUtil.parseDate("yyyy-MM-dd", fecha_Data, locale)>
35 ${dateUtil.getDate(fecha_DateObj, "dd/MM/yyyy", locale)}
36 <#else>
37 <#assign fechaModificacion_Data = .vars["reserved-article-modified-date"].data>
38 <#assign fechaActualizacion_Data = dateUtil.parseDate("EEE, dd MMM yyyy HH:mm:ss Z", fechaModificacion_Data , locale)>
39 ${dateUtil.getDate(fechaActualizacion_Data, "dd/MM/yyyy", locale)}
40 </#if>
41</p>
42 </div>
43 </div>
44 </section>
45 <div class="row">
46 <div class="col-12 col-lg-8 colpadR060" id="sectContPrin">
47 <!-- Section AccordModel -->
48 <section class="sectAccordModel">
49 <#if (secFij.tituloSecFij.getData())?? || (secFij.textoSecFij.getData())??>
50 <div class="row">
51 <div class="col-12">
52 <#if (secFij.tituloSecFij.getData())?? && (secFij.tituloSecFij.getData())?has_content>
53 <h2 class="h2accord">${secFij.tituloSecFij.getData()}</h2>
54 </#if>
55 <#if (secFij.textoSecFij.getData())?? && (secFij.textoSecFij.getData())?has_content>
56 ${secFij.textoSecFij.getData()}
57 </#if>
58 </div>
59 </div>
60 </#if>
61
62 <#if (secPrin.gAcorSecPrin.getSiblings())?? && (secPrin.gAcorSecPrin.getSiblings())?has_content>
63
64 <div class="row">
65 <div class="col-12">
66 <div class="divAccorModel">
67 <div class="accordion accordionModel" id="accordionModel">
68 <div class="card" style="display:none;" >
69 <div class="card-header">
70 <h2 class="accordion-header" id="headingprueba" data-toggle="collapse" data-target="#collapseprueba" aria-expanded="true" aria-controls="collapseprueba">
71 <img class="iconAccordion" src="${themeImagePath}/sm/icons/general/arrow_drop_down.svg" alt="" title="Abrir acordeón">
72 Primer acordeón invisible
73 </h2>
74 </div>
75 <div id="collapseprueba" class="accordion-collapse collapse" aria-labelledby="headingprueba" data-parent="#accordionModel">
76
77 </div>
78 </div>
79 <#list secPrin.gAcorSecPrin.getSiblings() as cur_itemAccord>
80 <#if (cur_itemAccord.tituloAcorSecPrin.getData())?? && (cur_itemAccord.tituloAcorSecPrin.getData())?has_content && (cur_itemAccord.textoAcorSecPrin.getData())?? && (cur_itemAccord.textoAcorSecPrin.getData())?has_content>
81 <div class="card">
82 <div class="card-header">
83 <h2 class="accordion-header" id="heading${cur_itemAccord_index}" data-toggle="collapse" data-target="#collapse${cur_itemAccord_index}" aria-expanded="false" aria-controls="collapse${cur_itemAccord_index}">
84 <button class="accordion-button collapsed" type="button">
85 ${cur_itemAccord.tituloAcorSecPrin.getData()}
86 </button>
87 <img class="iconAccordion" src="${themeImagePath}/sm/icons/general/arrow_drop_down.svg" alt="" title="Abrir acordeón">
88 </h2>
89 </div>
90 <div id="collapse${cur_itemAccord_index}" class="accordion-collapse collapse" aria-labelledby="heading${cur_itemAccord_index}" data-parent="#accordionModel">
91 <div class="accordion-body">
92 ${cur_itemAccord.textoAcorSecPrin.getData()}
93 </div>
94 <#if cur_itemAccord.subacordeon?? && cur_itemAccord.subacordeon.getSiblings()?has_content >
95
96 <div class="accordion accordionModel" id="accordionModel${cur_itemAccord_index}">
97 <div class="card d-none">
98 <div class="card-header">
99 <button id="headingOculto" class="accordion-button collapsed" role="heading" aria-level="3" aria-expanded="false" aria-controls="collapseOculto">
100 <span>Sección Prueba</span>
101 </button>
102 </div>
103 <div id="collapseOculto" class="accordion-collapse collapse" aria-labelledby="headingOculto" data-parent="#accordionModel${cur_itemAccord_index}" style="">
104
105 </div>
106 </div>
107 <#list cur_itemAccord.subacordeon.getSiblings() as cur_subacordeon>
108 <#if cur_subacordeon.tituloSubAcordeon.getData()?? && cur_subacordeon.tituloSubAcordeon.getData()?has_content && (cur_subacordeon.textoSubAcordeon.getData())?? && (cur_subacordeon.textoSubAcordeon.getData())?has_content>
109 <div class="card" style="margin-left: 1rem;">
110 <div class="card-header">
111 <h2 class="accordion-header collapsed" id="heading${cur_itemAccord_index}${cur_subacordeon_index}" data-toggle="collapse" data-target="#collapse${cur_itemAccord_index}${cur_subacordeon_index}" aria-expanded="false" aria-controls="collapse${cur_itemAccord_index}${cur_subacordeon_index}">
112 <button class="accordion-button" type="button" style="font-size: 1rem;">
113 ${cur_subacordeon.tituloSubAcordeon.getData()}
114 </button>
115 <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);">
116 </h2>
117 </div>
118 <div id="collapse${cur_itemAccord_index}${cur_subacordeon_index}" class="accordion-collapse collapse" aria-labelledby="heading${cur_itemAccord_index}${cur_subacordeon_index}" data-parent="#accordionModel${cur_itemAccord_index}">
119 <div class="accordion-bodyLeg mb-0" style="display:block">
120 ${cur_subacordeon.textoSubAcordeon.getData()}
121 </div>
122 </div>
123 </div>
124 </#if>
125
126 </#list>
127
128 </div>
129 </#if>
130 </div>
131 </div>
132 </#if>
133 </#list>
134 </div>
135 </div>
136 </div>
137 </div>
138 </#if>
139 </section>
140
141 <#if secAvisos.aviso.getSiblings()?has_content && secAvisos.aviso?? && secAvisos.aviso.getData()?has_content>
142 <section class="sectAccordModel">
143 <div class="row">
144 <div class="col-12">
145 <h2 class="h2accord">
146 <img class="iconAccord" src="${themeImagePath}/sm/icons/general/avisos.svg" alt="icono campana avisos" title="icono flecha acordeón">
147
148 <#if (secAvisos.tituloAvisos.getData())?? && (secAvisos.tituloAvisos.getData())?has_content>
149 ${secAvisos.tituloAvisos.getData()}
150 <#else>
151 Avisos y novedades
152 </#if>
153 </h2>
154 </div>
155 </div>
156
157 <div class="row">
158 <div class="col-12">
159 <div class="divAccorModel">
160 <div class="accordion accordionModelAv" id="accordionModelAv">
161 <div class="card d-none">
162 <div class="card-header">
163 <h2 class="accordion-header" id="headingOculto" data-toggle="collapse" data-target="#collapseOculto" aria-expanded="true" aria-controls="collapseOculto">Acordeón oculto</h2>
164 </div>
165 <div id="collapseOculto" class="accordion-collapse collapse show" aria-labelledby="headingOculto" data-parent="#accordionModelAv">
166 <div class="accordion-body">
167 </div>
168 </div>
169 </div>
170 <#list secAvisos.aviso.getSiblings() as cur_aviso>
171 <#assign
172 webContentData = jsonFactoryUtil.createJSONObject(cur_aviso.getData())
173 />
174 <#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
175 <#if webContentData?? && webContentData.classPK?has_content>
176 <#assign journalArticle = journalArticleLocalService.fetchLatestArticle(webContentData.classPK?number) />
177 <#if journalArticle?? >
178 <#assign docXml = saxReaderUtil.read(journalArticle.getContentByLocale(themeDisplay.getLocale())) />
179
180 <!-- Título -->
181 <#assign titulo = docXml.valueOf("//dynamic-element[@field-reference='titulo']/dynamic-content/text()") />
182
183 <!-- Fecha -->
184 <#assign fecha = docXml.valueOf("//dynamic-element[@field-reference='fechaNoticia']/dynamic-content") />
185 <#attempt>
186 <#assign fechaFormateada = fecha?date("yyyy-MM-dd")?string("dd/MM/yyyy") />
187 <#recover>
188 <#assign fechaFormateada = fecha />
189 </#attempt>
190
191 <!-- Resumen -->
192 <#assign resumen = docXml.valueOf("//dynamic-element[@field-reference='resumen']/dynamic-content/text()") />
193
194 <#if resumen?length gt 700>
195 <#-- Recortar el texto al límite de 700 caracteres -->
196 <#assign truncatedResumen = resumen?substring(0, 700) />
197
198 <#-- Buscar el último espacio en el texto recortado para no cortar palabras -->
199 <#assign lastSpaceIndex = truncatedResumen?last_index_of(" ") />
200
201 <#-- Texto hasta el último espacio antes de los 700 caracteres, seguido de puntos suspensivos -->
202 <#assign resumen = truncatedResumen?substring(0, lastSpaceIndex) + "..." />
203
204 </#if>
205
206 <!-- Texto principal -->
207 <#if !resumen?? || !resumen?has_content>
208 <#assign resumen = docXml.valueOf("//dynamic-element[@field-reference='texto']/dynamic-content/text()") />
209
210 <#assign resumen = resumen?replace("<strong>", "")?replace("</strong>", "")?replace("<em>", "")?replace("</em>", "")?replace("<u>", "")?replace("</u>", "")?replace("<b>", "")?replace("</b>", "")?replace("<i>", "")?replace("</i>", "")?replace("<span[^>]*>", "")?replace("</span>", "") />
211
212 <#if resumen?length gt 700>
213 <#-- Recortar el texto al límite de 700 caracteres -->
214 <#assign truncatedResumen = resumen?substring(0, 700) />
215
216
217 <#-- Buscar el último espacio en el texto recortado para no cortar palabras -->
218 <#assign lastSpaceIndex = truncatedResumen?last_index_of(" ") />
219
220 <#-- Texto hasta el último espacio antes de los 700 caracteres, seguido de puntos suspensivos -->
221 <#assign resumen = truncatedResumen?substring(0, lastSpaceIndex) + "..." />
222
223 </#if>
224 </#if>
225
226 <#assign viewURL = cur_aviso.getFriendlyUrl() />
227 <#assign id = journalArticle.getArticleId() />
228
229 <#-- Añadir parentPlid (Página de avisos y novedades) como parámetro a viewURL -->
230
231 <#if viewURL?contains("?")>
232 <#assign viewURL = viewURL + "&ida=" + id + "&prnt=936" />
233 <#else>
234 <#assign viewURL = viewURL + "?ida=" + id + "&prnt=936" />
235 </#if>
236
237 <#if resumen?? && resumen?has_content>
238 <div class="card">
239 <div class="card-header">
240 <h3 class="accordion-header" id="heading${cur_aviso_index}Av">
241 <button class="accordion-button collapsed" type="button" data-toggle="collapse" data-target="#collapse${cur_aviso_index}Av" aria-expanded="false" aria-controls="collapse${cur_aviso_index}Av">
242 <img class="iconAccordionAv" src="${themeImagePath}/sm/icons/general/arrow_drop_down_round.svg" alt="icono flecha acordeón" title="icono flecha acordeón">
243 </button>
244 <div class="divLinkAv">
245 <a href=${viewURL} class="aLinkAv">${titulo}</a>
246 <p class="card-text">${fechaFormateada}</p>
247 </div>
248 </h3>
249 </div>
250 <div id="collapse${cur_aviso_index}Av" class="accordion-collapse collapse" aria-labelledby="heading${cur_aviso_index}Av" data-parent="#accordionModelAv">
251 <div class="accordion-body">
252 <div class="p-amAV">${resumen}</div>
253 </div>
254 </div>
255 </div>
256 <#else>
257 <div class="card">
258 <div class="card-header">
259 <h3 class="accordion-header" id="heading${cur_aviso_index}Av">
260 <div class="divLinkAv">
261 <a href=${viewURL} class="aLinkAv">${titulo}</a>
262 <p class="card-text">${fechaFormateada}</p>
263 </div>
264 </h3>
265 </div>
266 </div>
267
268 </#if>
269 </#if>
270 </#if>
271 </#list>
272 </div>
273 </div>
274 </div>
275 </div>
276 </section>
277 </#if>
278
279 </div>
280 <div class="col-12 col-lg-4">
281 <!-- Section Presentation -->
282 <#if secTramitacion.gTramitacion.getSiblings()?has_content && (secTramitacion.gTramitacion.tituloTramitacion.getData())?? && (secTramitacion.gTramitacion.tituloTramitacion.getData())?has_content>
283
284 <section class="sectPresentation">
285 <div class="row">
286 <div class="col-12">
287 <div class="divPresentation">
288 <div class="row">
289 <div class="col-12">
290 <h3 class="cH3">${(secTramitacion.gTramitacion.tituloSecTram.getData())!"Tramitación"}</h3>
291 </div>
292 <div class="col-12">
293 <section class="sectAccordModel m-0">
294 <div class="divAccorModel">
295 <div class="accordion accordionModelAv" id="accordionModelTr">
296 <div class="card" style="display:none;" >
297 <div class="card-header">
298
299 <button id="headingpruebaTr" class="accordion-button collapsed" role="heading" aria-level="3" aria-expanded="false" aria-controls="collapsepruebaTr">
300 <span>Sección Prueba</span>
301 </button>
302
303 </div>
304
305 <div id="collapsepruebaTr" class="accordion-collapse collapse" aria-labelledby="headingpruebaTr" data-parent="#accordionModelTr">
306 <div class="accordion-body">
307
308 </div>
309 </div>
310 </div>
311 <#list secTramitacion.gTramitacion.getSiblings() as cur_secTramitacion>
312 <#if (cur_secTramitacion.tituloTramitacion.getData())?? && (cur_secTramitacion.tituloTramitacion.getData())?has_content && (cur_secTramitacion.textoTramitacion.getData())?? && (cur_secTramitacion.textoTramitacion.getData())?has_content>
313
314 <div class="card">
315 <div class="card-header">
316
317 <h3 class="accordion-header" id="heading${cur_secTramitacion_index+1}Tr" data-toggle="collapse" data-target="#collapse${cur_secTramitacion_index+1}Tr" aria-expanded="true" aria-controls="collapse${cur_secTramitacion_index+1}Tr">
318 <button class="accordion-button collapsed" type="button" data-toggle="collapse" data-target="#collapse${cur_secTramitacion_index+1}Tr" aria-expanded="false" aria-controls="collapse${cur_secTramitacion_index+1}Tr">
319 <img class="iconAccordionAv" src="${themeImagePath}/sm/icons/general/arrow_drop_down_round.svg" alt="icono flecha acordeón" title="icono flecha acordeón">
320 <span class="span-accbtn">${cur_secTramitacion.tituloTramitacion.getData()}</span>
321 </button>
322
323 </h3>
324 </div>
325 <div id="collapse${cur_secTramitacion_index+1}Tr" class="accordion-collapse collapse" aria-labelledby="heading${cur_secTramitacion_index+1}Tr" data-parent="#accordionModelTr">
326 <div class="accordion-body">
327 ${cur_secTramitacion.textoTramitacion.getData()}
328 </div>
329 </div>
330
331 </div>
332 </#if>
333 </#list>
334 </div>
335 </div>
336 </section>
337 </div>
338 </div>
339 </div>
340 </div>
341 </div>
342 </section>
343 </#if>
344 <!-- FIN PRESENTATION -->
345 <!-- Section ProcedureCol -->
346 <#if (secRecursos.tituloCon.getData())??>
347 <@secRecursosRelacionados secRecursos />
348 </#if>
349
350 <!-- FIN PROCEDURECOL -->
351 </div>
352 </div>
353</div>
354
355<style>
356u {
357text-decoration: underline;
358}
359
360table {
361 margin-bottom: 36px;
362 width: 100%;
363 border-collapse: collapse;
364 border: none;
365}
366
367 caption {
368 caption-side: top;
369 margin: 12px 0 4px 0;
370 color: #021A47;
371 font-family: "Gilroy-Medium";
372 font-size: 1.2222rem;
373 line-height: 1.5556rem;
374 text-align: left;
375}
376
377table thead tr th {
378 padding-right: 0.2rem;
379 padding-left: 0.2rem;
380 min-width: 115px;
381 border-top: none;
382 border-bottom: 2px solid #FFB600; /* Borde inferior del encabezado */
383 color: #021A47;
384 font-family: "Gilroy-Bold";
385 font-size: 0.8889rem;
386 line-height: 1.2222rem;
387}
388
389table tbody tr th, table tbody tr td {
390 padding: 0.2rem;
391 border: none;
392 color: #021A47;
393 font-family: "Gilroy-Regular";
394 font-size: 0.8889rem;
395 line-height: 1.2222rem;
396}
397
398table tbody tr td {
399 border-bottom: 2px solid #BCC3D4;
400}
401
402table tbody tr ul {
403 padding-left: 20px;
404}
405
406table tbody tr ul li {
407 list-style-type: disc;
408}
409
410table tbody tr ul li a {
411 font-family: "Gilroy-Regular";
412 font-size: 0.7778rem;
413 line-height: 1.3333rem;
414}
415
416table tbody tr ul li:has(a) {
417 color: #0070B7;
418}
419
420table a {
421 text-decoration: underline;
422 color: #0070B7;
423}
424
425 tbody tr:hover {
426 background-color: #D0DCE4;
427}
428
429</style>