From 8171f761d3a30f69630216c45dac30fafce56e16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20Garcia=20Nu=C3=B1ez?= Date: Thu, 2 Jan 2020 16:09:41 +0100 Subject: [PATCH] =?UTF-8?q?Corregidos=20permisos=20en=20la=20modificaci?= =?UTF-8?q?=C3=B3n=20de=20visitas:=20Si=20una=20visita=20tiene=20resultado?= =?UTF-8?q?=20no=20se=20puede=20modificar=20ni=20fecha=20ni=20hora=20(ni?= =?UTF-8?q?=20pacientes=20ni=20admins).=20Si=20una=20visita=20no=20tiene?= =?UTF-8?q?=20resultado=20se=20puede=20reprogramar=20siempre.=20Si=20una?= =?UTF-8?q?=20visita=20sucede=20en=20una=20fecha=20posterior=20a=20hoy=20n?= =?UTF-8?q?o=20se=20puede=20modificar=20el=20resultado.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MyHealth/docroot/visit/UpdateVisit.xhtml | 10 ++-- .../visit/PatientVisitListMBean.java | 7 ++- .../managedbean/visit/UpdateVisitMBean.java | 57 +++++++++++-------- 3 files changed, 43 insertions(+), 31 deletions(-) diff --git a/1.sources/MyHealth/docroot/visit/UpdateVisit.xhtml b/1.sources/MyHealth/docroot/visit/UpdateVisit.xhtml index 11a9201..7b99049 100644 --- a/1.sources/MyHealth/docroot/visit/UpdateVisit.xhtml +++ b/1.sources/MyHealth/docroot/visit/UpdateVisit.xhtml @@ -37,8 +37,8 @@
- +
@@ -51,8 +51,8 @@
- +
@@ -74,7 +74,7 @@
- +
diff --git a/1.sources/MyHealth/src/managedbean/visit/PatientVisitListMBean.java b/1.sources/MyHealth/src/managedbean/visit/PatientVisitListMBean.java index 2cd5bf1..7c3cca0 100644 --- a/1.sources/MyHealth/src/managedbean/visit/PatientVisitListMBean.java +++ b/1.sources/MyHealth/src/managedbean/visit/PatientVisitListMBean.java @@ -95,8 +95,11 @@ public class PatientVisitListMBean extends ManagedBeanBase implements Serializab } public void removeVisit(Integer visitId) throws IOException { - this.getRemoteManagerVisit().removeVisit(visitId); - this.addFacesMessage(FacesMessage.SEVERITY_ERROR, "Visita eliminada", String.format("La visita con Id: %d se ha eliminado correctamente", visitId)); + if (SessionUtils.getUserType() == UserType.PATIENT) { + this.getRemoteManagerVisit().removeVisit(visitId); + this.addFacesMessage(FacesMessage.SEVERITY_INFO, "Visita eliminada", String.format("La visita con Id: %d se ha eliminado correctamente", visitId)); + } else + this.addFacesMessage(FacesMessage.SEVERITY_ERROR, "Error de autorización", "Su perfil de usuario no tiene permisos para eliminar una visita."); } public void editVisit(Integer visitId) throws IOException { diff --git a/1.sources/MyHealth/src/managedbean/visit/UpdateVisitMBean.java b/1.sources/MyHealth/src/managedbean/visit/UpdateVisitMBean.java index 28bab11..b79086e 100644 --- a/1.sources/MyHealth/src/managedbean/visit/UpdateVisitMBean.java +++ b/1.sources/MyHealth/src/managedbean/visit/UpdateVisitMBean.java @@ -14,6 +14,7 @@ import javax.inject.Named; import TO.FamilyDoctorTO; import TO.PatientTO; import TO.VisitTO; +import common.UserType; import managedbean.common.ManagedBeanBase; import managedbean.common.SessionUtils; @@ -30,7 +31,9 @@ public class UpdateVisitMBean extends ManagedBeanBase implements Serializable { private String result; private PatientTO patient; private FamilyDoctorTO familyDoctor; - private boolean onlyResult; + private boolean resultReadOnly; + private boolean readOnly; + private UserType userType; private String fromPage; public UpdateVisitMBean() { @@ -38,6 +41,12 @@ public class UpdateVisitMBean extends ManagedBeanBase implements Serializable { @PostConstruct public void init() { + this.userType = SessionUtils.getUserType(); + if (this.userType == UserType.SPECIALIST_DOCTOR) { + this.addFacesMessage(FacesMessage.SEVERITY_ERROR, "Acesso denegado", "Su perfil de usuario no está autorizado acceder a esta página."); + return; + } + FacesContext context = FacesContext.getCurrentInstance(); Map requestParams = context.getExternalContext().getRequestParameterMap(); VisitTO vi = null; @@ -65,29 +74,11 @@ public class UpdateVisitMBean extends ManagedBeanBase implements Serializable { this.addFacesMessage(FacesMessage.SEVERITY_ERROR, "Identificador de visita no válido", "No se ha podido recuperar el identificador de visita especificado. Por favor, vuelva a intentarlo seleccionando de nuevo la visita."); } - - // Si el usuario es un paciente listamos las visitas de ese paciente, si es - // admnistrador listamos todas. - switch (SessionUtils.getUserType()) { - case ADMINISTRATOR: - case PATIENT: - // Administrador y paciente pueden actualizar cualquier dato de la visita - // (excepto esl resultado) - this.onlyResult = false; - break; - case FAMILY_DOCTOR: - // El médico de familia solo puede actualizar el resultado. - this.onlyResult = true; - break; - case SPECIALIST_DOCTOR: - this.addFacesMessage(FacesMessage.SEVERITY_ERROR, "Acesso denegado", "Su perfil de usuario no está autorizado acceder a esta página."); - return; - } } public void saveData() { try { - switch (SessionUtils.getUserType()) { + switch (this.userType) { case ADMINISTRATOR: case PATIENT: // Administrador y paciente pueden actualizar la fecha y hora de la visita (excepto el resultado) @@ -179,12 +170,30 @@ public class UpdateVisitMBean extends ManagedBeanBase implements Serializable { this.id = id; } - public boolean isOnlyResult() { - return onlyResult; + public boolean isReadOnly() { + switch (this.userType) { + case ADMINISTRATOR: + case PATIENT: + // Si no tiene resultado entonces es editable. + return (this.result != null && this.result.trim().equals("") == false); + case FAMILY_DOCTOR: + case SPECIALIST_DOCTOR: + default: + // Para los medicos siempres es de solo lectura (el especialista no pdrá ni ver la página, se incluye pro completitud. + return true; + } } - public void setOnlyResult(boolean onlyResult) { - this.onlyResult = onlyResult; + // Un médico de familia siempre puede editar el resultado de una visita si la visita sucedió en el pasado, o está programada para el día de hoy + public boolean isResultReadOnly() { + if (this.userType == UserType.FAMILY_DOCTOR) + // Si la visita sucede en el futuro (a partir de mañana) el resultado no es editable. + if (this.date.isAfter(LocalDate.now())) + return true; + else + return false; + else + return true; } public String getFromPage() {