{"id":14102,"date":"2023-01-19T09:41:53","date_gmt":"2023-01-19T15:41:53","guid":{"rendered":"http:\/\/201.237.206.56\/Sitios\/ugit.siua.ac.cr\/?p=14102"},"modified":"2023-01-26T14:12:03","modified_gmt":"2023-01-26T20:12:03","slug":"selectmanymenu-x-especificacion","status":"publish","type":"post","link":"https:\/\/sada.services\/?p=14102","title":{"rendered":"SelectManyMenu x especificaci\u00f3n"},"content":{"rendered":"\n<ul class=\"wp-block-list\">\n<li>Vamos a crear un SelectManyMenu por espec\u00edficaci\u00f3n<\/li>\n\n\n\n<li>Lo primero que vamos hacer es crear el archivo de specs <\/li>\n\n\n\n<li>Este esta ubicado Proyecto-&gt;Service-&gt;specs <\/li>\n\n\n\n<li>Creamos la carpeta<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img fetchpriority=\"high\" decoding=\"async\" width=\"339\" height=\"299\" src=\"\/wp-content\/uploads\/2023\/01\/Seleccion_095.png\" alt=\"\" class=\"wp-image-14103\" srcset=\"https:\/\/sada.services\/wp-content\/uploads\/2023\/01\/Seleccion_095.png 339w, https:\/\/sada.services\/wp-content\/uploads\/2023\/01\/Seleccion_095-300x265.png 300w\" sizes=\"(max-width: 339px) 100vw, 339px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ahora creamos el archivo Specs<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">ActividadMejoraSpecs.java<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Contenido<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/*\n * Copyright (c) 2022.\n *\n * Centro de Gestion Informatica\n * Direccion de Tecnologias de la Informacion y Comunicacion\n * Universidad Nacional - Costa Rica\n * http:\/\/www.una.ac.cr\n *\n *\/\n\n\/**********************************************************************\/\n\/**********************************************************************\/\n\/*********************       PACKAGE     ******************************\/\n\/**********************************************************************\/\n\/**********************************************************************\/\npackage cr.ac.una.cgi.sigesa.ppi.mcg.specs;\n\n\n\/**********************************************************************\/\n\/**********************************************************************\/\n\/*********************       IMPORT'S    ******************************\/\n\/**********************************************************************\/\n\/**********************************************************************\/\n\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\n\/*+++++++++++++            BD               ++++++++++++++++++++++++++*\/\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\nimport javax.persistence.criteria.CriteriaBuilder;\nimport javax.persistence.criteria.CriteriaQuery;\nimport javax.persistence.criteria.Expression;\nimport javax.persistence.criteria.Predicate;\nimport javax.persistence.criteria.Root;\n\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\n\/*+++++++++++++       Specification         ++++++++++++++++++++++++++*\/\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\nimport org.springframework.data.jpa.domain.Specification;\n\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\n\/*++++++++++++            DOMAIN                  ++++++++++++++++++++*\/\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\nimport cr.ac.una.cgi.sigesa.ppi.mcg.domain.ActividadMejora;\n\n\n\/**********************************************************************\/\n\/**********************************************************************\/\n\/*********************  DOCUMENTACI\u00d3N    ******************************\/\n\/**********************************************************************\/\n\/**********************************************************************\/\n\/**\n * Especificaci\u00f3n para la administraci\u00f3n de la entidad {@link ActividadMejora}\n *\n * @author Gustavo Matamoros Gonz\u00e1lez\n * @fecha 19\/01\/2023\n *\/\n\n\/**********************************************************************\/\n\/**********************************************************************\/\n\/****************    DEFINICI\u00d3N DE CLASE  *****************************\/\n\/**********************************************************************\/\n\/**********************************************************************\/\npublic class ActividadMejoraSpecs {\n\n}\n\/**********************************************************************\/\n\/**********************************************************************\/\n\/***************      FIN DEFINICI\u00d3N DE CLASE   ***********************\/\n\/**********************************************************************\/\n\/**********************************************************************\/<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ahora lo primero que vamos hacer es crear una especificaci\u00f3n que solo traiga los activos<\/li>\n\n\n\n<li>Para esto creamos una especificaci\u00f3n que indique que los activos, agregamos<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    \/****************          SPECIFICATION: activoEquals                   *************************\/\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n\n    public static Specification&lt;ActividadMejora&gt; activoEquals(final Boolean activo) {\n        return new Specification&lt;ActividadMejora&gt;() {\n            @Override\n            public Predicate toPredicate(Root&lt;ActividadMejora&gt; root, CriteriaQuery&lt;?&gt; cq, CriteriaBuilder cb) {\n                Expression x = root.get(\"activo\");\n                Expression y = cb.literal(activo);\n                return cb.equal(x, y);\n            }\n        };\n    }\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ahora creamos otra espec\u00edficaci\u00f3n que traiga los que el a\u00f1o del periodo anual del plan Operativo este entre los a\u00f1os de la fecha de inicio y fecha fin de la Actividad de Mejora<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    \/****************          SPECIFICATION: periodoAnualEntre              *************************\/\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    public static Specification&lt;ActividadMejora&gt; periodoAnualEntre(final Integer anno) {\n\n\n        return new Specification&lt;ActividadMejora&gt;() {\n            @Override\n            public Predicate toPredicate(Root&lt;ActividadMejora&gt; root, CriteriaQuery&lt;?&gt; cq,\n                    CriteriaBuilder cb) {\n                \/\/ build query here\n                Expression x = root.join(\"periodoAnualInicial\").get(\"ano\");\n                Expression y = root.join(\"periodoAnualFinal\").get(\"ano\");\n                Expression z = cb.literal(anno);\n                return cb.between(z,x,y);\n            }\n        };\n    }\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>RESULTADO<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/*\n * Copyright (c) 2022.\n *\n * Centro de Gestion Informatica\n * Direccion de Tecnologias de la Informacion y Comunicacion\n * Universidad Nacional - Costa Rica\n * http:\/\/www.una.ac.cr\n *\n *\/\n\n\/**********************************************************************\/\n\/**********************************************************************\/\n\/*********************       PACKAGE     ******************************\/\n\/**********************************************************************\/\n\/**********************************************************************\/\npackage cr.ac.una.cgi.sigesa.ppi.mcg.specs;\n\n\n\/**********************************************************************\/\n\/**********************************************************************\/\n\/*********************       IMPORT'S    ******************************\/\n\/**********************************************************************\/\n\/**********************************************************************\/\n\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\n\/*+++++++++++++            BD               ++++++++++++++++++++++++++*\/\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\nimport javax.persistence.criteria.CriteriaBuilder;\nimport javax.persistence.criteria.CriteriaQuery;\nimport javax.persistence.criteria.Expression;\nimport javax.persistence.criteria.Predicate;\nimport javax.persistence.criteria.Root;\n\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\n\/*+++++++++++++       Specification         ++++++++++++++++++++++++++*\/\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\nimport org.springframework.data.jpa.domain.Specification;\n\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\n\/*++++++++++++            DOMAIN                  ++++++++++++++++++++*\/\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\nimport cr.ac.una.cgi.sigesa.ppi.mcg.domain.ActividadMejora;\n\n\n\/**********************************************************************\/\n\/**********************************************************************\/\n\/*********************  DOCUMENTACI\u00d3N    ******************************\/\n\/**********************************************************************\/\n\/**********************************************************************\/\n\/**\n * Especificaci\u00f3n para la administraci\u00f3n de la entidad {@link ActividadMejora}\n *\n * @author Gustavo Matamoros Gonz\u00e1lez\n * @fecha 19\/01\/2023\n *\/\n\n\/**********************************************************************\/\n\/**********************************************************************\/\n\/****************    DEFINICI\u00d3N DE CLASE  *****************************\/\n\/**********************************************************************\/\n\/**********************************************************************\/\npublic class ActividadMejoraSpecs {\n\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    \/****************          SPECIFICATION: activoEquals                   *************************\/\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n\n    public static Specification&lt;ActividadMejora&gt; activoEquals(final Boolean activo) {\n        return new Specification&lt;ActividadMejora&gt;() {\n            @Override\n            public Predicate toPredicate(Root&lt;ActividadMejora&gt; root, CriteriaQuery&lt;?&gt; cq, CriteriaBuilder cb) {\n                Expression x = root.get(\"activo\");\n                Expression y = cb.literal(activo);\n                return cb.equal(x, y);\n            }\n        };\n    }\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n\n    \n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    \/****************          SPECIFICATION: periodoAnualEntre              *************************\/\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    public static Specification&lt;ActividadMejora&gt; periodoAnualEntre(final Integer anno) {\n\n\n        return new Specification&lt;ActividadMejora&gt;() {\n            @Override\n            public Predicate toPredicate(Root&lt;ActividadMejora&gt; root, CriteriaQuery&lt;?&gt; cq,\n                    CriteriaBuilder cb) {\n                \/\/ build query here\n                Expression x = root.join(\"periodoAnualInicial\").get(\"ano\");\n                Expression y = root.join(\"periodoAnualFinal\").get(\"ano\");\n                Expression z = cb.literal(anno);\n                return cb.between(z,x,y);\n            }\n        };\n    }\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n\n}\n\/**********************************************************************\/\n\/**********************************************************************\/\n\/***************      FIN DEFINICI\u00d3N DE CLASE   ***********************\/\n\/**********************************************************************\/\n\/**********************************************************************\/<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">ActividadMejoraServiceImpl.java<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ahora vamos a crear una servicio que consuma estas espec\u00edficaciones<\/li>\n\n\n\n<li>Lo primero que debemos hacer es agregar el archivo de espec\u00edficaciones<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\n\/*++++++++++++         DOMAIN Y REPOSITRY         ++++++++++++++++++++*\/\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\nimport cr.ac.una.cgi.sigesa.ppi.mcg.specs.ActividadMejoraSpecs;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Y  agregar los import&#8217;s necesarios para utilizar especificaciones<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\n\/*+++++++++++++       Specification         ++++++++++++++++++++++++++*\/\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\nimport org.springframework.data.jpa.domain.Specification;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Y el de lista<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\n\/*++++++++++++             CAMPOS                 ++++++++++++++++++++*\/\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\nimport java.util.List;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ahora creamos una m\u00e9todo que nos retorne una lista (esto por que vamos a utilizar un componete SelectManyMenu que requiere una lista), su fuera un autocomplete requerimos que sea un Page <\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**********************************************************************\/\n    \/**\n     * Ver {@link ActividadMejoraService#findAllActividadMejoraByActivoAndPeriodoEntre(java.lang.Boolean, java.lang.Integer)) }\n     * \n     * @param activo : 1 = activo \/ 0 = Inactivo\n     * @param anno : A\u00f1o del Periodo Anual del Plan Operativo\n     * @return List&lt;ActividadMejora&gt;\n     *\/\n    \/**********************************************************************\/\n\n    public List&lt;ActividadMejora&gt; findAllActividadMejoraByActivoAndPeriodoEntre(Boolean activo, Integer anno) {\n        \n        \/\/ Definimos una variable de tipo especificaci\u00f3n ActividadMejora\n        Specification&lt;ActividadMejora&gt; specFinal;\n       \n        \/\/ Obtenemos la especificaci\u00f3n de activo\n        Specification specActivoEquals = ActividadMejoraSpecs.activoEquals(activo);\n       \n        \/\/ Obtenemos la especificaci\u00f3n de periodoAnualEntre\n        Specification specPeriodoAnualEntre = ActividadMejoraSpecs.periodoAnualEntre(anno);\n\n        \/\/ Creamos la especificaci\u00f3n final\n        specFinal = Specification.where(specActivoEquals).and(specPeriodoAnualEntre);\n       \n        return repository.findAll(specFinal);\n    }<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ahora debemos crear la definici\u00f3n del m\u00e9todo en el service para que este disponible<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">ActividadMejoraService.java<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Le agregamos el import de manejo de listas<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\n\/*++++++++++++             CAMPOS                 ++++++++++++++++++++*\/\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\nimport java.util.List;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Y agregamos la definici\u00f3n<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**********************************************************************\/\n    \/**\n     * Ver {@link ActividadMejoraService#findAllActividadMejoraByActivoAndPeriodoEntre(java.lang.Boolean, java.lang.Integer)) }\n     * \n     * @param activo : 1 = activo \/ 0 = Inactivo\n     * @param anno : A\u00f1o del Periodo Anual del PLan Operativo\n     * @return List&lt;ActividadMejora&gt;\n     *\/\n    \/**********************************************************************\/\n\n    public List&lt;ActividadMejora&gt; findAllActividadMejoraByActivoAndPeriodoEntre(Boolean activo, Integer anno);<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Y con esto ya tenemos un servicio que obtiene todas las Actividades de Mejora que est\u00e9n activas y el periodo este entre los a\u00f1os de la Actividad de Mejora<\/li>\n\n\n\n<li>Ahora dentro del Bean que va a utilizar este servicio vamos a crear lo necesario para que pueda consumir el servicio<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">MetaPoaBean.java<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Primero aregamos los imports necesarios<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>import cr.ac.una.cgi.sigesa.ppi.mcg.domain.ActividadMejora;\nimport cr.ac.una.cgi.sigesa.ppi.ppo.domain.MetaPoaActividadMejora;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ahora como en SIGESA un Bean se comunica con un Bean necesitamos crear una AutoWired al bean para poder utilizarlo<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Lo primero es que vamos a crear 2 variables de tipo List:\n<ul class=\"wp-block-list\">\n<li>listaAllActividadMejora: que va almacenar todas Actividad de Mejora<\/li>\n\n\n\n<li>listaActividadMejoraSeleccionados: que va alamacenar la lista de Actividad de Mejora Seleccionados<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ **************************************************\n    \/\/ ACTIVIDAD DE MEJORA\n    \/\/ **************************************************\n    \n    \/\/ Lista de todas las Actividades de Mejora\n    private List&lt;ActividadMejora&gt; listaAllActividadesMejora;\n\n    \/\/ Lista de las Actividades de Mejoras Seleccionadas por el usuario\n    private List&lt;ActividadMejora&gt; listaActividadesMejoraSeleccionados;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Luego creamos los respectivos get&#8217;s y set&#8217;s<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/************************************************************************\n    \/\/ ACTIVIDAD DE MEJORA: ListaAllActividadesMejora\n    \/\/************************************************************************\n    public List&lt;ActividadMejora&gt; getListaAllActividadesMejora() {\n        return listaAllActividadesMejora;\n    }\n\n    public void setListaAllActividadesMejora(List&lt;ActividadMejora&gt; listaAllActividadesMejora) {\n        this.listaAllActividadesMejora = listaAllActividadesMejora;\n    }\n    \n    \/\/************************************************************************\n    \/\/ ACTIVIDAD DE MEJORA: ListaActividadesMejoraSeleccionadas\n    \/\/************************************************************************\n    public List&lt;ActividadMejora&gt; getListaActividadesMejoraSeleccionadas() {\n        return listaActividadesMejoraSeleccionadas;\n    }\n\n    public void setListaActividadesMejoraSeleccionadas(List&lt;ActividadMejora&gt; listaActividadesMejoraSeleccionadas) {\n        this.listaActividadesMejoraSeleccionadas = listaActividadesMejoraSeleccionadas;\n    }<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ahora debemos hacer el proceso para que estas listan sean cargadas con los valores necesarios<\/li>\n\n\n\n<li>Para esto en la funci\u00f3n de initDetails()<\/li>\n\n\n\n<li>vamos a mandar a cargar la lista de todas las actividades de mejora, le agregamos en el initDetails()<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ ***************************************************************\n\/\/ ACTIVIDAD MEJORA\n\/\/ ***************************************************************\n\n\/\/ Mandamos a cargar todas las actividades de mejora      this.setListaAllActividadesMejora(this.obtieneAllActividadesMejora());<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Con esto tenemos la funci\u00f3n que vamos a llamar para cargar todas las actividades de mejora<\/li>\n\n\n\n<li>Ahora para cargar la lista de las Actividades de Mejora Seleccionadas<\/li>\n\n\n\n<li>Debemos crear una lista vacia<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ creamos una lista vacia para almacenar la lista de las Activiades de Mejora Seleccionadas\nthis.setListaActividadesMejoraSeleccionadas(new ArrayList());<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Y luego realizar el proceso de carga de la BD a la entidad y a la lista de Actividades de Mejora Seleccionadas<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Cargamos los valores en la lista de Actividades de Mejora en la entidad \n            this.getEntity().setListaMetaPoaActividadesMejora(metaPoaActividadMejoraBean.setDetails(this.getEntity().getListaMetaPoaActividadesMejora()));\n            \n            \/\/ Recorremos la lista \n            for (MetaPoaActividadMejora metaPoaActividadMejora : this.getEntity().getListaMetaPoaActividadesMejora()) {\n\n                \/\/ Y los agregamos a la lista de los seleccionados\n                this.listaActividadesMejoraSeleccionadas.add(metaPoaActividadMejora.getActividadMejora());\n            }\n\n            \/\/ Inicializamos el Bean\n            metaPoaActividadMejoraBean.init();<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>RESULTADO<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ ***************************************************************\n            \/\/ ACTIVIDAD MEJORA\n            \/\/ ***************************************************************\n          \n\n            \/\/ Mandamos a cargar todas las actividades de mejora\n            this.setListaAllActividadesMejora(this.obtieneAllActividadesMejora());\n\n            \/\/ creamos una lista vacia para almacenar la lista de las Activiades de Mejora Seleccionadas\n            this.setListaActividadesMejoraSeleccionadas(new ArrayList());\n\n\n            \/\/ Cargamos los valores en la lista de Actividades de Mejora en la entidad \n            this.getEntity().setListaMetaPoaActividadesMejora(metaPoaActividadMejoraBean.setDetails(this.getEntity().getListaMetaPoaActividadesMejora()));\n            \n            \/\/ Recorremos la lista \n            for (MetaPoaActividadMejora metaPoaActividadMejora : this.getEntity().getListaMetaPoaActividadesMejora()) {\n\n                \/\/ Y los agregamos a la lista de los seleccionados\n                this.listaActividadesMejoraSeleccionadas.add(metaPoaActividadMejora.getActividadMejora());\n            }\n\n            \/\/ Inicializamos el Bean\n            metaPoaActividadMejoraBean.init();<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ahora vamos a crear la funci\u00f3n  de \u00abobtieneAllActividadesMejora\u00bb <\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n     * Nombre: obtieneAllActividadesMejora\n     * Funci\u00f3n: Obtener la lista de todas las actividades de Mejora\n     * @return List&lt;ActividadMejora&gt;\n     * @author  Gustavo Matamoros Gonz\u00e1lez\n     * @issue PPI-281\n     *\/\n    public List&lt;ActividadMejora&gt; obtieneAllActividadesMejora() {\n\n        \/\/ Creamos una lista nueva para obtener las actividades de mejora\n        List&lt;ActividadMejora&gt; listaActividadesMejora = new ArrayList();\n\n        \/\/ Le agregamos a la lista los valores obtenidos del service de Actividad de Mejora\n        listaActividadesMejora.addAll(service.findAllActividadMejoraByActivoAndPeriodoEntre(this.getEntity().getObjetivoPOA().getPlanOperativo().getPeriodoAnual().getAno()));\n\n        \/\/ Retornamos la lista\n        return listaActividadesMejora;\n    }<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">MetaPoaServiceImpl.java<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ya que tenemos la funci\u00f3n que se va a encargar de obtener todas las actividades de mejora <\/li>\n\n\n\n<li>Vamos a crear el servicio, para esto primero debemos realizar los import&#8217;s necesarios de las clases<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>import cr.ac.una.cgi.sigesa.ppi.mcg.domain.ActividadMejora;\nimport cr.ac.una.cgi.sigesa.ppi.mcg.service.ActividadMejoraService;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Y agregamos el AutoWired para el uso del servicio<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>@Autowired\nActividadMejoraService actividadMejoraService;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Y agregamos la funci\u00f3n <\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n     * Nombre: findAllActividadMejoraByActivoAndPeriodoEntre\n     * Funci\u00f3n: Obtener la lista de todas las actividades donde:\n     * -&gt; ActividadMejora.activo = 1\n     * -&gt; ActividadMejora.FechaInicial &lt; PlanOperativo.ano &gt; ActividadMejora.FechaInicial\n     * @return List&lt;ActividadMejora&gt;\n     * @author  Gustavo Matamoros Gonz\u00e1lez\n     * @issue PPI-281\n     *\/\n    @Override\n    public List&lt;ActividadMejora&gt; findAllActividadMejoraByActivoAndPeriodoEntre(Integer anno) {\n\n        \/\/ Retornamos la lista ordenada\n        return ordenaListaActividadesMejora(actividadMejoraService.findAllActividadMejoraByActivoAndPeriodoEntre(Boolean.TRUE, anno));\n    }<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Y como parte de la tarea se encontraba la tarea de que la lista debe estar ordenada por el c\u00f3digo por esto agregamos una funcion que se encarga de esto<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n     * Nombre: ordenaListaActividadesMejora\n     * Funci\u00f3n: Ordenar una lista de Actividades de Mejora\n     * @return List&lt;ActividadMejora&gt;\n     * @author  Gustavo Matamoros Gonz\u00e1lez\n     * @issue PPI-281\n     *\/\n    public List&lt;ActividadMejora&gt; ordenaListaActividadesMejora(List&lt;ActividadMejora&gt; listaActividadMejora) {\n        Collections.sort(listaActividadMejora, new Comparator&lt;ActividadMejora&gt;() {\n\n            @Override\n            public int compare(ActividadMejora am1, ActividadMejora am2) {\n                return am1.getCodigo().compareTo(am2.getCodigo());\n            }\n        });\n\n        return listaActividadMejora;\n    }<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Y agregamos la definici\u00f3n dentro del service<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">MetaPoaService.java<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Agregamos los imports necesarios<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>import cr.ac.una.cgi.sigesa.ppi.mcg.domain.ActividadMejora;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Agregamos la definici\u00f3n<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n     * Nombre: findAllActividadMejoraByActivoAndPeriodoEntre\n     * Funci\u00f3n: Obtener la lista de todas las actividades donde:\n     * -&gt; ActividadMejora.activo = 1\n     * -&gt; ActividadMejora.FechaInicial &lt; PlanOperativo.ano &gt; ActividadMejora.FechaInicial\n     * @return List&lt;ActividadMejora&gt;\n     * @author  Gustavo Matamoros Gonz\u00e1lez\n     * @issue PPI-281\n     *\/\n    public List&lt;ActividadMejora&gt; findAllActividadMejoraByActivoAndPeriodoEntre(Integer anno);<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">metaPoaEditForm.xhtml<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Agregamos el componente<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!-- ***************************************************************************** --&gt;\n                &lt;!-- ***************************************************************************** --&gt;\n                &lt;!-- ACTIVIDAD MEJORA --&gt;\n                &lt;!-- ***************************************************************************** --&gt;\n                &lt;!-- ***************************************************************************** --&gt;\n                \n                &lt;!--LABEL--&gt;\n                &lt;p:outputLabel id=\"actividadMejoraOutputLabel\" \n                               for=\"actividadMejoraSelectManyMenu\" \n                               value=\"#{i18n.metaPoa_actividadMejora_header_label}\"\n                               \/&gt;\n        \n                \n                &lt;!--PANEL--&gt;\n                &lt;p:outputPanel id=\"actividadMejoraOutputPanel\" &gt;\n                    \n\n                    &lt;!--CAMPO--&gt;\n                    &lt;p:selectManyMenu id=\"actividadMejoraSelectManyMenu\" \n                                      value=\"#{metaPoaBean.listaActividadesMejoraSeleccionadas}\"\n                                      converter=\"#{actividadMejoraBean.converter}\" \n                                      var=\"am\" \n                                      filter=\"true\" \n                                      filterMatchMode=\"contains\" \n                                      showCheckbox=\"true\" \n                                      styleClass=\"una-selectManyMenu\"\n                                      &gt;\n\n\n                        &lt;p:ajax process=\"@this\" \n                                listener=\"#{metaPoaBean.actualizaActividadesMejoraSeleccionadas}\"\n                                update=\"@this\"\/&gt;\n\n                        &lt;f:selectItems value=\"#{metaPoaBean.listaAllActividadesMejora}\" \n                                       var=\"codAM\" \n                                       itemLabel=\"#{codAM.codigo}\"\n                                       itemValue=\"#{codAM}\"\/&gt;\n\n                        &lt;p:column&gt;\n                            &lt;h:outputText value=\"#{am.codigo}\"\/&gt;\n                        &lt;\/p:column&gt;\n                        &lt;p:column&gt;\n                            &lt;h:outputText value=\"#{am.descripcion}\"\/&gt;\n                        &lt;\/p:column&gt;\n                    &lt;\/p:selectManyMenu&gt;\n\n                    &lt;!--MENSAJE--&gt;\n                    &lt;p:message id=\"actividadMejoraMessage\" \n                               for=\"actividadMejoraSelectManyMenu\" \/&gt;\n\n                &lt;\/p:outputPanel&gt;\n                &lt;!-- ***************************************************************************** --&gt;\n                &lt;!-- ***************************************************************************** --&gt;\n                &lt;!-- ***************************************************************************** --&gt;\n                &lt;!-- ***************************************************************************** --&gt;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>NOTA Importante:<\/li>\n\n\n\n<li>La siguiente instrucci\u00f3n es necesaria sino la lista ser\u00e1 presentada pero no se va actualizar en la entidad cuando el usuario marque o desmarque opciones<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;p:ajax process=\"@this\" \n                                listener=\"#{metaPoaBean.actualizaActividadesMejoraSeleccionados}\"\n                                update=\"@this\"\/&gt;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Como se ve en la instrucci\u00f3n anterior vamos a crear dentro del Bean una funci\u00f3n que actualice la lista de la entidad cada vez que el usuario marque o desmarque<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">MetaPoaBean.java<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n     * Nombre: actualizaActividadesMejoraSeleccionadas\n     * Funci\u00f3n: Actualiza la lista de Actividades de Mejora seg\u00fan interacci\u00f3n del usuario\n     * @return void\n     * @author  Gustavo Matamoros Gonz\u00e1lez\n     * @issue PPI-281\n     *\/\n    public void actualizaActividadesMejoraSeleccionadas() {\n\n        \/\/ Limpiamos la lista de Actividades de Mejora\n        this.getEntity().getListaMetaPoaActividadesMejora().clear();\n\n        \/\/ Obtenemos la lista de las actividades de Mejora seleccionadas por el usuario\n        for (ActividadMejora actividadMejora : this.getListaActividadesMejoraSeleccionadas()) {\n\n            \/\/ Creamos una nueva actividad de mejora\n            MetaPoaActividadMejora am = new MetaPoaActividadMejora();\n            \n            \/\/ Le guardamos la meta poa\n            am.setMetaPoa(this.getEntity());\n\n            \/\/ Le guardamos la actividad de mejora\n            am.setActividadMejora(actividadMejora);\n\n            \/\/ La agregamos a a la lista de MetaPoaActividadMejora\n            this.getEntity().getListaMetaPoaActividadesMejora().add(am);\n        }\n\n    }<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ahora debemos comenzar a crear la relaci\u00f3n de META_POA con META_POA_ACTIVIDAD_MEJORA<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">MetaPoa.java <\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Le agregamos la lista de de Actividades de Mejora<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\n@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)\n@JoinColumn(name = \"META_POA\", nullable = false)\nprivate List&lt;MetaPoaActividadMejora&gt; listaMetaPoaActividadMejora;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Y los respectivos get&#8217;s y set&#8217;s<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>public void setListaMetaPoaActividadMejora(List&lt;MetaPoaActividadMejora&gt; listaMetaPoaActividadMejora) {\n        this.listaMetaPoaActividadMejora = listaMetaPoaActividadMejora;\n    }\n\n    public List&lt;MetaPoaActividadMejora&gt; getListaMetaPoaActividadMejora() {\n        return listaMetaPoaActividadMejora;\n    }<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ahora para poder obtener la lista de las actividades de mejora seleccionadas vamos hacer lo siguiente<\/li>\n\n\n\n<li>Ahora como un Bean se comunica con una Bean, necesitamos crear el Bean de MetaPoaActividadMejoraBean.java<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">MetaPoaActividadMejoraBean.java<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Y le agregamos <\/li>\n\n\n\n<li>NOTA: en este caso la tabla de META_POA_ACTIVIDAD_MEJORA esta funcionando como una detalle, por tanto este Bean no funciona como CRUD sino como ASER<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/*\n * Copyright (c) 2022.\n *\n * Centro de Gestion Informatica\n * Direccion de Tecnologias de la Informacion y Comunicacion\n * Universidad Nacional - Costa Rica\n * http:\/\/www.una.ac.cr\n *\n *\/\n\n\/**********************************************************************\/\n\/**********************************************************************\/\n\/*********************       PACKAGE     ******************************\/\n\/**********************************************************************\/\n\/**********************************************************************\/\npackage cr.ac.una.cgi.sigesa.ppi.ppo.view.model;\n\n\/**********************************************************************\/\n\/**********************************************************************\/\n\/*********************       IMPORT'S    ******************************\/\n\/**********************************************************************\/\n\/**********************************************************************\/\n\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\n\/*+++++++++++++             SDK-UNA         ++++++++++++++++++++++++++*\/\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\nimport cr.ac.una.cgi.sdkuna.view.commons.ASER;\nimport cr.ac.una.cgi.sdkuna.view.commons.ASERImpl;\n\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\n\/*+++++++++++++         SRPING              ++++++++++++++++++++++++++*\/\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\nimport org.springframework.context.annotation.Scope;\nimport org.springframework.stereotype.Component;\n\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\n\/*+++++++++++++         CAMPOS              ++++++++++++++++++++++++++*\/\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\nimport javax.annotation.PostConstruct;\n\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\n\/*+++++++++++++         PPI                 ++++++++++++++++++++++++++*\/\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\nimport cr.ac.una.cgi.sigesa.ppi.ppo.domain.MetaPoaActividadMejora;\n\n\n\n\/**********************************************************************\/\n\/**********************************************************************\/\n\/*********************    DOCUMENTACI\u00d3N  ******************************\/\n\/**********************************************************************\/\n\/**********************************************************************\/\n\n\/**\n * Spring Bean Session para la administraci\u00f3n de la entidad {@link MetaPoaActividadMejora}\n *\n * @author: Gustavo Matamoros Gonz\u00e1lez\n * @since 23\/01\/2023\n * @version: 1.0.0\n * @issue PPI-281\n *\/\n\n\/**********************************************************************\/\n\/**********************************************************************\/\n\/*********************    CONFIGURACI\u00d3N  ******************************\/\n\/**********************************************************************\/\n\/**********************************************************************\/\n@Component\n@Scope(\"session\")\n\n\/**********************************************************************\/\n\/**********************************************************************\/\n\/****************    DEFINICI\u00d3N DE CLASE  *****************************\/\n\/**********************************************************************\/\n\/**********************************************************************\/\npublic class MetaPoaActividadMejoraBean extends ASERImpl&lt;MetaPoaActividadMejora&gt; implements ASER {\n\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    \/******************************      FUNCI\u00d3N INIT    *********************************************\/\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    @PostConstruct\n    public void init() {\n        \n    }\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    \/******************************  FIN  FUNCI\u00d3N INIT   *********************************************\/\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n}\n\/**********************************************************************\/\n\/**********************************************************************\/\n\/*************** FIN DEFINICI\u00d3N DE CLASE  *****************************\/\n\/**********************************************************************\/\n\/**********************************************************************\/\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Y de una vez creamos el Bean para ActividadRiesgo<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">MetaPoaActividadRiesgoBean.java<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Le agregamos<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/*\n * Copyright (c) 2022.\n *\n * Centro de Gestion Informatica\n * Direccion de Tecnologias de la Informacion y Comunicacion\n * Universidad Nacional - Costa Rica\n * http:\/\/www.una.ac.cr\n *\n *\/\n\n\/**********************************************************************\/\n\/**********************************************************************\/\n\/*********************       PACKAGE     ******************************\/\n\/**********************************************************************\/\n\/**********************************************************************\/\npackage cr.ac.una.cgi.sigesa.ppi.ppo.view.model;\n\n\/\/**********************************************************************\/\n\/**********************************************************************\/\n\/*********************       IMPORT'S    ******************************\/\n\/**********************************************************************\/\n\/**********************************************************************\/\n\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\n\/*+++++++++++++             SDK-UNA         ++++++++++++++++++++++++++*\/\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\nimport cr.ac.una.cgi.sdkuna.view.commons.ASER;\nimport cr.ac.una.cgi.sdkuna.view.commons.ASERImpl;\n\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\n\/*+++++++++++++         SRPING              ++++++++++++++++++++++++++*\/\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\nimport org.springframework.context.annotation.Scope;\nimport org.springframework.stereotype.Component;\n\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\n\/*+++++++++++++         CAMPOS              ++++++++++++++++++++++++++*\/\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\nimport javax.annotation.PostConstruct;\n\n\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\n\/*+++++++++++++         PPI                 ++++++++++++++++++++++++++*\/\n\/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\/\nimport cr.ac.una.cgi.sigesa.ppi.ppo.domain.MetaPoaActividadRiesgo;\nimport cr.ac.una.cgi.sigesa.ppi.ppo.service.MetaPoaActividadRiesgoService;\n\n\/**********************************************************************\/\n\/**********************************************************************\/\n\/*********************    DOCUMENTACI\u00d3N  ******************************\/\n\/**********************************************************************\/\n\/**********************************************************************\/\n\n\/**\n * Spring Bean Session para la administraci\u00f3n de la entidad {@link MetaPoaActividadRiesgo}\n *\n * @author: Gustavo Matamoros Gonz\u00e1lez\n * @since 23\/01\/2023\n * @version: 1.0.0\n * @issue PPI-281\n *\/\n\n\/**********************************************************************\/\n\/**********************************************************************\/\n\/*********************    CONFIGURACI\u00d3N  ******************************\/\n\/**********************************************************************\/\n\/**********************************************************************\/\n@Component\n@Scope(\"session\")\n\n\/**********************************************************************\/\n\/**********************************************************************\/\n\/****************    DEFINICI\u00d3N DE CLASE  *****************************\/\n\/**********************************************************************\/\n\/**********************************************************************\/\npublic class MetaPoaActividadRiesgoBean extends ASERImpl&lt;MetaPoaActividadRiesgo&gt; implements ASER {\n\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    \/******************************      FUNCI\u00d3N INIT    *********************************************\/\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    @PostConstruct\n    public void init() {\n        \n    }\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    \/******************************  FIN  FUNCI\u00d3N INIT   *********************************************\/\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n}\n\/**********************************************************************\/\n\/**********************************************************************\/\n\/*************** FIN DEFINICI\u00d3N DE CLASE  *****************************\/\n\/**********************************************************************\/\n\/**********************************************************************\/\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Validaci\u00f3n: solo se presenta si es PlanOperativo = Unidad<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Para poder crear esta validaci\u00f3n vamos a crear una funci\u00f3n que me retorne true si es un plan de Unidad y en caso contrario false<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">MetaPoaBean.java<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Agregamos la funci\u00f3n<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n     * Nombre: isPlanOperativoUnidad\n     * Funci\u00f3n: Determinar si el plan operativo es una plan de unidad\n     * @return true = Plan de Unidad \/ false = No es plan de unidad\n     * @author  Gustavo Matamoros Gonz\u00e1lez\n     * @issue PPI-281\n     *\/\n    public boolean isPlanOperativoUnidad() {\n\n        \/\/ Obtenemos el context\n        FacesContext context = FacesContext.getCurrentInstance();\n\n        \/\/ Obtenemos el bean actual\n        PlanOperativoBean planOperativoBean = context.getApplication().evaluateExpressionGet(context, \"#{planOperativoBean}\", PlanOperativoBean.class);\n\n        \/\/ Si el plan operativo existe\n        if (planOperativoBean != null) {\n\n            \/\/ Obtenemos el tipo de plan de Unidad\n            TipoPlanOperativo tipoPlanUnidad = service.obtieneTipoPlanUnidad();\n\n            \/\/ Retornamos true si es igual\n            return planOperativoBean.getEntity().getTipoPlanOperativo().equals(tipoPlanUnidad);\n        }\n\n        \/\/ Sino false\n        return false;\n    }<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ahora la siguiente parte es indicarle a EditForm que solo pinte los componentes si es un plan de unidad esto los hacemos con la siguiente instrucci\u00f3n<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>rendered=\"#{!metaPoaBean.isPlanOperativoUnidad()}\"<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Agregandola al outputLabel, outputPanel, el campo y message<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">metaPoaEditForm.xhtml<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Resultado<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!-- ***************************************************************************** --&gt;\n                &lt;!-- ***************************************************************************** --&gt;\n                &lt;!-- ACTIVIDAD MEJORA                                                              --&gt;\n                &lt;!-- ***************************************************************************** --&gt;\n                &lt;!-- ***************************************************************************** --&gt;\n                \n                &lt;!--LABEL--&gt;\n                &lt;p:outputLabel  id=\"actividadMejoraOutputLabel\" \n                                for=\"actividadMejoraSelectManyMenu\" \n                                value=\"#{i18n.metaPoa_actividadMejora_header_label}\"\n                                rendered=\"#{metaPoaBean.isPlanOperativoUnidad()}\"\n                               \/&gt;\n\n                \n                &lt;!--PANEL--&gt;\n                &lt;p:outputPanel  id=\"actividadMejoraOutputPanel\" \n                                rendered=\"#{metaPoaBean.isPlanOperativoUnidad()}\"&gt;\n        \n\n                    &lt;!--CAMPO--&gt;\n                    &lt;p:selectManyMenu id=\"actividadMejoraSelectManyMenu\" \n                                      value=\"#{metaPoaBean.listaActividadesMejoraSeleccionadas}\"\n                                      converter=\"#{actividadMejoraBean.converter}\" \n                                      var=\"am\" \n                                      filter=\"true\" \n                                      filterMatchMode=\"contains\" \n                                      showCheckbox=\"true\" \n                                      styleClass=\"una-selectManyMenu\"\n                                      rendered=\"#{metaPoaBean.isPlanOperativoUnidad()}\"\n                                      &gt;\n\n                        &lt;p:ajax process=\"@this\" \n                                listener=\"#{metaPoaBean.actualizaActividadesMejoraSeleccionadas}\"\n                                update=\"@this\"\/&gt;\n\n                        &lt;f:selectItems value=\"#{metaPoaBean.listaAllActividadesMejora}\" \n                                       var=\"codAM\" \n                                       itemLabel=\"#{codAM.codigo}\"\n                                       itemValue=\"#{codAM}\"\/&gt;\n\n                        &lt;p:column&gt;\n                            &lt;h:outputText value=\"#{am.codigo}\"\/&gt;\n                        &lt;\/p:column&gt;\n                        &lt;p:column&gt;\n                            &lt;h:outputText value=\"#{am.descripcion}\"\/&gt;\n                        &lt;\/p:column&gt;\n                    &lt;\/p:selectManyMenu&gt;\n\n                    &lt;!--MENSAJE--&gt;\n                    &lt;p:message id=\"actividadMejoraMessage\" \n                               for=\"actividadMejoraSelectManyMenu\" \n                               rendered=\"#{metaPoaBean.isPlanOperativoUnidad()}\"\/&gt;\n\n                &lt;\/p:outputPanel&gt;\n                &lt;!-- ***************************************************************************** --&gt;\n                &lt;!-- ***************************************************************************** --&gt;\n                &lt;!-- ***************************************************************************** --&gt;\n                &lt;!-- ***************************************************************************** --&gt;<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">3\u00b0 condici\u00f3n que las actividades de mejora sean filtradas por UnidadEjecutora<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Para realizar esta condici\u00f3n vamos agrega una nueva espec\u00edficaci\u00f3n<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">ActividadMejoraSpecs.java<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Le agregamos<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    \/****************          SPECIFICATION: unidadEjecutoraEquals          *************************\/\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n\n    public static Specification&lt;ActividadMejora&gt; unidadEjecutoraEquals(final Long unidadEjecutora) {\n        return new Specification&lt;ActividadMejora&gt;() {\n            @Override\n            public Predicate toPredicate(Root&lt;ActividadMejora&gt; root, CriteriaQuery&lt;?&gt; cq, CriteriaBuilder cb) {\n                Expression x = root.get(\"unidadEjecutora\");\n                Expression y = cb.literal(unidadEjecutora);\n                return cb.equal(x, y);\n            }\n        };\n    }\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">ActividadMejoraServiceImpl.java<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Debemos modificarla para indicarle que va recibir una Long con el ID de la Unidad<\/li>\n\n\n\n<li>Modificamos el nombre<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>findAllActividadMejoraByActivoAndPeriodoEntre\nX\nfindAllActividadMejoraByActivoAndPeriodoEntreAndUnidadEjecutoraEquals<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Y le agregamos el parametro quedando As\u00ed<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>public List&lt;ActividadMejora&gt; findAllActividadMejoraByActivoAndPeriodoEntreAndUnidadEjecutoraEquals(Boolean activo, Integer anno, Long unidadEjecutora) {<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Creamos la nueva Especificaci\u00f3n<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Obtenemos la especificaci\u00f3n de unidadEjecutora\n        Specification specUnidadEjecutora = ActividadMejoraSpecs.unidadEjecutoraEquals(unidadEjecutora);<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Y se la agregamos a la nueva espec\u00edficaci\u00f3n<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Creamos la especificaci\u00f3n final\n        specFinal = Specification.where(specActivoEquals).and(specPeriodoAnualEntre).and(specUnidadEjecutora);<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>RESULTADO<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**********************************************************************\/\n    \/**\n     * Ver {@link ActividadMejoraService#findAllActividadMejoraByActivoAndPeriodoEntreAndUnidadEjecutoraEquals(java.lang.Boolean, java.lang.Integer, java.lang.Long)) }\n     * \n     * @param activo : 1 = activo \/ 0 = Inactivo\n     * @param anno : A\u00f1o del Periodo Anual del Plan Operativo\n     * @param unidadEjecutora : Id de la Unidad Ejecutora\n     * @return List&lt;ActividadMejora&gt;\n     *\/\n    \/**********************************************************************\/\n\n    public List&lt;ActividadMejora&gt; findAllActividadMejoraByActivoAndPeriodoEntreAndUnidadEjecutoraEquals(Boolean activo, Integer anno, Long unidadEjecutora) {\n        \n        \/\/ Definimos una variable de tipo especificaci\u00f3n ActividadMejora\n        Specification&lt;ActividadMejora&gt; specFinal;\n       \n        \/\/ Obtenemos la especificaci\u00f3n de activo\n        Specification specActivoEquals = ActividadMejoraSpecs.activoEquals(activo);\n       \n        \/\/ Obtenemos la especificaci\u00f3n de periodoAnualEntre\n        Specification specPeriodoAnualEntre = ActividadMejoraSpecs.periodoAnualEntre(anno);\n\n        \/\/ Obtenemos la especificaci\u00f3n de unidadEjecutora\n        Specification specUnidadEjecutora = ActividadMejoraSpecs.unidadEjecutoraEquals(unidadEjecutora);\n\n        \/\/ Creamos la especificaci\u00f3n final\n        specFinal = Specification.where(specActivoEquals).and(specPeriodoAnualEntre).and(specUnidadEjecutora);\n       \n        return repository.findAll(specFinal);\n    }<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">ActividadMejoraService.java<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Modificamos la definici\u00f3n<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**********************************************************************\/\n    \/**\n     * Ver {@link ActividadMejoraService#findAllActividadMejoraByActivoAndPeriodoEntreAndUnidadEjecutoraEquals(java.lang.Boolean, java.lang.Integer, java.lang.Long)) }\n     * \n     * @param activo : 1 = activo \/ 0 = Inactivo\n     * @param anno : A\u00f1o del Periodo Anual del Plan Operativo\n     * @param unidadEjecutora : Id de la Unidad Ejecutora\n     * @return List&lt;ActividadMejora&gt;\n     *\/\n    \/**********************************************************************\/\n\n    public List&lt;ActividadMejora&gt; findAllActividadMejoraByActivoAndPeriodoEntreAndUnidadEjecutoraEquals(Boolean activo, Integer anno, Long unidadEjecutora);<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ahora debemos crear el proceso de obtener el ID de la Unidad Ejecutora que se encuentre actualmente seleccionada<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">MetaPoaBean.java<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Primero agregamos el import de unidad Ejecutora<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>import cr.ac.una.cgi.sigesa.epf.cpr.domain.UnidadEjecutora;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>La  vamos a modificar para que los parametros sean obtenidos y almacenados en variables<\/li>\n\n\n\n<li>RESULTADO:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n     * Nombre: obtieneAllActividadesMejora\n     * Funci\u00f3n: Obtener la lista de todas las actividades de Mejora\n     * @return List&lt;ActividadMejora&gt;\n     * @author  Gustavo Matamoros Gonz\u00e1lez\n     * @issue PPI-281\n     *\/\n    public List&lt;ActividadMejora&gt; obtieneAllActividadesMejora() {\n\n        \/\/ Creamos una lista nueva para obtener las actividades de mejora\n        List&lt;ActividadMejora&gt; listaActividadesMejora = new ArrayList();\n\n        \/\/ Obtenemos el A\u00f1o del Periodo Anual\n        Integer AnnoPeriodo = this.getEntity().getObjetivoPOA().getPlanOperativo().getPeriodoAnual().getAno();\n\n        \/\/ Obtenemos la Unidad Ejecutora del Periodo Anual\n        Long unidadEjecutora = this.getEntity().getObjetivoPOA().getPlanOperativo().getUnidadEjecutora().getId();\n\n        \/\/ Le agregamos a la lista los valores obtenidos del service de Actividad de Mejora\n        listaActividadesMejora.addAll(service.findAllActividadMejoraByActivoAndPeriodoEntreAndUnidadEjecutoraEquals(AnnoPeriodo, unidadEjecutora));\n\n        \/\/ Retornamos la lista\n        return listaActividadesMejora;\n    }<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">MetaPoaServiceImpl.java<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ahora modificamos para que la funci\u00f3n resivva el parametros de unidadEjecutora<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>RESULTADO<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n     * Nombre: findAllActividadMejoraByActivoAndPeriodoEntreAndUnidadEjecutoraEquals\n     * Funci\u00f3n: Obtener la lista de todas las actividades de Mejora donde:\n     * -&gt; ActividadMejora.activo = 1\n     * -&gt; ActividadMejora.FechaInicial &lt; PlanOperativo.ano &gt; ActividadMejora.FechaInicial\n     * -&gt; UnidadEjecutora.equals\n     * @return List&lt;ActividadMejora&gt;\n     * @author  Gustavo Matamoros Gonz\u00e1lez\n     * @issue PPI-281\n     * @param anno\n     * @param unidadEjecutora: ID\n     *\/\n    @Override\n    public List&lt;ActividadMejora&gt; findAllActividadMejoraByActivoAndPeriodoEntreAndUnidadEjecutoraEquals(Integer anno, Long unidadEjecutora) {\n\n        \/\/ Retornamos la lista ordenada\n        return ordenaListaActividadesMejora(actividadMejoraService.findAllActividadMejoraByActivoAndPeriodoEntreAndUnidadEjecutoraEquals(Boolean.TRUE, anno, unidadEjecutora));\n    }<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">MetaPoaService.java<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Modificamos la definici\u00f3n<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n     * Nombre: findAllActividadMejoraByActivoAndPeriodoEntreAndUnidadEjecutoraEquals\n     * Funci\u00f3n: Obtener la lista de todas las actividades de Mejora donde:\n     * -&gt; ActividadMejora.activo = 1\n     * -&gt; ActividadMejora.FechaInicial &lt; PlanOperativo.ano &gt; ActividadMejora.FechaInicial\n     * -&gt; UnidadEjecutora.equals\n     * @return List&lt;ActividadMejora&gt;\n     * @author  Gustavo Matamoros Gonz\u00e1lez\n     * @issue PPI-281\n     * @param anno\n     * @param unidadEjecutora\n     *\/\n    public List&lt;ActividadMejora&gt; findAllActividadMejoraByActivoAndPeriodoEntreAndUnidadEjecutoraEquals(Integer anno, Long unidadEjecutora);<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">4\u00b0 condici\u00f3n: Solo se pueden listar la Actividades de Mejora que no esten dentro de Otro Plan Operativo -&gt; ObjetivoPoa -&gt; MetaPoa<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Para este filtro vamos a crear una nueva especificaci\u00f3n que retorne todas las ActividadesMejora que existen en un plan operativo<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">ActividadMejoraSpecs.java<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Agregamos<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    \/******  SPECIFICATION: actividadMejoraNotInMetaPoaObjetivoPoaPlanOperativo   ********************\/\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    \/**\n     * Subquery: SELECT * FROM ACTIVIDAD_MEJORA\n     *                  WHERE ID_ACTIVIDAD_MEJORA IN(\n     *                  SELECT ACTIVIDAD_MEJORA FROM PPI.META_POA_ACTIVIDAD_MEJORA AM\n     *                  INNER JOIN META_POA MP ON (MP.ID_META_POA = AM.META_POA)\n     *                  INNER JOIN OBJETIVO_POA OP ON (OP.ID_OBJETIVO_POA = MP.OBJETIVO_POA)\n     *                  INNER JOIN PLAN_OPERATIVO PO ON (PO.ID_PLAN_OPERATIVO = OP.PLAN_OPERATIVO)\n     *                  WHERE PO.ID_PLAN_OPERATIVO = 212 )\n     *\n     * \n     * \n     * @param planOperativo\n     * @return\n     *\/\n    public static Specification actividadMejoraByPlanOperativo(final PlanOperativo planOperativo) {\n        return new Specification&lt;ActividadMejora>() {\n            @Override\n            public Predicate toPredicate(Root&lt;ActividadMejora> root, CriteriaQuery&lt;?> cq, CriteriaBuilder cb) {\n                \n                Subquery&lt;MetaPoaActividadMejora> qMetaPoaActividadMejora = cq.subquery(MetaPoaActividadMejora.class);\n                Root&lt;MetaPoaActividadMejora> rMetaPoaActividadMejora = qMetaPoaActividadMejora.from(MetaPoaActividadMejora.class);\n\n                Join&lt;MetaPoa,       MetaPoaActividadMejora> joinMetaPoa         = rMetaPoaActividadMejora.join(\"metaPoa\");\n                Join&lt;ObjetivoPOA,   MetaPoa>                joinObjetivoPoa     = joinMetaPoa.join(\"objetivoPoa\");\n                \/\/Join&lt;PlanOperativo, ObjetivoPOA>            joinPlanOperativo   = joinObjetivoPoa.join(\"planOperativo\");\n\n                Expression planOpe = joinObjetivoPoa.get(\"planOperativo\");\n                Join&lt;ActividadMejora, MetaPoaActividadMejora> joinActividadMejora = rMetaPoaActividadMejora.join(\"actividadMejora\");\n\n                Expression selectMetaPoaActividadMejora = joinActividadMejora.get(\"id\");\n\n\n                qMetaPoaActividadMejora.select(selectMetaPoaActividadMejora).where(cb.equal(planOpe, planOperativo));\n\n                return root.get(\"id\").in(qMetaPoaActividadMejora);\n                \n            }\n        };\n    }\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/\n    \/*************************************************************************************************\/<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">ActividadMejoraServiceImpl.java<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ahora vamos a crear un servicio que permita consumir la lista<\/li>\n\n\n\n<li>Agregamos el import necesario<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>import cr.ac.una.cgi.sigesa.ppi.ppo.domain.PlanOperativo;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Agregamos<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**********************************************************************\/\n    \/**\n     * Ver {@link ActividadMejoraService#findAllActividadMejoraByPlanOperativo(PlanOperativo)) }\n     * @author Gustavo Matamoros Gonz\u00e1lez\n     * @since 26\/01\/2023\n     * @issue PPI-281  \n     * @param planOperativo\n     * @return List&lt;ActividadMejora>\n     *\/\n    \/**********************************************************************\/\n\n    public List&lt;ActividadMejora> findAllActividadMejoraByPlanOperativo(PlanOperativo planOperativo) {\n        \n        \/\/ Definimos una variable de tipo especificaci\u00f3n ActividadMejora\n        Specification&lt;ActividadMejora> specFinal;\n       \n\n        \/\/ Obtenemos la especificaci\u00f3n de unidadEjecutora\n        Specification specPO = ActividadMejoraSpecs.actividadMejoraByPlanOperativo(planOperativo);\n\n\n        \/\/ Creamos la especificaci\u00f3n final\n        specFinal = Specification.where(specPO);\n       \n        return repository.findAll(specFinal);\n    }<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">ActividadMejoraService.java<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Agregamos el import<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>import cr.ac.una.cgi.sigesa.ppi.ppo.domain.PlanOperativo;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Agregamos la definici\u00f3n<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**********************************************************************\/\n    \/**\n     * Ver {@link ActividadMejoraService#findAllActividadMejoraByPlanOperativo(PlanOperativo)) }\n     * @author Gustavo Matamoros Gonz\u00e1lez\n     * @since 26\/01\/2023\n     * @issue PPI-281  \n     * @param planOperativo\n     * @return List&lt;ActividadMejora>\n     *\/\n    \/**********************************************************************\/\n\n    public List&lt;ActividadMejora> findAllActividadMejoraByPlanOperativo(PlanOperativo planOperativo);<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">MetaPoaServiceImpl.java<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ahora vamos a crear un servicio dentro de MetaPoa que obtenga una lista &lt;ActividadMejora> que existen en el Plan Operativo<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n     * Nombre: findAllActividadMejoraByPlanOperativo\n     * Funci\u00f3n: Obtener la lista de todas las actividades de Mejora que existan en un PlanOperativo\n     * @return List&lt;ActividadMejora>\n     * @author  Gustavo Matamoros Gonz\u00e1lez\n     * @issue PPI-281\n     * @param anno\n     * @param unidadEjecutora: ID\n     *\/\n    @Override\n    public List&lt;ActividadMejora> findAllActividadMejoraByPlanOperativo(PlanOperativo planOperativo) {\n\n        \/\/ Retornamos la lista ordenada\n        return ordenaListaActividadesMejora(actividadMejoraService.findAllActividadMejoraByPlanOperativo(planOperativo));\n    }<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">MetaPoaService.java<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Agregamos la definicion<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n     * Nombre: findAllActividadMejoraByPoaPlanOperativo\n     * Funci\u00f3n: Obtener la lista de todas las actividades de Mejora que existan en un PlanOperativo\n     * @return List&lt;ActividadMejora>\n     * @author  Gustavo Matamoros Gonz\u00e1lez\n     * @issue PPI-281\n     * @param anno\n     * @param unidadEjecutora: ID\n     *\/\n    public List&lt;ActividadMejora> findAllActividadMejoraByPlanOperativo(PlanOperativo planOperativo);<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ahora debemos crear una funci\u00f3n dentro del MetaPoaBean para que pueda obtener el Plan Operativo seleccionado por el usuarios<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">MetaPoaBean.java<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Lo primero que debemos hacer es que primero se cargue la lista de ActividadMejora Seleccionadas y luego obtenga con base en esta lista las listaAllActividad de Mejora<\/li>\n\n\n\n<li>Por tanto modificamos de posici\u00f3n<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ ***************************************************************\n            \/\/ ACTIVIDAD MEJORA\n            \/\/ ***************************************************************\n            \n            \/\/ creamos una lista vacia para almacenar la lista de las Activiades de Mejora Seleccionadas\n            this.setListaActividadesMejoraSeleccionadas(new ArrayList());\n            \n            \n            \/\/ Cargamos los valores en la lista de Actividades de Mejora en la entidad \n            this.getEntity().setListaMetaPoaActividadesMejora(metaPoaActividadMejoraBean.setDetails(this.getEntity().getListaMetaPoaActividadesMejora()));\n            \n            \/\/ Recorremos la lista \n            for (MetaPoaActividadMejora metaPoaActividadMejora : this.getEntity().getListaMetaPoaActividadesMejora()) {\n                \n                \/\/ Y los agregamos a la lista de los seleccionados\n                this.listaActividadesMejoraSeleccionadas.add(metaPoaActividadMejora.getActividadMejora());\n            }\n            listaActividadesMejoraByMetaPoa\n            \/\/ Inicializamos el Bean\n            metaPoaActividadMejoraBean.init();\n            \n            \/\/ Mandamos a cargar todas las actividades de mejora\n            this.setListaAllActividadesMejora(this.obtieneAllActividadesMejora());<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Agregamos<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n     * Nombre: obtieneAllActividadesMejoraByPlanOperativo\n     * Funci\u00f3n: Obtener la lista de todas las actividades de Mejora que existen en un plan operativo\n     * @return List&lt;ActividadMejora>\n     * @author  Gustavo Matamoros Gonz\u00e1lez\n     * @issue PPI-281\n     *\/\n    public List&lt;ActividadMejora> obtieneAllActividadesMejoraByPlanOperativo() {\n\n        \/\/ Creamos una lista nueva para obtener las actividades de mejora\n        List&lt;ActividadMejora> listaActividadesMejoraInPO = new ArrayList();\n\n        \/\/ Obtenemos el A\u00f1o del Periodo Anual\n        PlanOperativo planOperativo = this.getEntity().getObjetivoPOA().getPlanOperativo();\n\n        \n        \/\/ Le agregamos a la lista los valores obtenidos del service de Actividad de Mejora\n        listaActividadesMejoraInPO.addAll(service.findAllActividadMejoraByPlanOperativo(planOperativo));\n\n        \/\/ Retornamos la lista\n        return listaActividadesMejoraInPO;\n    }<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Y ahora vamos a modificar la funci\u00f3n obtieneAllActividadesMejora, para que utilice las 3 listas:\n<ul class=\"wp-block-list\">\n<li>listaActividadesMejoraByUnidadEjecutora<\/li>\n\n\n\n<li>listaActividadesMejoraByPlanOperativo<\/li>\n\n\n\n<li>listaActividadesMejoraByMetaPoa<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Para generar la lista correcta de Actividades de Mejora<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n     * Nombre: obtieneAllActividadesMejora\n     * Funci\u00f3n: Obtener la lista de todas las actividades de Mejora\n     * @return List&lt;ActividadMejora>\n     * @author  Gustavo Matamoros Gonz\u00e1lez\n     * @issue PPI-281\n     *\/\n    public List&lt;ActividadMejora> obtieneAllActividadesMejora() {\n\n\n        \/\/ ************************************************************************************\n        \/\/ Lista por: Lista Final\n        \/\/ ************************************************************************************\n\n        \/\/ Creamos una lista nueva para obtener las actividades de mejora que se deben retornar\n        List&lt;ActividadMejora> listaFinal = new ArrayList();\n\n\n        \/\/ ************************************************************************************\n        \/\/ Lista por: Unidad Ejecutora\n        \/\/ ************************************************************************************\n\n        \/\/ Creamos una lista nueva para obtener las actividades de mejora disponibles para una Unidad Ejecutora\n        List&lt;ActividadMejora> listaActividadesMejoraByUnidadEjecutora = new ArrayList();\n\n        \/\/ Obtenemos el A\u00f1o del Periodo Anual\n        Integer AnnoPeriodo = this.getEntity().getObjetivoPOA().getPlanOperativo().getPeriodoAnual().getAno();\n\n        \/\/ Obtenemos la Unidad Ejecutora del Periodo Anual\n        Long unidadEjecutora = this.getEntity().getObjetivoPOA().getPlanOperativo().getUnidadEjecutora().getId();\n\n        \/\/ Le agregamos a la lista los valores obtenidos del service de Actividad de Mejora\n        listaActividadesMejoraByUnidadEjecutora.addAll(service.findAllActividadMejoraByActivoAndPeriodoEntreAndUnidadEjecutoraEquals(AnnoPeriodo, unidadEjecutora));\n\n        \n\n        \/\/ ************************************************************************************\n        \/\/ Lista por: Plan Operativo\n        \/\/ ************************************************************************************\n\n        \/\/ Creamos una lista nueva para obtener las actividades de mejora disponibles para un Plan Operativo\n        List&lt;ActividadMejora> listaActividadesMejoraByPlanOperativo = new ArrayList();\n\n        \/\/ Le agregamos a la lista los valores obtenidos del service de Actividad de Mejora\n        listaActividadesMejoraByPlanOperativo.addAll(obtieneAllActividadesMejoraByPlanOperativo());\n\n\n\n\n        \/\/ ************************************************************************************\n        \/\/ Lista por: Meta POA\n        \/\/ ************************************************************************************\n\n        \/\/ Creamos una lista nueva para obtener las actividades de mejora disponibles para una Meta POA\n        List&lt;ActividadMejora> listaActividadesMejoraByMetaPoa = this.getListaActividadesMejoraSeleccionadas();\n\n        \/\/ Recorremos la lista de la Actividades de Mejora Disponibles para Una Unidad Ejecutora\n        for (ActividadMejora listaByUE: listaActividadesMejoraByUnidadEjecutora) {\n    \n            \/\/ Si la ActividadMejora existe ya asignada en el Plan Operativo\n            if(listaActividadesMejoraByPlanOperativo.contains(listaByUE)){\n                \n                \/\/ Si la ActividadMejora pertenece a esta meta POA agreguela\n                if(listaActividadesMejoraByMetaPoa.contains(listaByUE)){\n                    listaFinal.add(listaByUE);\n                }\n\n            \/\/ No si no existe en el Plan Puede ser utilizada\n            }else{\n                listaFinal.add(listaByUE);\n            }\n\n        }\n\n        \/\/ Retornamos la lista\n        return listaFinal;\n    }<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>ActividadMejoraSpecs.java ActividadMejoraServiceImpl.java ActividadMejoraService.java MetaPoaBean.java MetaPoaServiceImpl.java MetaPoaService.java metaPoaEditForm.xhtml MetaPoaBean.java MetaPoa.java MetaPoaActividadMejoraBean.java MetaPoaActividadRiesgoBean.java Validaci\u00f3n: solo se presenta si es PlanOperativo = Unidad MetaPoaBean.java metaPoaEditForm.xhtml 3\u00b0 condici\u00f3n que las actividades de mejora sean filtradas por UnidadEjecutora ActividadMejoraSpecs.java ActividadMejoraServiceImpl.java ActividadMejoraService.java MetaPoaBean.java MetaPoaServiceImpl.java MetaPoaService.java 4\u00b0 condici\u00f3n: Solo se pueden listar la Actividades de Mejora que no esten dentro de Otro [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[443],"tags":[472,444,451],"class_list":["post-14102","post","type-post","status-publish","format-standard","hentry","category-sigesa","tag-selectmanymenu","tag-sigesa","tag-specs"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":6}},"_links":{"self":[{"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts\/14102","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=14102"}],"version-history":[{"count":88,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts\/14102\/revisions"}],"predecessor-version":[{"id":14209,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts\/14102\/revisions\/14209"}],"wp:attachment":[{"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=14102"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=14102"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=14102"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}