SIGESA: Validaciones

  • Las validaciones en SIGESA se crean en un archivo «validator» que se ubica en:
  • Proyecto->Web->view->validator
  • Creamos el archivo:

ActividadRespuestaRiesgoValidator.java

  • Y le agregamos
/*
 * Copyright (C) 2022.
 *
 * Centro de Gestion Informatica
 * Direccion de Tecnologias de la Informacion y Comunicacion
 * Universidad Nacional - Costa Rica
 * http://www.una.ac.cr
 * 
 */

/**********************************************************************/
/**********************************************************************/
/*********************       PACKAGE     ******************************/
/**********************************************************************/
/**********************************************************************/
package cr.ac.una.cgi.sigesa.ppi.mcg.view.validator;


/**********************************************************************/
/**********************************************************************/
/*********************       IMPORT'S    ******************************/
/**********************************************************************/
/**********************************************************************/


/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/*+++++++++++++             SDK-UNA         ++++++++++++++++++++++++++*/
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
import cr.ac.una.cgi.sdkuna.view.controller.MessagesController;
import cr.ac.una.cgi.sdkuna.view.util.MessageBundleLoader;


/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/*+++++++++++++            FACES            ++++++++++++++++++++++++++*/
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;

/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/*+++++++++++++       SPRING-BOOT           ++++++++++++++++++++++++++*/
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/*+++++++++++++           JAVA              ++++++++++++++++++++++++++*/
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/*++++++++++++         DOMAIN Y SERVICE           ++++++++++++++++++++*/
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
import cr.ac.una.cgi.sigesa.ppi.mcg.domain.ActividadRespuestaRiesgo;
import cr.ac.una.cgi.sigesa.ppi.mcg.service.ActividadRespuestaRiesgoService;



/**********************************************************************/
/**********************************************************************/
/*********************   DOCUMENTACIÓN   ******************************/
/**********************************************************************/
/**********************************************************************/
/**
 *
 * @author Gustavo Matamoros González
 * @version 1.0.0 05/01/2023
 *
 */

/**********************************************************************/
/**********************************************************************/
/*********************    CONFIGURACIÓN  ******************************/
/**********************************************************************/
/**********************************************************************/
@Component
@Scope("request")

/**********************************************************************/
/**********************************************************************/
/****************    DEFINICIÓN DE CLASE  *****************************/
/**********************************************************************/
/**********************************************************************/
public class ActividadRespuestaRiesgoValidator implements Validator {




    /**********************************************************************/
    /***********                AUTOWIRED              ********************/
    /**********************************************************************/
    @Autowired
    MessagesController messagesController;

    @Autowired
    ActividadRespuestaRiesgoService actividadRespuestaRiesgoService;


    /**********************************************************************/
    /***********             FUNCIÓN:   validate              *************/
    /**********************************************************************/
    @Override
    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {

        //Obtenemos la ActividadRespuestaRiesgo
        ActividadRespuestaRiesgo actividadRespuestaRiesgo = (ActividadRespuestaRiesgo) component.getAttributes().get("actividadRespuestaRiesgo");

        // Si es null regrese
        if (actividadRespuestaRiesgo == null) {
            return;
        }
        
        /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
        /* +++++++++++++++++             VALIDACIONES              ++++++++++++++++++++++++++++ */
        /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
        try {

            // VALIDACIÓN: fechaPeriodoAnualInicial < fechaPeriodoAnualFinal
            actividadRespuestaRiesgoService.validarFechaFinal(actividadRespuestaRiesgo.getPeriodoAnualInicial().getAno(), actividadRespuestaRiesgo.getPeriodoAnualFinal().getAno());

        } catch (Exception ex) {
                String summary = ex.getMessage();
                String detail = ex.getCause().getMessage();
                messagesController.addError(summary, detail);
                throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, summary, detail));

        }

    }
}
/**********************************************************************/
/**********************************************************************/
/***************      FIN DEFINICIÓN DE CLASE   ***********************/
/**********************************************************************/
/**********************************************************************/
  • Como vemos los pasos son:
    • Obtener: el objeto para este caso «actividadRespuestaRiesgo»
