diff --git a/1.sources/MyHealth/docroot/header.xhtml b/1.sources/MyHealth/docroot/header.xhtml
index 45a0088..2e76837 100644
--- a/1.sources/MyHealth/docroot/header.xhtml
+++ b/1.sources/MyHealth/docroot/header.xhtml
@@ -33,7 +33,7 @@
diff --git a/1.sources/MyHealth/src/ejb/systemAdmin/SystemAdminFacadeBean.java b/1.sources/MyHealth/src/ejb/systemAdmin/SystemAdminFacadeBean.java
index ea2eccf..37785f3 100644
--- a/1.sources/MyHealth/src/ejb/systemAdmin/SystemAdminFacadeBean.java
+++ b/1.sources/MyHealth/src/ejb/systemAdmin/SystemAdminFacadeBean.java
@@ -5,15 +5,15 @@ import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
+import TO.FamilyDoctorTO;
import TO.LoggedUserTO;
+import TO.PatientTO;
+import TO.SpecialistDoctorTO;
import common.Constants;
import common.HashUtils;
import common.UserType;
import ejb.common.CommonFacadeLocal;
import jpa.AdministratorJPA;
-import jpa.FamilyDoctorJPA;
-import jpa.PatientJPA;
-import jpa.SpecialistDoctorJPA;
/**
*
@@ -29,7 +29,7 @@ public class SystemAdminFacadeBean implements SystemAdminFacadeRemote {
@EJB
CommonFacadeLocal commonServices;
-
+
/**
* Si la autenticación no es correcgta devuelve null, sino devuelve un POJO con
* datos del usuario logeado.
@@ -61,20 +61,20 @@ public class SystemAdminFacadeBean implements SystemAdminFacadeRemote {
if (userCode.startsWith(Constants.PERSONAL_IDENTIFICATION_CODE_PREFIX)) {
// Si el identificador de usuario es de tipo paciente, intentamos realizar el
// login.
- PatientJPA pat = this.commonServices.findPatientByCode(userCode);
+ PatientTO pat = this.commonServices.findPatientByCode(userCode);
if (pat != null) {
usr = new LoggedUserTO(String.valueOf(pat.getId()), pat.getName(), pat.getPassword(), UserType.PATIENT);
}
} else if (userCode.startsWith(Constants.PROFESSIONAL_NUMBER_PREFIX)) {
// Si el identificador de usuario es de tipo profesional, intentamos realizar el
// login, primero como médico de familia, después como especialista
- FamilyDoctorJPA fd = this.commonServices.findFamilyDoctorByCode(userCode);
+ FamilyDoctorTO fd = this.commonServices.findFamilyDoctorByCode(userCode);
if (fd != null) {
usr = new LoggedUserTO(String.valueOf(fd.getId()), fd.getName(), fd.getPassword(), UserType.FAMILY_DOCTOR);
} else {
// No era un código de médico de familia, intenamos logearlo como especialista
- SpecialistDoctorJPA sd = this.commonServices.findSpecialistDoctorByCode(userCode);
+ SpecialistDoctorTO sd = this.commonServices.findSpecialistDoctorByCode(userCode);
if (sd != null) {
usr = new LoggedUserTO(String.valueOf(sd.getId()), sd.getName(), sd.getPassword(), UserType.SPECIALIST_DOCTOR);
diff --git a/1.sources/MyHealth/src/managedbean/common/ManagedBeanBase.java b/1.sources/MyHealth/src/managedbean/common/ManagedBeanBase.java
index 1e742e3..74ac0dd 100644
--- a/1.sources/MyHealth/src/managedbean/common/ManagedBeanBase.java
+++ b/1.sources/MyHealth/src/managedbean/common/ManagedBeanBase.java
@@ -95,25 +95,29 @@ public class ManagedBeanBase {
protected void addFacesMessageKeep(FacesMessage.Severity severity, String summary, String detail) {
FacesContext context = FacesContext.getCurrentInstance();
- this.addFacesMessage(FacesContext.getCurrentInstance(), severity, summary, detail);
+ this.addFacesMessage(FacesContext.getCurrentInstance(), null, severity, summary, detail);
context.getExternalContext().getFlash().setKeepMessages(true);
}
protected void addFacesMessage(FacesMessage.Severity severity, String summary, String detail) {
- this.addFacesMessage(FacesContext.getCurrentInstance(), severity, summary, detail);
+ this.addFacesMessage(FacesContext.getCurrentInstance(), null, severity, summary, detail);
+ }
+
+ protected void addFacesMessage(String clientId, FacesMessage.Severity severity, String summary, String detail) {
+ this.addFacesMessage(FacesContext.getCurrentInstance(), clientId, severity, summary, detail);
}
- protected void addFacesMessage(FacesContext context, FacesMessage.Severity severity, String summary, String detail) {
- this.addFacesMessage(context, new FacesMessage(severity, summary, detail));
+ protected void addFacesMessage(FacesContext context, String clientId, FacesMessage.Severity severity, String summary, String detail) {
+ this.addFacesMessage(context, clientId, new FacesMessage(severity, summary, detail));
}
- protected void addFacesMessage(FacesMessage facesMsg) {
- this.addFacesMessage(FacesContext.getCurrentInstance(), facesMsg);
+ protected void addFacesMessage(FacesMessage facesMsg, String clientId) {
+ this.addFacesMessage(FacesContext.getCurrentInstance(), clientId, facesMsg);
}
- protected void addFacesMessage(FacesContext context, FacesMessage facesMsg) {
- context.addMessage(null, facesMsg);
+ protected void addFacesMessage(FacesContext context, String clientId, FacesMessage facesMsg) {
+ context.addMessage(clientId, facesMsg);
}
protected void manageException(Exception ex) {
diff --git a/1.sources/MyHealth/src/managedbean/common/ValidationUtils.java b/1.sources/MyHealth/src/managedbean/common/ValidationUtils.java
index f011bc3..d147b8e 100644
--- a/1.sources/MyHealth/src/managedbean/common/ValidationUtils.java
+++ b/1.sources/MyHealth/src/managedbean/common/ValidationUtils.java
@@ -1,5 +1,11 @@
package managedbean.common;
+import TO.FamilyDoctorTO;
+import TO.PatientTO;
+import TO.SpecialistDoctorTO;
+import common.UserType;
+import ejb.common.CommonFacadeRemote;
+
/***
*
* @author Marcos García Núñez (mgarcianun@uoc.edu)
@@ -47,4 +53,51 @@ public class ValidationUtils {
return false;
}
+ /**
+ * 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)
+ * @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;
+
+ switch (userType) {
+ case ADMINISTRATOR:
+ break;
+ case FAMILY_DOCTOR:
+ case SPECIALIST_DOCTOR:
+ FamilyDoctorTO fd = remoteSvc.findFamilyDoctorByNif(nif);
+
+ if (fd == null) {
+ // Si el nif no está en uso para un médico de familia, reivsamos si está en uso
+ // para los especialistas
+ SpecialistDoctorTO sd = remoteSvc.findSpecialistDoctorByNif(nif);
+
+ if (sd != null && (id == null || fd.getId() != id))
+ nifExists = true;
+ } else if (id == null || fd.getId() != id)
+ // Si se trata de un usuario diferente, entonces está repetido
+ nifExists = true;
+
+ break;
+ case PATIENT:
+ PatientTO pat = remoteSvc.findPatientByNif(nif);
+
+ // Si se trata de un usuario diferente, entonces está repetido
+ if (pat != null && (id == null || pat.getId() != id))
+ nifExists = true;
+ break;
+ }
+
+ return nifExists;
+ }
}
diff --git a/1.sources/MyHealth/src/managedbean/common/homeMBean.java b/1.sources/MyHealth/src/managedbean/common/homeMBean.java
index 9e3edcc..89a2b55 100644
--- a/1.sources/MyHealth/src/managedbean/common/homeMBean.java
+++ b/1.sources/MyHealth/src/managedbean/common/homeMBean.java
@@ -36,7 +36,7 @@ public class homeMBean extends ManagedBeanBase implements Serializable {
FacesMessage message = SessionUtils.getMessage();
if (message != null) {
- this.addFacesMessage(message);
+ this.addFacesMessage(message, null);
}
}
diff --git a/1.sources/MyHealth/src/managedbean/profile/RegisterUserMBean.java b/1.sources/MyHealth/src/managedbean/profile/RegisterUserMBean.java
index d53a778..60896c1 100644
--- a/1.sources/MyHealth/src/managedbean/profile/RegisterUserMBean.java
+++ b/1.sources/MyHealth/src/managedbean/profile/RegisterUserMBean.java
@@ -127,6 +127,11 @@ public class RegisterUserMBean extends ManagedBeanBase implements Serializable {
}
return this.medicalSpecialitiesList;
}
+
+ public void hadleNIFValueChange() {
+ if (ValidationUtils.checkIfNifAlreadyRegistered(this.getRemoteManagerCommon(), this.userType, this.nif, null) == true)
+ this.addFacesMessage("frmRegisterUser:nif", FacesMessage.SEVERITY_WARN, "NIF duplicado", "El nif indicado pertenece a otro usuario previamente registrado");
+ }
public boolean isPatient() {
return (this.userType == UserType.PATIENT);
@@ -199,6 +204,10 @@ 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) {
+ this.addFacesMessage("frmRegisterUser:nif", FacesMessage.SEVERITY_WARN, "NIF duplicado", "El nif indicado pertenece a otro usuario previamente registrado");
+ error++;
+ }
if (error == 0) {
try {
diff --git a/1.sources/MyHealth/src/managedbean/profile/UpdateProfileMBean.java b/1.sources/MyHealth/src/managedbean/profile/UpdateProfileMBean.java
index 9199d59..3434842 100644
--- a/1.sources/MyHealth/src/managedbean/profile/UpdateProfileMBean.java
+++ b/1.sources/MyHealth/src/managedbean/profile/UpdateProfileMBean.java
@@ -172,6 +172,11 @@ public class UpdateProfileMBean extends ManagedBeanBase implements Serializable
return this.medicalSpecialitiesList;
}
+ public void hadleNIFValueChange() {
+ if (ValidationUtils.checkIfNifAlreadyRegistered(this.getRemoteManagerCommon(), this.userType, this.nif, this.id) == true)
+ this.addFacesMessage("frmUpdateProfile:nif", FacesMessage.SEVERITY_WARN, "NIF duplicado", "El nif indicado pertenece a otro usuario previamente registrado");
+ }
+
public List
getFamilyDoctorList() {
return familyDoctorList;
}
@@ -261,6 +266,10 @@ public class UpdateProfileMBean 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, this.id) == true) {
+ this.addFacesMessage("frmUpdateProfile:nif", FacesMessage.SEVERITY_WARN, "NIF duplicado", "El nif indicado pertenece a otro usuario previamente registrado");
+ error++;
+ }
if (changePassword == true) {
// el usuario queire cambiar el password Comprobamos que el password
// especificado coincide con el guardado