{"id":15684,"date":"2023-09-20T08:49:07","date_gmt":"2023-09-20T14:49:07","guid":{"rendered":"https:\/\/sada.services\/?p=15684"},"modified":"2023-09-20T14:21:32","modified_gmt":"2023-09-20T20:21:32","slug":"sigesa-validaciones-de-fechas","status":"publish","type":"post","link":"https:\/\/sada.services\/?p=15684","title":{"rendered":"SIGESA: Validaciones de Fechas y configuraci\u00f3n de min y max de fechas para componente PrimeFaces calendar"},"content":{"rendered":"\n<ul class=\"wp-block-list\"><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Configuraci\u00f3n de fechas Min y Max<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Para este caso vamos a utilizar una funci\u00f3n que obtiene la fecha Inicio y Fin de del a\u00f1oFormulaci\u00f3n de PeriodoAnualService<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">MetaPOAIService.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 java.util.Date;\nimport cr.ac.una.cgi.sigesa.epf.cpr.domain.PeriodoAnual;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Se definen dos m\u00e9todos<\/li>\n\n\n\n<li>El primero obtiene el periodo Anual de Formulaci\u00f3n<\/li>\n\n\n\n<li>Y el segundo que valida si la fecha inicial es menor que la Fecha Final<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n     * M\u00e9todo que retorna el PeriodoAnual de Formulaci\u00f3n\n     *\n     * @return:PeriodoAnual\n     *\n     * @author Gustavo Matamoros Gonz\u00e1lez\n     * @sice: 20\/09\/2023\n     * @issue: BTPPI-299\n     *\/\n    public PeriodoAnual obtenerPeriodoAnualFormulacion();\n\n    \/**\n     * Validaci\u00f3n que verifica si la fecha Final esta antes de la Fecha Inicio\n     *\n     * @return:PeriodoAnual\n     *\n     * @author Gustavo Matamoros G.\n     * @param annofechaInicial\n     * @param annofechaFinal\n     * @sice: 20\/09\/2023\n     * @issue: BTPPI-299\n     *\/\n    public void validarFechaInicioMenorQueFechaFin(Date FechaInicio, Date FechaFin) throws Exception;<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">MetaPOAIServiceImpl.java<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Importamos las dependencias<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>import java.util.Date;\nimport cr.ac.una.cgi.sigesa.epf.cpr.domain.PeriodoAnual;\nimport cr.ac.una.cgi.sigesa.epf.cpr.service.PeriodoAnualService;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Creamos el Autowired<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>@Autowired\nPeriodoAnualService periodoAnualService;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Creamos los m\u00e9todos<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/*\n     * Ver {@link MetaPOAIService#obtenerPeriodoAnualFormulacion}\n     *\/\n    @Override\n    public PeriodoAnual obtenerPeriodoAnualFormulacion(){\n        return periodoAnualService.findAnoFormulacion();\n    }\n\n    \/****************************************************************************************\/\n    \/****************************************************************************************\/\n    \/*****************************    VALIDACIONES     **************************************\/\n    \/****************************************************************************************\/\n    \/****************************************************************************************\/\n    \n\n    \/**********************************************************************\/\n    \/*********** VALIDACI\u00d3N: Fecha Inicial &lt; Fecha Fin        *************\/\n    \/**********************************************************************\/\n    \/*\n     * Ver {@link MetaPOAIService#validarFechaFinal}\n     *\/\n\n    @Override\n    public void validarFechaInicioMenorQueFechaFin(Date FechaInicio, Date FechaFin) throws Exception {\n \n \n         \/\/ VALIDACI\u00d3N: Las variables existen\n         if((FechaInicio != null) &amp;&amp; (FechaFin != null)){\n \n             \/\/ VALIDACI\u00d3N: FechaInicio > FechaFin\n             if (FechaFin.before(FechaInicio)) {\n \n                 \/\/ MENSAJES: cause y message\n                 Throwable cause = new Throwable(getI18n(\"metaPOAI_message_error_validacion_fechas_detail\"));\n                 throw new Exception(getI18n(\"metaPOAI_message_error_validacion_fechas_summary\"), cause);\n \n             }\n         }\n \n    }<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">MetaPOAIBean.java<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Imports<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>import cr.ac.una.cgi.sigesa.epf.cpr.domain.PeriodoAnual;\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Creamos las variables necesarias<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/* Periodo Anual Formulaci\u00f3n *\/\nprivate PeriodoAnual periodoAnualFormulacion;\nprivate String calendarioFechaInicio;\nprivate String calendarioFechaFin;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Y en la funci\u00f3n Init() obtenemos el periodoAnualFormulacion<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/****************************************************************\/\n\/\/ Obtener Periodo Anual de Formulaci\u00f3n\n\/****************************************************************\/\nperiodoAnualFormulacion = service.obtenerPeriodoAnualFormulacion();\ncalendarioFechaInicio = (new SimpleDateFormat(\"dd\/MM\/yyyy\").format(periodoAnualFormulacion.getFechaInicio()));\ncalendarioFechaFin = (new SimpleDateFormat(\"dd\/MM\/yyyy\").format(periodoAnualFormulacion.getFechaFin()));<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Y creamos los get&#8217;s y set&#8217;s necesarios<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>public PeriodoAnual getPeriodoAnualFormulacion() {\n        return periodoAnualFormulacion;\n    }\n\n    public void setPeriodoAnualFormulacion(PeriodoAnual periodoAnualFormulacion) {\n        this.periodoAnualFormulacion = periodoAnualFormulacion;\n    }\n    public String getCalendarioFechaInicio() {\n        return calendarioFechaInicio;\n    }\n\n    public void setCalendarioFechaInicio(String calendarioFechaInicio) {\n        this.calendarioFechaInicio = calendarioFechaInicio;\n    }\n\n    public String getCalendarioFechaFin() {\n        return calendarioFechaFin;\n    }\n\n    public void setCalendarioFechaFin(String calendarioFechaFin) {\n        this.calendarioFechaFin = calendarioFechaFin;\n    }<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Creamos el archivo en el ubicaci\u00f3n PPO->WEB-> VIEW -> Validator<\/li>\n\n\n\n<li>MetaPOAIValidator.java<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">MetaPOAIValidator.java<\/h2>\n\n\n\n<p><\/p>\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\/*********************       PACKAGE     ******************************\/\n\/**********************************************************************\/\npackage cr.ac.una.cgi.sigesa.ppi.ppo.view.validator;\n\n\/**********************************************************************\/\n\/*********************       IMPORT'S    ******************************\/\n\/**********************************************************************\/\nimport cr.ac.una.cgi.sdkuna.view.controller.MessagesController;\nimport javax.faces.application.FacesMessage;\nimport javax.faces.component.UIComponent;\nimport javax.faces.context.FacesContext;\nimport javax.faces.validator.Validator;\nimport javax.faces.validator.ValidatorException;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.context.annotation.Scope;\nimport org.springframework.stereotype.Component;\n\nimport cr.ac.una.cgi.sigesa.ppi.ppo.domain.MetaPOAI;\nimport cr.ac.una.cgi.sigesa.ppi.ppo.service.MetaPOAIService;\n\n\/**********************************************************************\/\n\/*********************   DOCUMENTACI\u00d3N   ******************************\/\n\/**********************************************************************\/\n\/**\n *\n * @author Gustavo Matamoros Gonz\u00e1lez\n * @version 0.0.1\n * 20\/09\/2023\n *\n *\/\n@Component\n@Scope(\"request\")\npublic class MetaPOAIValidator implements Validator{\n    \n    @Autowired\n    MessagesController messagesController;\n    \n    @Autowired\n    MetaPOAIService metaPOAIService;\n    \n    @Override\n    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException{\n      \n        \/\/ Obtenemos la meta por trabajar\n        MetaPOAI metaPOAI = (MetaPOAI) component.getAttributes().get(\"metaPOAI\");\n\n        \/\/ Si es null regrese\n        if(metaPOAI == null){\n            return;\n        }\n        try {            \n            \/*******************************************************************\/\n            \/\/ VALIDACI\u00d3N: fechaInicial &lt; fechaFinal\n            \/*******************************************************************\/\n            metaPOAIService.validarFechaInicioMenorQueFechaFin(metaPOAI.getFechaInicial(), metaPOAI.getFechaFinal());\n        } catch (Exception exception) {\n            String summary = exception.getMessage();\n            String detail = exception.getCause().getMessage();\n            messagesController.addError(summary, detail);\n            throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, summary, detail));\n        }\n\n    }\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">metaPOAIEditForm.xhtml<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>De bajo de <\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code> &lt;components:requiredInstructions focus=\"panelForm\" \/><\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Agregamos el llamado al archivo de validaci\u00f3n<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!--####################################################################################-->\n            &lt;!--########################       VALIDACI\u00d3N               ############################-->\n            &lt;!--####################################################################################-->\n\n            &lt;!--Entrada oculta para validaciones-->\n            &lt;h:inputHidden id=\"metaPOAIValidator\" value=\"true\" >\n                &lt;f:attribute name=\"metaPOAI\" value=\"#{metaPOAIBean.entity}\"\/>\n                &lt;f:validator binding=\"#{metaPOAIValidator}\" \/>\n            &lt;\/h:inputHidden><\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Y a la fecha inicial y final les agregamos <\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>mindate=\"#{metaPOAIBean.calendarioFechaInicio}\" \n                                maxdate=\"#{metaPOAIBean.calendarioFechaFin}\"><\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Quedando as\u00ed<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!-- Fecha Inicial -->\n                &lt;p:outputLabel id=\"fechaInicialOutputLabel\"\n                               for=\"fechaInicialCalendar\"\n                               value=\"#{i18n.metaPoai_fechaInicial_label}\" \/>\n                &lt;p:outputPanel>\n                    &lt;p:calendar id=\"fechaInicialCalendar\"\n                                value=\"#{metaPOAIBean.entity.fechaInicial}\"\n                                showOn=\"button\"\n                                locale=\"es\"\n                                pattern=\"dd\/MM\/yyyy\"\n                                required=\"true\"\n                                navigator=\"true\"\n                                timeZone=\"America\/Costa_Rica\"\n                                mindate=\"#{metaPOAIBean.calendarioFechaInicio}\" \n                                maxdate=\"#{metaPOAIBean.calendarioFechaFin}\">\n                        &lt;p:ajax event=\"dateSelect\"\n                                process=\"@this\" \/>\n                    &lt;\/p:calendar>\n                    &lt;p:message id=\"fechaInicialMessage\"\n                               for=\"fechaInicialCalendar\" \/>\n                &lt;\/p:outputPanel>\n\n                &lt;!-- Fecha Final -->\n                &lt;p:outputLabel id=\"fechaFinalOutputLabel\"\n                               for=\"fechaFinalCalendar\"\n                               value=\"#{i18n.metaPoai_fechaFinal_label}\" \/>\n                &lt;p:outputPanel>\n                    &lt;p:calendar id=\"fechaFinalCalendar\"\n                                value=\"#{metaPOAIBean.entity.fechaFinal}\"\n                                showOn=\"button\"\n                                locale=\"es\"\n                                required=\"true\"\n                                pattern=\"dd\/MM\/yyyy\"\n                                navigator=\"true\"\n                                timeZone=\"America\/Costa_Rica\"\n                                mindate=\"#{metaPOAIBean.calendarioFechaInicio}\" \n                                maxdate=\"#{metaPOAIBean.calendarioFechaFin}\">\n                        &lt;p:ajax event=\"dateSelect\"\n                                process=\"@this\" \/>\n                    &lt;\/p:calendar>\n                    &lt;p:message id=\"fechaFinalMessage\"\n                               for=\"fechaFinalCalendar\" \/>\n                &lt;\/p:outputPanel><\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Configuraci\u00f3n de fechas Min y Max MetaPOAIService.java MetaPOAIServiceImpl.java MetaPOAIBean.java MetaPOAIValidator.java metaPOAIEditForm.xhtml<\/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":[],"class_list":["post-15684","post","type-post","status-publish","format-standard","hentry","category-sigesa"],"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\/15684","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=15684"}],"version-history":[{"count":7,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts\/15684\/revisions"}],"predecessor-version":[{"id":15693,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts\/15684\/revisions\/15693"}],"wp:attachment":[{"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=15684"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=15684"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=15684"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}