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