Configuración de fechas Min y Max
- Para este caso vamos a utilizar una función que obtiene la fecha Inicio y Fin de del añoFormulación de PeriodoAnualService
MetaPOAIService.java
- Agregamos los imports necesarios
import java.util.Date;
import cr.ac.una.cgi.sigesa.epf.cpr.domain.PeriodoAnual;
- Se definen dos métodos
- El primero obtiene el periodo Anual de Formulación
- Y el segundo que valida si la fecha inicial es menor que la Fecha Final
/**
* Método que retorna el PeriodoAnual de Formulación
*
* @return:PeriodoAnual
*
* @author Gustavo Matamoros González
* @sice: 20/09/2023
* @issue: BTPPI-299
*/
public PeriodoAnual obtenerPeriodoAnualFormulacion();
/**
* Validación que verifica si la fecha Final esta antes de la Fecha Inicio
*
* @return:PeriodoAnual
*
* @author Gustavo Matamoros G.
* @param annofechaInicial
* @param annofechaFinal
* @sice: 20/09/2023
* @issue: BTPPI-299
*/
public void validarFechaInicioMenorQueFechaFin(Date FechaInicio, Date FechaFin) throws Exception;
MetaPOAIServiceImpl.java
- Importamos las dependencias
import java.util.Date;
import cr.ac.una.cgi.sigesa.epf.cpr.domain.PeriodoAnual;
import cr.ac.una.cgi.sigesa.epf.cpr.service.PeriodoAnualService;
@Autowired
PeriodoAnualService periodoAnualService;
/*
* Ver {@link MetaPOAIService#obtenerPeriodoAnualFormulacion}
*/
@Override
public PeriodoAnual obtenerPeriodoAnualFormulacion(){
return periodoAnualService.findAnoFormulacion();
}
/****************************************************************************************/
/****************************************************************************************/
/***************************** VALIDACIONES **************************************/
/****************************************************************************************/
/****************************************************************************************/
/**********************************************************************/
/*********** VALIDACIÓN: Fecha Inicial < Fecha Fin *************/
/**********************************************************************/
/*
* Ver {@link MetaPOAIService#validarFechaFinal}
*/
@Override
public void validarFechaInicioMenorQueFechaFin(Date FechaInicio, Date FechaFin) throws Exception {
// VALIDACIÓN: Las variables existen
if((FechaInicio != null) && (FechaFin != null)){
// VALIDACIÓN: FechaInicio > FechaFin
if (FechaFin.before(FechaInicio)) {
// MENSAJES: cause y message
Throwable cause = new Throwable(getI18n("metaPOAI_message_error_validacion_fechas_detail"));
throw new Exception(getI18n("metaPOAI_message_error_validacion_fechas_summary"), cause);
}
}
}
MetaPOAIBean.java
import cr.ac.una.cgi.sigesa.epf.cpr.domain.PeriodoAnual;
- Creamos las variables necesarias
/* Periodo Anual Formulación */
private PeriodoAnual periodoAnualFormulacion;
private String calendarioFechaInicio;
private String calendarioFechaFin;
- Y en la función Init() obtenemos el periodoAnualFormulacion
/****************************************************************/
// Obtener Periodo Anual de Formulación
/****************************************************************/
periodoAnualFormulacion = service.obtenerPeriodoAnualFormulacion();
calendarioFechaInicio = (new SimpleDateFormat("dd/MM/yyyy").format(periodoAnualFormulacion.getFechaInicio()));
calendarioFechaFin = (new SimpleDateFormat("dd/MM/yyyy").format(periodoAnualFormulacion.getFechaFin()));
- Y creamos los get’s y set’s necesarios
public PeriodoAnual getPeriodoAnualFormulacion() {
return periodoAnualFormulacion;
}
public void setPeriodoAnualFormulacion(PeriodoAnual periodoAnualFormulacion) {
this.periodoAnualFormulacion = periodoAnualFormulacion;
}
public String getCalendarioFechaInicio() {
return calendarioFechaInicio;
}
public void setCalendarioFechaInicio(String calendarioFechaInicio) {
this.calendarioFechaInicio = calendarioFechaInicio;
}
public String getCalendarioFechaFin() {
return calendarioFechaFin;
}
public void setCalendarioFechaFin(String calendarioFechaFin) {
this.calendarioFechaFin = calendarioFechaFin;
}
- Creamos el archivo en el ubicación PPO->WEB-> VIEW -> Validator
- MetaPOAIValidator.java
MetaPOAIValidator.java
/*
* 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.ppo.view.validator;
/**********************************************************************/
/********************* IMPORT'S ******************************/
/**********************************************************************/
import cr.ac.una.cgi.sdkuna.view.controller.MessagesController;
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;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import cr.ac.una.cgi.sigesa.ppi.ppo.domain.MetaPOAI;
import cr.ac.una.cgi.sigesa.ppi.ppo.service.MetaPOAIService;
/**********************************************************************/
/********************* DOCUMENTACIÓN ******************************/
/**********************************************************************/
/**
*
* @author Gustavo Matamoros González
* @version 0.0.1
* 20/09/2023
*
*/
@Component
@Scope("request")
public class MetaPOAIValidator implements Validator{
@Autowired
MessagesController messagesController;
@Autowired
MetaPOAIService metaPOAIService;
@Override
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException{
// Obtenemos la meta por trabajar
MetaPOAI metaPOAI = (MetaPOAI) component.getAttributes().get("metaPOAI");
// Si es null regrese
if(metaPOAI == null){
return;
}
try {
/*******************************************************************/
// VALIDACIÓN: fechaInicial < fechaFinal
/*******************************************************************/
metaPOAIService.validarFechaInicioMenorQueFechaFin(metaPOAI.getFechaInicial(), metaPOAI.getFechaFinal());
} catch (Exception exception) {
String summary = exception.getMessage();
String detail = exception.getCause().getMessage();
messagesController.addError(summary, detail);
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, summary, detail));
}
}
}
metaPOAIEditForm.xhtml
<components:requiredInstructions focus="panelForm" />
- Agregamos el llamado al archivo de validación
<!--####################################################################################-->
<!--######################## VALIDACIÓN ############################-->
<!--####################################################################################-->
<!--Entrada oculta para validaciones-->
<h:inputHidden id="metaPOAIValidator" value="true" >
<f:attribute name="metaPOAI" value="#{metaPOAIBean.entity}"/>
<f:validator binding="#{metaPOAIValidator}" />
</h:inputHidden>
- Y a la fecha inicial y final les agregamos
mindate="#{metaPOAIBean.calendarioFechaInicio}"
maxdate="#{metaPOAIBean.calendarioFechaFin}">
<!-- Fecha Inicial -->
<p:outputLabel id="fechaInicialOutputLabel"
for="fechaInicialCalendar"
value="#{i18n.metaPoai_fechaInicial_label}" />
<p:outputPanel>
<p:calendar id="fechaInicialCalendar"
value="#{metaPOAIBean.entity.fechaInicial}"
showOn="button"
locale="es"
pattern="dd/MM/yyyy"
required="true"
navigator="true"
timeZone="America/Costa_Rica"
mindate="#{metaPOAIBean.calendarioFechaInicio}"
maxdate="#{metaPOAIBean.calendarioFechaFin}">
<p:ajax event="dateSelect"
process="@this" />
</p:calendar>
<p:message id="fechaInicialMessage"
for="fechaInicialCalendar" />
</p:outputPanel>
<!-- Fecha Final -->
<p:outputLabel id="fechaFinalOutputLabel"
for="fechaFinalCalendar"
value="#{i18n.metaPoai_fechaFinal_label}" />
<p:outputPanel>
<p:calendar id="fechaFinalCalendar"
value="#{metaPOAIBean.entity.fechaFinal}"
showOn="button"
locale="es"
required="true"
pattern="dd/MM/yyyy"
navigator="true"
timeZone="America/Costa_Rica"
mindate="#{metaPOAIBean.calendarioFechaInicio}"
maxdate="#{metaPOAIBean.calendarioFechaFin}">
<p:ajax event="dateSelect"
process="@this" />
</p:calendar>
<p:message id="fechaFinalMessage"
for="fechaFinalCalendar" />
</p:outputPanel>