Corregidos permisos en la modificación de visitas:

Si una visita tiene resultado no se puede modificar ni fecha ni hora (ni
pacientes ni admins).
Si una visita no tiene resultado se puede reprogramar siempre.
Si una visita sucede en una fecha posterior a hoy no se puede modificar
el resultado.
This commit is contained in:
Marcos Garcia Nuñez
2020-01-02 16:09:41 +01:00
parent 423ab38a51
commit 8171f761d3
3 changed files with 43 additions and 31 deletions

View File

@@ -37,8 +37,8 @@
</div>
<div class="ui-g-2">
<div class="ui-inputgroup">
<p:datePicker id="fecha" value="#{UpdateVisit.date}" pattern="dd/MM/yyyy" locale="es" disabled="#{UpdateVisit.onlyResult}" showIcon="true" showButtonBar="true" autocomplete="true" required="true"
requiredMessage="Especifique la fecha de la visita." readonly="#{UpdateVisit.onlyResult}">
<p:datePicker id="fecha" value="#{UpdateVisit.date}" pattern="dd/MM/yyyy" locale="es" disabled="#{UpdateVisit.readOnly}" showIcon="true" showButtonBar="true" autocomplete="true" required="true"
requiredMessage="Especifique la fecha de la visita." readonly="#{UpdateVisit.readOnly}">
<f:convertDateTime type="localDate" pattern="dd/MM/yyyy" timeStyle="short" />
</p:datePicker>
</div>
@@ -51,8 +51,8 @@
<p:outputLabel for="hora" value="Hora:" />
</div>
<div class="ui-g-2">
<p:datePicker id="hora" value="#{UpdateVisit.time}" timeOnly="true" pattern="HH:mm" locale="es" disabled="#{UpdateVisit.onlyResult}" showIcon="true" showButtonBar="true" autocomplete="true" required="true"
requiredMessage="Especifique la hora de la visita." readonly="#{UpdateVisit.onlyResult}">
<p:datePicker id="hora" value="#{UpdateVisit.time}" timeOnly="true" pattern="HH:mm" locale="es" disabled="#{UpdateVisit.readOnly}" showIcon="true" showButtonBar="true"
autocomplete="true" required="true" requiredMessage="Especifique la hora de la visita." readonly="#{UpdateVisit.readOnly}">
<f:convertDateTime type="localTime" pattern="HH:mm" timeStyle="Short" />
</p:datePicker>
</div>
@@ -74,7 +74,7 @@
<p:outputLabel for="resultado" value="Resultado:" />
</div>
<div class="ui-g-8">
<p:inputTextarea id="resultado" value="#{UpdateVisit.result}" readonly="#{not UpdateVisit.onlyResult}" />
<p:inputTextarea id="resultado" value="#{UpdateVisit.result}" readonly="#{UpdateVisit.resultReadOnly}" />
</div>
<div class="ui-g-2">
<p:message for="resultado" display="text" />

View File

@@ -95,8 +95,11 @@ public class PatientVisitListMBean extends ManagedBeanBase implements Serializab
}
public void removeVisit(Integer visitId) throws IOException {
if (SessionUtils.getUserType() == UserType.PATIENT) {
this.getRemoteManagerVisit().removeVisit(visitId);
this.addFacesMessage(FacesMessage.SEVERITY_ERROR, "Visita eliminada", String.format("La visita con Id: %d se ha eliminado correctamente", 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 {

View File

@@ -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<String, String> 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() {