From 6eb1bda423247a587280c285cf2f1165b337c643 Mon Sep 17 00:00:00 2001 From: Roberto Orden Erena Date: Sun, 15 Dec 2019 19:24:41 +0100 Subject: [PATCH] QuestionTO y QuestionJPA updated --- 1.sources/MyHealth/src/TO/QuestionTO.java | 6 +- .../medicalTest/MedicalTestFacadeBean.java | 27 ++++++++- 1.sources/MyHealth/src/jpa/QuestionJPA.java | 55 ++++++++++++------ 2.database/model.mwb | Bin 12019 -> 12025 bytes 4 files changed, 65 insertions(+), 23 deletions(-) diff --git a/1.sources/MyHealth/src/TO/QuestionTO.java b/1.sources/MyHealth/src/TO/QuestionTO.java index 5fc7522..7c5cc17 100644 --- a/1.sources/MyHealth/src/TO/QuestionTO.java +++ b/1.sources/MyHealth/src/TO/QuestionTO.java @@ -4,6 +4,8 @@ import java.io.Serializable; import javax.xml.bind.annotation.XmlRootElement; +import common.QuestionStatus; + /** * * @author Roberto Orden Erena @@ -12,10 +14,6 @@ import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "Question") public class QuestionTO implements Serializable { - public static enum QuestionStatus { - ANSWERED, PENDING - } - private static final long serialVersionUID = 1L; private int id; diff --git a/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeBean.java b/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeBean.java index 1679a2e..57b005a 100644 --- a/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeBean.java +++ b/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeBean.java @@ -7,9 +7,19 @@ import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; +import TO.FamilyDoctorTO; +import TO.LoggedUserTO; import TO.MedicalSpecialtyTO; import TO.MedicalTestTO.MedicalTestType; +import TO.PatientTO; +import common.QuestionStatus; +import common.UserType; +import TO.QuestionTO; import ejb.common.CommonFacadeLocal; +import jpa.FamilyDoctorJPA; +import jpa.PatientJPA; +import jpa.QuestionJPA; +import managedbean.common.SessionUtils; /** * EJB Session Bean Class para la Practica 2, Ejercicio 1 (ISCSD) Implementa los @@ -32,7 +42,8 @@ public class MedicalTestFacadeBean implements MedicalTestFacadeRemote { @EJB CommonFacadeLocal commonServices; - // ********************************************************************* QUESTION_RESPONSE + // ********************************************************************* + // QUESTION_RESPONSE /** * Realizar una pregunta al médico por un paciente @@ -43,6 +54,17 @@ public class MedicalTestFacadeBean implements MedicalTestFacadeRemote { */ @Override public void askQuestion(int professionalNumber, String title, String message) { + if (SessionUtils.getUserType() == UserType.PATIENT) { + LoggedUserTO user = SessionUtils.getloggedOnUser(); + // 0. Conseguir el paciente en sesión + PatientTO patient = this.commonServices.findPatientById(Integer.parseInt(user.getId())); + // 1. Buscar el médico de familia con ese professionalNumber + FamilyDoctorTO fdoctor = this.commonServices.findFamilyDoctorById(professionalNumber); + // 2. Crear un objeto de Question para ese médico desde el paciente en sesión + QuestionJPA question = new QuestionJPA(0, title, message, QuestionStatus.PENDING, patient, fdoctor, null); + // 3. Guardar + entman.persist(question); + } } /** @@ -73,7 +95,8 @@ public class MedicalTestFacadeBean implements MedicalTestFacadeRemote { public void getQuestion(String question) { } - // ********************************************************************* MEDICAL_TEST + // ********************************************************************* + // MEDICAL_TEST /** * Añadir pruebas médicas a una cita diff --git a/1.sources/MyHealth/src/jpa/QuestionJPA.java b/1.sources/MyHealth/src/jpa/QuestionJPA.java index d43c22e..807e1f8 100644 --- a/1.sources/MyHealth/src/jpa/QuestionJPA.java +++ b/1.sources/MyHealth/src/jpa/QuestionJPA.java @@ -1,7 +1,6 @@ package jpa; import java.io.Serializable; -import java.util.Date; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -11,8 +10,9 @@ import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; +import TO.FamilyDoctorTO; import TO.PatientTO; -import TO.SpecialistDoctorTO; +import common.QuestionStatus; /** * @@ -26,25 +26,32 @@ public class QuestionJPA implements Serializable { private static final long serialVersionUID = 1L; @Id - @GeneratedValue(strategy=GenerationType.IDENTITY) + @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String title; private String message; - private int status; - + private QuestionStatus status; + private String response; + @ManyToOne - @JoinColumn (name="PatientId") + @JoinColumn(name = "PatientId") private PatientTO patient; + @ManyToOne + @JoinColumn(name = "FamilyDoctorId") + private FamilyDoctorTO doctor; public QuestionJPA() { } - public QuestionJPA(int id, String title, String message, int status, PatientTO patient) { + public QuestionJPA(int id, String title, String message, QuestionStatus status, PatientTO patient, + FamilyDoctorTO doctor, String response) { this.id = id; this.title = title; this.message = message; this.status = status; this.patient = patient; + this.doctor = doctor; + this.response = response; } public int getId() { @@ -71,14 +78,6 @@ public class QuestionJPA implements Serializable { this.message = message; } - public int getStatus() { - return status; - } - - public void setStatus(int status) { - this.status = status; - } - public PatientTO getPatient() { return patient; } @@ -86,7 +85,29 @@ public class QuestionJPA implements Serializable { public void setPatient(PatientTO patient) { this.patient = patient; } - - + + public QuestionStatus getStatus() { + return status; + } + + public void setStatus(QuestionStatus status) { + this.status = status; + } + + public FamilyDoctorTO getDoctor() { + return doctor; + } + + public void setDoctor(FamilyDoctorTO doctor) { + this.doctor = doctor; + } + + public String getResponse() { + return response; + } + + public void setResponse(String response) { + this.response = response; + } } diff --git a/2.database/model.mwb b/2.database/model.mwb index 4b362bd5cb9ac1879522d18763a73f444684c68d..ee53a8bc870ea6f372689806fb897f40be18d18d 100644 GIT binary patch delta 10034 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