Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> estandarCompetencia.Competencia_profesional [in template "20155#20195#21808572" at line 268, column 97]
----
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 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: ${estandarCompetencia.Competencia_pro... [in template "20155#20195#21808572" at line 268, column 95]
----
1<#assign liferay_ui = PortletJspTagLibs["/META-INF/liferay-ui.tld"] />
2
3
4<#assign configuracion>
5[
6 {
7 id:"ECP",
8 nombre:"ECP",
9 relacionados:"EC,TFP,CP,CE,RN_P,RN_A,RN_S,EQ_UC,Ocupacion",
10 idIntercambio:"550",
11 clasificacion:"Familia_Profesional,Nivel,Vigencia,Estado,Situación_ECP",
12 estructura:"true"
13 },
14 {
15 id:"EC",
16 nombre:"EC",
17 relacionados:"",
18 idIntercambio:"551",
19 clasificacion:"",
20 estructura:"true"
21 },
22 {
23 id:"TFP",
24 nombre:"TFP",
25 relacionados:"",
26 idIntercambio:"506",
27 clasificacion:"",
28 estructura:"true"
29 },
30 {
31 id:"CP",
32 nombre:"CP",
33 relacionados:"",
34 idIntercambio:"507",
35 clasificacion:"",
36 estructura:"true"
37 },
38 {
39 id:"CE",
40 nombre:"CE",
41 relacionados:"",
42 idIntercambio:"527",
43 clasificacion:"",
44 estructura:"true"
45 },
46 {
47 id:"RN_P",
48 nombre:"RN_P",
49 relacionados:"",
50 idIntercambio:"510",
51 clasificacion:"",
52 estructura:"true"
53 },
54 {
55 id:"RN_A",
56 nombre:"RN_A",
57 relacionados:"",
58 idIntercambio:"511",
59 clasificacion:"",
60 estructura:"true"
61 },
62 {
63 id:"RN_S",
64 nombre:"RN_S",
65 relacionados:"",
66 idIntercambio:"513",
67 clasificacion:"",
68 estructura:"true"
69 },
70 {
71 id:"EQ_UC",
72 nombre:"EQ_UC",
73 relacionados:"",
74 idIntercambio:"514",
75 clasificacion:"",
76 estructura:"true"
77 },
78 {
79 id:"Ocupacion",
80 nombre:"Ocupacion",
81 relacionados:"SISPE,CNO",
82 idIntercambio:"552",
83 clasificacion:"",
84 estructura:"true"
85 },
86 {
87 id:"CNO",
88 nombre:"CNO",
89 relacionados:"",
90 idIntercambio:"505",
91 clasificacion:"",
92 estructura:"true"
93 },
94 {
95 id:"SISPE",
96 nombre:"SISPE",
97 relacionados:"",
98 idIntercambio:"504",
99 clasificacion:"",
100 estructura:"true"
101 },
102 {
103 id:"Familia_Profesional",
104 nombre:"Familia_Profesional",
105 idIntercambio:"350",
106 modo:""
107 },
108 {
109 id:"Nivel",
110 nombre:"Nivel",
111 idIntercambio:"351",
112 modo: ""
113 },
114 {
115 id:"Vigencia",
116 nombre:"Vigencia",
117 idIntercambio:"355",
118 modo: ""
119 },
120 {
121 id:"Estado",
122 nombre:"Estado",
123 idIntercambio:"430",
124 modo:""
125 },
126 {
127 id:"Situacion_ECP",
128 nombre:"Situacion_ECP",
129 idIntercambio:"361",
130 modo:""
131 }
132]
133</#assign>
134
135
136<#assign incualAssetService = serviceLocator.findService("es.gob.educacion.incual.service.IncualAssetLocalService")/>
137<#assign intercambioService = serviceLocator.findService("es.gob.educacion.incual.service.IntercambioLocalService")/>
138<#assign assetEntryService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")/>
139<#assign assetCategoryService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")/>
140<#assign assetCategoryRelService = serviceLocator.findService("com.liferay.asset.entry.rel.service.AssetEntryAssetCategoryRelLocalService")/>
141<#assign journalArticleService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")/>
142<#assign dlFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService")/>
143
144<#assign portlet_id = themeDisplay.getPortletDisplay().getId()>
145<#assign portletObjetivoId = renderRequest.preferences.getValue('idPortletObjetivo','') />
146
147<#assign sinContenidosHTML = "<p class=\"INC_sinContenido\">Sin contenidos relacionados</p>" />
148
149<#list entries as entry>
150
151 <#assign entry = entry />
152 <#assign assetRenderer = entry.getAssetRenderer() />
153 <#assign entryTitle = htmlUtil.escape(assetRenderer.getTitle(locale)) />
154 <#assign viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, entry) />
155 <#assign estandarCompetencia = incualAssetService.obtenerValoresAssetTotal(entry, themeDisplay, configuracion) />
156
157 <div class="asset-abstract d-flex justify-content-between">
158 <div class="INC_DetalleTitulo">
159 <@getBackIcon/><h1>Estándar profesional</h1>
160 </div>
161 <div class="lfr-meta-actions asset-actions mb-3 p-0">
162 <@getPrintIcon />
163 <@getFlagsIcon />
164 <#attempt>
165 <@getEditIcon />
166 <#recover>
167 Link de edición no disponible
168 </#attempt>
169 </div>
170 </div>
171 <div class="asset-content">
172 <div class="INC_fila">
173 <div class="INC_columna60">
174 <div class="asset-summary">
175 <div class="Identificacion">
176 <b>Código: </b>${estandarCompetencia.Codigo.data}<br>
177 <b>Nombre: </b>${estandarCompetencia.Nombre.data}<br>
178 </div>
179 <div class="clasificacion">
180 <#if (estandarCompetencia.clasificaciones.Familia_Profesional) ?? && (estandarCompetencia.clasificaciones.Familia_Profesional?size > 0)>
181 <div>
182 <span class="asset-vocabulary-title d-block">Familia Profesional:</span>
183 <#assign vocId = intercambioService.obtenerIntercambio(350)/>
184 <#assign categoriasRel = assetCategoryRelService.getAssetEntryAssetCategoryRelsByAssetEntryId(entry.getEntryId())/>
185 <#list categoriasRel as rel>
186 <#assign categoria = assetCategoryService.getAssetCategory(rel.getAssetCategoryId())/>
187 <#if categoria.getVocabularyId() == vocId.idDevuelto>
188 <#list categoria.getAncestors() as catPadre>
189 ${catPadre.getTitle(locale)} »
190 </#list>
191 ${categoria.getTitle(locale)}
192 </#if>
193 </#list>
194 </div>
195 </#if>
196
197 <#if (estandarCompetencia.clasificaciones.Nivel) ?? && (estandarCompetencia.clasificaciones.Nivel?size > 0)>
198 <div>
199 <span class="asset-vocabulary-title">Nivel:</span> ${estandarCompetencia.clasificaciones.Nivel[0]}
200 </div>
201 </#if>
202 <#if (estandarCompetencia.clasificaciones.Vigencia) ?? && (estandarCompetencia.clasificaciones.Vigencia?size > 0)>
203 <div>
204 <span class="asset-vocabulary-title">Vigencia:</span> ${estandarCompetencia.clasificaciones.Vigencia[0]}
205 </div>
206 </#if>
207 <#if (estandarCompetencia.clasificaciones.Estado) ?? && (estandarCompetencia.clasificaciones.Estado?size > 0)>
208 <div>
209 <span class="asset-vocabulary-title">Estado:</span> ${estandarCompetencia.clasificaciones.Estado[0]}
210 </div>
211 </#if>
212 </div>
213 <div class="INC_referenciasNormativas">
214
215 <#assign rnp = 0 rna = 0 rns = 0 equc = 0/>
216
217 <#if estandarCompetencia.RN_P ??>
218 <#assign rnp = estandarCompetencia.RN_P?size />
219 </#if>
220 <#if estandarCompetencia.RN_A ??>
221 <#assign rna = estandarCompetencia.RN_A?size />
222 </#if>
223 <#if estandarCompetencia.RN_S ??>
224 <#assign rns = estandarCompetencia.RN_S?size />
225 </#if>
226 <#if estandarCompetencia.EQ_UC ??>
227 <#assign equc = estandarCompetencia.EQ_UC?size />
228 </#if>
229
230 <#if rnp + rna + rns + equc gt 0>
231 <div class="Referencias_Normativas_Titulo"><p class="INC_N1">Referencias normativas</p></div>
232 <#if rnp gt 0>
233 <span class="INC_referenciasNormativas_Subtitulo">Publicación: </span>
234 <div class="INC_referenciasNormativas_Publicacion mb-3">
235 <#list estandarCompetencia.RN_P as ref>
236 <a href="${ref.Enlace.data}" target="_blank" title="Ir a la web del BOE. Abre en ventana nueva." class="INC_enlaceExterno">${ref.Texto.data}</a>
237 </#list>
238 </div>
239 </#if>
240 <#if rna gt 0>
241 <span class="INC_referenciasNormativas_Subtitulo">Normativa: </span>
242 <div class="INC_INC_referenciasNormativas_Actualizacion mb-3">
243 <#list estandarCompetencia.RN_A as ref>
244 <a href="${ref.Enlace.data}" target="_blank" title="Ir a la web del BOE. Abre en ventana nueva." class="INC_enlaceExterno">${ref.Texto.data}</a>
245 </#list>
246 </div>
247 </#if>
248 <#if rns gt 0>
249 <span class="INC_referenciasNormativas_Subtitulo">SUPRIMIDA: </span>
250 <div class="INC_referenciasNormativas_Publicacion mb-3">
251 <#list estandarCompetencia.RN_S as ref>
252 <a href="${ref.Enlace.data}" target="_blank" title="Ir a la web del BOE. Abre en ventana nueva." class="INC_enlaceExterno">${ref.Texto.data}</a>
253 </#list>
254 </div>
255 </#if>
256 <#if equc gt 0>
257 <span class="INC_referenciasNormativas_Subtitulo">Equivalencias UCs: </span>
258 <div class="INC_referenciasNormativas_Publicacion mb-3">
259 <#list estandarCompetencia.EQ_UC_A as ref>
260 <a href="${ref.Enlace.data}" target="_blank" title="Ir a la web del BOE. Abre en ventana nueva." class="INC_enlaceExterno">${ref.Texto.data}</a>
261 </#list>
262 </div>
263 </#if>
264 </#if>
265 </div>
266 <div class="">
267 <div class=""><p class="INC_N2">Competencia profesional:</p></div>
268 <pre class="INC_formatoTexto">${estandarCompetencia.Competencia_profesional.data!""}</pre>
269 </div>
270 </div>
271 </div>
272 <div class="acordeon" id="inc-acord-resul">
273 <div class="card">
274 <div class="card-header" id="inc-acord-resul-01">
275 <a aria-controls="collsec-inc-acord-resul-01" class="INC_N1" aria-expanded="false" data-toggle="collapse" href="#collsec-inc-acord-resul-01" role="button">
276 Elementos de competencia
277 </a>
278 </div>
279 </div>
280 <div id="collsec-inc-acord-resul-01" class="collapse" aria-labelledby="inc-acord-resul-01" data-parent="#inc-acord-resul" role="region">
281 <div class="card-body INC_N1">
282 <#if estandarCompetencia.EC ??>
283 <#list estandarCompetencia.EC?map(c -> { "orden": c.Orden.data?number, "valor": c })?sort_by("orden")?map(c -> c.valor) as ec>
284 <p class="INC_N1 mt-0">EC${ec.Orden.data} ${ec.Contenido.data}</p>
285 <ul class="INC_list-circle">
286 <#list ec.CRFieldSet.siblings as ic>
287 <li><pre class="INC_formatoTexto">IC${ec.Orden.data}.${ic.CRFieldSetFieldSet.Numero.data}: ${ic.CRFieldSetFieldSet.Texto.data}</pre></li>
288 </#list>
289 </ul>
290 </#list>
291 </#if>
292 </div>
293 </div>
294 </div>
295
296 <div class="Contexto_profesional">
297 <div class="Contexto_profesional_Titulo"><p class="INC_N1">Contexto profesional:</p></div>
298 <div class="Medios_de_produccion"><p class="INC_N2">Ámbito Profesional:</p>
299 <pre class="INC_formatoTexto">${estandarCompetencia.Ambito_profesional.data!""}</pre>
300 </div>
301 <div class="Productos_y_resultados"><p class="INC_N2">Sectores productivos:</p>
302 <pre class="INC_formatoTexto">${estandarCompetencia.Sectores_productivos.data!""}</pre>
303 </div>
304 <div class="Informacion_utilizada"><p class="INC_N2">Información utilizada o generada:</p>
305 <pre class="INC_formatoTexto">${estandarCompetencia.Informacion_utilizada.data!""}</pre>
306 </div>
307 </div>
308 </div>
309 <div class="Ocupaciones"><p class="INC_N2">Ocupaciones y puestos de trabajo relevantes:</p>
310 <ul>
311 <#assign ocupaciones = []>
312 <#if estandarCompetencia.Ocupacion ?? && estandarCompetencia.Ocupacion?has_content>
313 <#list estandarCompetencia.Ocupacion?sort_by(['Nombre', 'data']) as ocupacion>
314 <#if !ocupaciones?seq_contains(ocupacion.Nombre.data)>
315 <#assign ocupaciones = ocupaciones + [ ocupacion.Nombre.data ]/>
316 </#if>
317 </#list>
318 </#if>
319 <#list ocupaciones as ocupacion>
320 <li>${ocupacion}</li>
321 </#list>
322 </ul>
323 </div>
324 </div>
325 </div>
326</#list>
327
328<#macro getBackIcon>
329 <#assign redirectURL = paramUtil.getString(portalUtil.getOriginalServletRequest(request), renderResponse.getNamespace() + "redirect") />
330 <#if redirectURL?has_content >
331 <a class="icon-circle-arrow-left previous-level" href="${redirectURL}" title="Atrás">
332 <span class="helper-hidden-accessible"> </span>
333 </a>
334 </#if>
335</#macro>
336
337<#macro getNewIcon classTypeId = "" messageIcon = "" titleWindow = "">
338 <#assign className= "com.liferay.journal.model.JournalArticle"/>
339 <#assign classNameId= 20109/>
340 <#assign globalGroupId= 20195 />
341 <#assign refererPlid = themeDisplay.plid/>
342 <#assign newAssetURL= incualAssetService.obtenerAnadirAssetURL(renderRequest, renderResponse, globalGroupId, className, classTypeId)!/>
343
344 <#if newAssetURL?? && newAssetURL?has_content>
345 ${newAssetURL.setWindowState("pop_up")}
346 <assign addPortletURLString= httpUtil.addParameter(addPortletURLString, "p_p_state", "pop_up")/>
347 <assign addPortletURLString= httpUtil.addParameter(newAssetURL.toString(), "refererPlid", refererPlid)/>
348 <assign addPortletURLString= httpUtil.addParameter(addPortletURLString, "showHeader", "false")/>
349 <assign addPortletURLString= httpUtil.addParameter(addPortletURLString, "groupId", themeDisplay.siteGroupId)/>
350 <assign addPortletURLString= httpUtil.addParameter(addPortletURLString, "doAsGroupId", globalGroupId)/>
351 </#if>
352
353 <#if newAssetURL?? && newAssetURL?has_content>
354 <#assign addPortletURLString= newAssetURL + "&showHeader=false"/>
355 <#assign portletId = portalUtil.getPortletId(renderRequest)/>
356 <#assign dialogParams = "
357 {
358 modal: true,
359 destroyOnHide:true,
360 after: {
361 destroy:
362 function (event) {
363 Liferay.Portlet.refresh('#p_p_id_${portletId}_',{'_${portletId}_assetEntryId':${entry.entryId}},true);
364 }
365 }
366 }
367 "/>
368
369 <@liferay_ui["icon"]
370 src="${themeDisplay.getPathThemeRoot()}/images/ico_new.png"
371 message= messageIcon
372 url="javascript:Liferay.Util.openWindow({dialog: ${dialogParams?trim}, id: '" + renderResponse.getNamespace() + "editAsset', title: '" + titleWindow + "', uri: '" + htmlUtil.escapeJS(addPortletURLString) + "'});"
373 />
374 </#if>
375</#macro>
376
377
378<#macro getPrintIcon>
379 <#if renderRequest.getPreferences().getValue("enablePrint", "false") == "true">
380 <#assign printURL = renderResponse.createRenderURL() />
381
382 ${printURL.setParameter("mvcPath", "/view_content.jsp")}
383 ${printURL.setParameter("assetEntryId", entry.getEntryId()?string)}
384 ${printURL.setParameter("viewMode", "print")}
385 ${printURL.setParameter("type", entry.getAssetRendererFactory().getType())}
386 ${printURL.setWindowState("pop_up")}
387
388
389 <@liferay_ui["icon"]
390 iconCssClass="icon-print"
391 message="print"
392 url="javascript:Liferay.Util.openWindow({dialog: {modal: true, destroyOnHide:true}, id:'" + renderResponse.getNamespace() + "printAsset', title: '" + languageUtil.format(locale, "print-x-x", ["hide-accessible", entryTitle], false) + "', uri: '" + htmlUtil.escapeURL(printURL.toString()) + "'});"
393 />
394 </#if>
395</#macro>
396
397<#macro getFlagsIcon>
398 <#if renderRequest.getPreferences().getValue("enableFlags", "false") == "true">
399 <@liferay_ui["flags"]
400 className=entry.getClassName()
401 classPK=entry.getClassPK()
402 contentTitle=entry.getTitle(locale)
403 label=false
404 reportedUserId=entry.getUserId()
405 />
406 </#if>
407</#macro>
408
409<#macro getEditIcon>
410 <#if assetRenderer.hasEditPermission(themeDisplay.getPermissionChecker())>
411 <#assign redirectURL = renderResponse.createRenderURL() />
412
413 ${redirectURL.setParameter("struts_action", "/asset_publisher/add_asset_redirect")}
414 ${redirectURL.setWindowState("pop_up")}
415
416 <#assign editPortletURL = assetRenderer.getURLEdit(renderRequest, renderResponse, windowStateFactory.getWindowState("pop_up"), redirectURL) />
417 <#if validator.isNotNull(editPortletURL)>
418 <#assign title = languageUtil.format(locale, "edit-x", entryTitle) />
419 <#assign portletId = portalUtil.getPortletId(renderRequest)/>
420 <#assign redirectURL = paramUtil.getString(portalUtil.getOriginalServletRequest(request), renderResponse.getNamespace() + "redirect") />
421 <#assign dialogParams = "
422 {
423 modal: true,
424 destroyOnHide:true,
425 after: {
426 destroy:
427 function (event) {
428 Liferay.Portlet.refresh('#p_p_id_${portletId}_',{'_${portletId}_assetEntryId':${entry.entryId},_${portletId}_redirect:'${redirectURL}'}, true);
429 }
430 }
431 }
432 "/>
433 <@liferay_ui["icon"]
434 image="edit"
435 message=title
436 url="javascript:Liferay.Util.openWindow({dialog: ${dialogParams}, id:'" + renderResponse.getNamespace() + "editAsset', title: '" + title + "', uri:'" + htmlUtil.escapeURL(editPortletURL.toString()) + "'});"
437 />
438 </#if>
439 </#if>
440</#macro>
441<#macro getNombreFase idFase>
442 <#if idFase = "0">
443 0. Informe de Viabilidad
444 <#elseif idFase = "1">
445 1. Elaboración
446 <#elseif idFase = "2">
447 2. Contraste interno
448 <#elseif idFase = "3">
449 3. Contraste externo
450 <#elseif idFase = "4">
451 4. CGFP
452 <#elseif idFase = "4.1">
453 4.1, Ficha tramitación normativa
454 <#elseif idFase = "5">
455 5. Tramitación BOE
456 <#elseif idFase = "5.1">
457 5.1. Envío Consejo Escolar
458 <#elseif idFase = "5.2">
459 5.2. Dictamen CEE
460 <#elseif idFase = "5.3">
461 5.3. Dictamen Consejo Estado
462 <#elseif idFase = "5.4">
463 5.4. Envío para informe
464 <#elseif idFase = "5.4.1">
465 5.4.1. MINHAP
466 <#elseif idFase = "5.4.2">
467 5.4.2. MECD
468 <#elseif idFase = "5.4.3">
469 5.4.3. MEYSS
470 <#elseif idFase = "5.4.4">
471 5.4.4. Otros Ministerios
472 <#elseif idFase = "5.5">
473 5.5. Firma de Ministros
474 <#elseif idFase = "5.6">
475 5.6. Envío Comisión Subsecretarios
476 <#elseif idFase = "6">
477 6. BOE
478 <#elseif idFase = "10">
479 - Informe DEROGACIÓN Q
480 <#elseif idFase = "11">
481 - Informe RETIRADA Q
482 <#elseif idFase = "12">
483 - Informe BLOQUEADA Q
484 <#elseif idFase = "13">
485 - Informe PARADA Q
486 <#else>
487 DESCONOCIDO
488 </#if>
489</#macro>
490
491
492 <#function getEnlaceDescarga uuid groupId>
493 <#local dlFileEntry = dlFileEntryLocalService.getDLFileEntryByUuidAndGroupId(uuid, groupId) />
494 <#local assetEntry = assetEntryService.getEntry("com.liferay.document.library.kernel.model.DLFileEntry", dlFileEntry.fileEntryId) />
495 <#local assetRenderer = assetEntry.assetRenderer />
496 <#return assetRenderer.getURLDownload(themeDisplay)>
497</#function>