//Obtenemos la ActividadRespuestaRiesgo
ActividadRespuestaRiesgo actividadRespuestaRiesgo = (ActividadRespuestaRiesgo) component.getAttributes().get("actividadRespuestaRiesgo");
  • Pregutar si es null (para que no se caiga)
// Si es null regrese
        if (actividadRespuestaRiesgo == null) {
            return;
        }
  • Y realizar un try catch para las validaciones
/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
        /* +++++++++++++++++             VALIDACIONES              ++++++++++++++++++++++++++++ */
        /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
        try {

            // VALIDACIÓN: fechaPeriodoAnualInicial < fechaPeriodoAnualFinal
            actividadRespuestaRiesgo.validarFechaFinal(actividadRespuestaRiesgo.getPeriodoAnualInicial().getAno(), actividadRespuestaRiesgo.getPeriodoAnualFinal().getAno());

        } catch (Exception ex) {
                String summary = ex.getMessage();
                String detail = ex.getCause().getMessage();
                messagesController.addError(summary, detail);
                throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, summary, detail));

        }
  • Donde dentro del try podemos crear todas las validaciones que queramos
// VALIDACIÓN: fechaPeriodoAnualInicial < fechaPeriodoAnualFinal
            actividadRespuestaRiesgo.validarFechaFinal(actividadRespuestaRiesgo.getPeriodoAnualInicial().getAno(), actividadRespuestaRiesgo.getPeriodoAnualFinal().getAno());
  • Como vemos estamos invocando a una función del servicio «validarFechaFinal»
  • Por tanto vamos a crear esta función

ActividadRespuestaRiesgoServiceImpl.java

  • Creamos la función
/**********************************************************************/
    /***********  VALIDACIÓN:  FECHAS PAI < PAF               *************/
    /**********************************************************************/
    /*
     * Función: Validación que verifica si la fecha_periodoAnualInicial no sea menor a fecha_periodoAnualFinal
     */

    @Override
    public void validarFechaFinal(Integer annofechaInicial, Integer annofechaFinal) throws Exception{
 
        if (annofechaFinal.compareTo(annofechaInicial) < 0 ) {
            Throwable cause = new Throwable(getI18n("actividadRespuestaRiesgo_message_error_validacion_fechaFinal_detail"));
            throw new Exception(getI18n("actividadRespuestaRiesgo_message_error_validacion_fechaFinal_summary"), cause);
        }
 
    }
  • Y de una vez creamos la definición

ActividadRespuestaRiesgoService.java

  • Agregamos
/**********************************************************************/
   /**
    * Definición valida si el año del Periodo Inicial es menor al año del Periodo Final
    * 
    * @param annofechaInicial : año periodo inicial
    * @param annofechaFinal : año periodo final
    * @return 
    */
   /**********************************************************************/
   public void validarFechaFinal(Integer annofechaInicial, Integer annofechaFinal) throws Exception;

  • Y de una vez agregamos la internacionalización
  • Ingresamos a SIGESA -> «Lista de internacionalización»
  • Donde:
    • detail = «Error»
    • Summary: «El Año del Periodo Anual Inicial no puede ser menor al Año del Periodo Anual Final»

  • Y ahora para hacer que la validaciones se apliquen debajo de «Intructions» agregamos
<!--####################################################################################-->
            <!--######################## CAMPO OCULTO PARA VALIDACIÓN   ############################-->
            <!--####################################################################################-->

            <!--Entrada oculta para validaciones-->
            <h:inputHidden id="actividadRespuestaRiesgoValidator" value="true" >
                <f:attribute name="actividadRespuestaRiesgo" value="#{actividadRespuestaRiesgoBean.entity}"/>
                <f:validator binding="#{actividadRespuestaRiesgoValidator}" disabled="#{empty param['formMantenimiento:toolbar:toolbar_saveBtn']}" />
            </h:inputHidden>
            <!--####################################################################################-->
            <!--###################  FIN CAMPO OCULTO PARA VALIDACIÓN   ############################-->
            <!--####################################################################################-->