Mejora en validador de NIF, ahora comprueba duplicados sin antes de

guardar el formulario.
This commit is contained in:
Marcos Garcia Nuñez
2019-12-31 15:42:59 +01:00
parent 303b0abfa1
commit 4bb197a3c9
7 changed files with 75 additions and 58 deletions

View File

@@ -16,8 +16,12 @@ public class ValidationUtils {
static final String NIE_LETTERS = "XYZ";
public static String normalizeNIF(String nif) {
return nif.toUpperCase().replace("-", "").replace(".", "");
if (nif == null)
return nif;
else
return nif.toUpperCase().replace("-", "").replace(".", "");
}
/**
*
* @param nif NIF a validar
@@ -57,25 +61,21 @@ public class ValidationUtils {
}
/**
* Comprueba si un NIF existe para un tipo de usuario. * No se permite que el
* mismo NIF esté registrado como médico de familia y como especialista. * Se
* permite que el mismo NIF esté registrado como paciente y como médico (de
* familia o especialista)
* Comprueba si un NIF existe para un tipo de usuario. * No se permite que el mismo NIF esté registrado como médico de familia y como especialista. * Se permite que el mismo
* NIF esté registrado como paciente y como médico (de familia o especialista)
*
* @param remoteSvc Servicio Remoto para recuperar datos.
* @param userType Tipo de usuario a comprobar
* @param nif NIF a comprobar.
* @param id Parámetro opcional, id del usuario actual (si encuentra el
* mismo nif y el usuario coincide no se devuelve la
* coincidencia)
* @param id Parámetro opcional, id del usuario actual (si encuentra el mismo nif y el usuario coincide no se devuelve la coincidencia)
* @return true si el NIF ya estaba registrado para un usuario diferente.
*/
public static boolean checkIfNifAlreadyRegistered(CommonFacadeRemote remoteSvc, UserType userType, String nif, Integer id) {
boolean nifExists = false;
if (userType == null || remoteSvc == null)
return nifExists;
switch (userType) {
case ADMINISTRATOR:
break;
@@ -90,7 +90,7 @@ public class ValidationUtils {
if (sd != null && (id == null || sd.getId().equals(id) == false))
nifExists = true;
} else if (id == null || fd.getId().equals(id) == false )
} else if (id == null || fd.getId().equals(id) == false)
// Si se trata de un usuario diferente, entonces está repetido
nifExists = true;

View File

@@ -34,7 +34,6 @@ import managedbean.common.ValidationUtils;
public class RegisterUserMBean extends ManagedBeanBase implements Serializable {
private static final long serialVersionUID = 1L;
private int id;
private String cipCode;
private String nif;
private String name;
@@ -156,22 +155,12 @@ public class RegisterUserMBean extends ManagedBeanBase implements Serializable {
}
/**
* Gestióna el evento de modficación del NIF del usuario actual. Búsca si el NIF ya está en uso para otro usuario. Solo se permite que el mismo NIF se refistro como paciente y
* como médico (especialista o de familia, pero no como ambos).
* Búsca si el NIF ya está en uso para otro usuario. Solo se permite que el mismo NIF se refistro como paciente y como médico (especialista o de familia, pero no como ambos).
*
* Un Médico puede estar registrado como paciente con el mismo NIF, pero como médico de familia y especialista al mismo tiempo.
*/
public void handleNIFValueChange() {
boolean isDupe = false;
this.nif = ValidationUtils.normalizeNIF(this.nif);
if (ValidationUtils.checkIfNifAlreadyRegistered(this.getRemoteManagerCommon(), this.userType, this.nif, null) == true) {
isDupe = true;
this.addFacesMessage("frmRegisterUser:nif", FacesMessage.SEVERITY_WARN, "NIF duplicado", "El nif indicado pertenece a otro usuario previamente registrado");
}
PrimeFaces.current().ajax().addCallbackParam("NIFisDupe", isDupe);
PrimeFaces.current().ajax().addCallbackParam("formattedNIF", this.nif);
public boolean checkNIFDuplicated(String nifValue, UserType userType) {
return ValidationUtils.checkIfNifAlreadyRegistered(this.getRemoteManagerCommon(), userType, nifValue, null);
}
public boolean isPatient() {
@@ -247,7 +236,7 @@ public class RegisterUserMBean extends ManagedBeanBase implements Serializable {
*/
public void addNewUser() {
int error = 0;
this.nif = ValidationUtils.normalizeNIF(this.nif);
if (this.isFamilyDoctor() && this.primaryHealthCareCenter == null) {
@@ -263,7 +252,7 @@ public class RegisterUserMBean extends ManagedBeanBase implements Serializable {
this.addFacesMessage(FacesMessage.SEVERITY_WARN, "El NIF indicado no es válido", "Por favor, especifique un NIF válido.");
error++;
}
if (ValidationUtils.checkIfNifAlreadyRegistered(this.getRemoteManagerCommon(), this.userType, this.nif, null) == true) {
if (this.checkNIFDuplicated(this.nif, this.userType) == true) {
this.addFacesMessage("frmRegisterUser:nif", FacesMessage.SEVERITY_WARN, "NIF duplicado", "El nif indicado pertenece a otro usuario previamente registrado");
error++;
}
@@ -272,17 +261,17 @@ public class RegisterUserMBean extends ManagedBeanBase implements Serializable {
try {
switch (this.userType) {
case PATIENT:
PatientTO pat = this.getRemoteManagerProfile().registerPatient(id, nif, name, surname, password, email);
PatientTO pat = this.getRemoteManagerProfile().registerPatient(nif, name, surname, password, email);
this.cipCode = pat.getPersonalIdentificationCode();
break;
case FAMILY_DOCTOR:
FamilyDoctorTO fd = this.getRemoteManagerProfile().registerFamilyDoctor(id, nif, name, surname, password, email, this.primaryHealthCareCenter);
FamilyDoctorTO fd = this.getRemoteManagerProfile().registerFamilyDoctor(nif, name, surname, password, email, this.primaryHealthCareCenter);
this.cipCode = fd.getProfessionalNumber();
break;
case SPECIALIST_DOCTOR:
SpecialistDoctorTO sd = this.getRemoteManagerProfile().registerSpecialistDoctor(id, nif, name, surname, password, email, this.medicalSpecialty);
SpecialistDoctorTO sd = this.getRemoteManagerProfile().registerSpecialistDoctor(nif, name, surname, password, email, this.medicalSpecialty);
this.cipCode = sd.getProfessionalNumber();
break;

View File

@@ -10,8 +10,6 @@ import javax.faces.view.ViewScoped;
import javax.inject.Named;
import javax.resource.NotSupportedException;
import org.primefaces.PrimeFaces;
import TO.FamilyDoctorTO;
import TO.LoggedUserTO;
import TO.MedicalSpecialtyTO;
@@ -206,22 +204,12 @@ public class UpdateProfileMBean extends ManagedBeanBase implements Serializable
}
/**
* Gestióna el evento de modficación del NIF del usuario actual. Búsca si el NIF ya está en uso para otro usuario. Solo se permite que el mismo NIF se refistro como paciente y
* como médico (especialista o de familia, pero no como ambos).
* Búsca si el NIF ya está en uso para otro usuario. Solo se permite que el mismo NIF se refistro como paciente y como médico (especialista o de familia, pero no como ambos).
*
* Un Médico puede estar registrado como paciente con el mismo NIF, pero como médico de familia y especialista al mismo tiempo.
*/
public void handleNIFValueChange() {
boolean isDupe = false;
this.nif = ValidationUtils.normalizeNIF(this.nif);
if (ValidationUtils.checkIfNifAlreadyRegistered(this.getRemoteManagerCommon(), this.userType, this.nif, this.id) == true) {
isDupe = true;
this.addFacesMessage("frmUpdateProfile:nif", FacesMessage.SEVERITY_WARN, "NIF duplicado", "El nif indicado pertenece a otro usuario previamente registrado");
}
PrimeFaces.current().ajax().addCallbackParam("NIFisDupe", isDupe);
PrimeFaces.current().ajax().addCallbackParam("formattedNIF", this.nif);
public boolean checkNIFDuplicated(String nifValue, UserType userType, Integer userId) {
return ValidationUtils.checkIfNifAlreadyRegistered(this.getRemoteManagerCommon(), userType, nifValue, userId);
}
public List<FamilyDoctorTO> getFamilyDoctorList() {
@@ -304,12 +292,11 @@ public class UpdateProfileMBean extends ManagedBeanBase implements Serializable
}
/**
* Método que guarda los datos realizados en la modificación del perfil.
* Tiene en cuenta el tipo de usuario que está editando su perfil.
* Método que guarda los datos realizados en la modificación del perfil. Tiene en cuenta el tipo de usuario que está editando su perfil.
*
* Si el usuario es un médico de familia requiere que se seleccione un CAP para el usuario.
* Si el usuario es un médico especialista requiere que se seleccione una especialidad médica para el usuario.
* Se comprueba que el NIF especificado sea válido y no pertenezca a otro usuario registrado (ver relgas de NIF permitidos para usuarios en el método handleNIFValueChange)
* Si el usuario es un médico de familia requiere que se seleccione un CAP para el usuario. Si el usuario es un médico especialista requiere que se seleccione una especialidad
* médica para el usuario. Se comprueba que el NIF especificado sea válido y no pertenezca a otro usuario registrado (ver relgas de NIF permitidos para usuarios en el método
* handleNIFValueChange)
*
* Si se especifica una nueva contraseña, entonces se realiz un cambio de contraseña, y se requiere además: Que la nueva contraseña sea diferente a la anterior.
*
@@ -321,7 +308,7 @@ public class UpdateProfileMBean extends ManagedBeanBase implements Serializable
// Si no hay tipo de usuario, es que algo raro ha pasado (sesión caducada?). salimos.
if (this.userType == null)
return;
this.nif = ValidationUtils.normalizeNIF(this.nif);
boolean changePassword = (this.oldPassword != null && this.oldPassword.equals("") == false) || (this.password != null && this.password.equals("") == false);

View File

@@ -9,16 +9,19 @@ import javax.faces.validator.FacesValidator;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;
import org.primefaces.PrimeFaces;
import org.primefaces.validate.ClientValidator;
import managedbean.common.ValidationUtils;
import managedbean.profile.RegisterUserMBean;
import managedbean.profile.UpdateProfileMBean;
@FacesValidator("nifValidator")
public class NifValidator implements Validator<String>, ClientValidator {
public void validate(FacesContext context, UIComponent comp, String value) throws ValidatorException {
String strValue = "";
if (value != null)
strValue = String.valueOf(value);
@@ -26,8 +29,28 @@ public class NifValidator implements Validator<String>, ClientValidator {
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "El NIF no es válido", "El NIF " + strValue + " no es válido"));
strValue = ValidationUtils.normalizeNIF(strValue);
if (ValidationUtils.isValid(strValue) == false)
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "El NIF no es válido", "El NIF " + strValue + " no es válido"));
Object managedBean = comp.getValueExpression("managedBean").getValue(context.getELContext());
boolean nifIsDupe = false;
if (managedBean instanceof RegisterUserMBean) {
RegisterUserMBean ruBean = RegisterUserMBean.class.cast(managedBean);
nifIsDupe = ruBean.checkNIFDuplicated(strValue, ruBean.getUserType());
} else if (managedBean instanceof UpdateProfileMBean) {
UpdateProfileMBean upBean = UpdateProfileMBean.class.cast(managedBean);
nifIsDupe = upBean.checkNIFDuplicated(strValue, upBean.getUserType(), upBean.getId());
}
PrimeFaces.current().ajax().addCallbackParam("formattedNIF", strValue);
if (nifIsDupe == true)
throw new ValidatorException(
new FacesMessage(FacesMessage.SEVERITY_ERROR, "El NIF está duplicado", "El NIF " + strValue + " pertenece a otro usuario previamente registrado"));
PrimeFaces.current().ajax().addCallbackParam("NIFisValid", true);
}
public Map<String, Object> getMetadata() {