From af0a2cf98c89f3ecd096934f7f57fb1dad33bff0 Mon Sep 17 00:00:00 2001 From: Roberto Orden Erena Date: Sat, 28 Dec 2019 13:23:00 +0100 Subject: [PATCH 1/8] Issue #40 corregida. --- .../medicalTest/MedicalTestFacadeBean.java | 63 ++++++++++++------- .../medicalTest/MedicalTestFacadeRemote.java | 2 +- .../medicalTest/QuestionsMBean.java | 13 ++-- 3 files changed, 52 insertions(+), 26 deletions(-) diff --git a/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeBean.java b/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeBean.java index dfd8911..4567047 100644 --- a/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeBean.java +++ b/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeBean.java @@ -20,10 +20,12 @@ import jpa.QuestionJPA; import jpa.SpecialistDoctorJPA; /** - * EJB Session Bean Class para la Practica 2, Ejercicio 1 (ISCSD) Implementa los métodos de la capa de negocio que implementan la logica de negocio y la interacción con la capa de - * persistencia. + * EJB Session Bean Class para la Practica 2, Ejercicio 1 (ISCSD) Implementa los + * métodos de la capa de negocio que implementan la logica de negocio y la + * interacción con la capa de persistencia. * - * Tanto los pacientes como los médicos deben acceder a la vista de pruebas médicas. + * Tanto los pacientes como los médicos deben acceder a la vista de pruebas + * médicas. * * @author rorden * @@ -47,18 +49,28 @@ public class MedicalTestFacadeBean implements MedicalTestFacadeRemote { * @param title * @param message */ - public void askQuestion(int userId, String title, String message) { - QuestionJPA qjpa = new QuestionJPA(); - qjpa.setId(0); - qjpa.setTitle(title); - qjpa.setMessage(message); - qjpa.setStatus(QuestionStatus.PENDING); + public String askQuestion(int userId, String title, String message) { PatientJPA pat = entman.find(PatientJPA.class, userId); - qjpa.setPatient(pat); - qjpa.setFamilyDoctor(pat.getFamilyDoctor()); - entman.persist(qjpa); + if (pat.getFamilyDoctor() != null) { + + QuestionJPA qjpa = new QuestionJPA(); + qjpa.setId(0); + qjpa.setTitle(title); + qjpa.setMessage(message); + qjpa.setStatus(QuestionStatus.PENDING); + + qjpa.setPatient(pat); + qjpa.setFamilyDoctor(pat.getFamilyDoctor()); + + entman.persist(qjpa); + + return "ok"; + + } else { + return "No tienes médico de familia elegido, por favor acude a la sección 'Gestionar Perfil' -> 'Cambiar médico de familia'"; + } } /** @@ -80,7 +92,9 @@ public class MedicalTestFacadeBean implements MedicalTestFacadeRemote { // TypedQuery query = entman.createQuery("SELECT q from QuestionJPA // q where q.status=:status and q.familyDoctor.id=:docId order by q.title", // QuestionJPA.class); - TypedQuery query = entman.createQuery("SELECT q from QuestionJPA q where q.familyDoctor.id=:docId order by q.status desc, q.title asc", QuestionJPA.class); + TypedQuery query = entman.createQuery( + "SELECT q from QuestionJPA q where q.familyDoctor.id=:docId order by q.status desc, q.title asc", + QuestionJPA.class); // query.setParameter("status", QuestionStatus.PENDING); query.setParameter("docId", familyDoctorId); @@ -99,7 +113,9 @@ public class MedicalTestFacadeBean implements MedicalTestFacadeRemote { // TypedQuery query = entman.createQuery("SELECT q from QuestionJPA // q where q.status=:status and q.familyDoctor.id=:docId order by q.title", // QuestionJPA.class); - TypedQuery query = entman.createQuery("SELECT q from QuestionJPA q where q.patient.id=:patientId order by q.status desc, q.title asc", QuestionJPA.class); + TypedQuery query = entman.createQuery( + "SELECT q from QuestionJPA q where q.patient.id=:patientId order by q.status desc, q.title asc", + QuestionJPA.class); // query.setParameter("status", QuestionStatus.PENDING); query.setParameter("patientId", userId); @@ -120,7 +136,8 @@ public class MedicalTestFacadeBean implements MedicalTestFacadeRemote { public QuestionTO getQuestion(int idQuestion) { QuestionTO resp = new QuestionTO(); - TypedQuery query = entman.createQuery("SELECT q from QuestionJPA q where q.id=:idquestion", QuestionJPA.class); + TypedQuery query = entman.createQuery("SELECT q from QuestionJPA q where q.id=:idquestion", + QuestionJPA.class); query.setParameter("idquestion", idQuestion); @@ -140,7 +157,8 @@ public class MedicalTestFacadeBean implements MedicalTestFacadeRemote { * @param idMedicalTest * @param date * @param time - * @param testType Pudiera llegar a ser: Análisis de sangre, resonancias magnéticas y TAC + * @param testType Pudiera llegar a ser: Análisis de sangre, resonancias + * magnéticas y TAC * @param observations */ public void addMedicalTest(int idMedicalTest, Date date, long time, MedicalTestType testType, String observations) { @@ -183,29 +201,32 @@ public class MedicalTestFacadeBean implements MedicalTestFacadeRemote { } public Long getSpecialistDoctorByMedicalSpecialityCount(int specialityId) { - TypedQuery query = entman.createQuery("SELECT count(1) from SpecialistDoctorJPA q where q.medicalSpecialty.id=:specId", Long.class); + TypedQuery query = entman.createQuery( + "SELECT count(1) from SpecialistDoctorJPA q where q.medicalSpecialty.id=:specId", Long.class); query.setParameter("specId", specialityId); return query.getSingleResult(); } - + /** * Listar médicos con una especialidad concreta * * @param speciality */ - public List findSpecialistDoctorByMedicalSpeciality(int specialityId, int pageNumber, int pageSize) { + public List findSpecialistDoctorByMedicalSpeciality(int specialityId, int pageNumber, + int pageSize) { List pendingQuestions = new ArrayList(); TypedQuery query = entman.createQuery( - "SELECT q from SpecialistDoctorJPA q where q.medicalSpecialty.id=:specId order by q.medicalSpecialty.name asc, q.surname asc", SpecialistDoctorJPA.class); + "SELECT q from SpecialistDoctorJPA q where q.medicalSpecialty.id=:specId order by q.medicalSpecialty.name asc, q.surname asc", + SpecialistDoctorJPA.class); query.setParameter("specId", specialityId); if (pageSize > 0) { query.setFirstResult(pageNumber * pageSize); query.setMaxResults(pageSize); } - + List allJPA = query.getResultList(); for (SpecialistDoctorJPA item : allJPA) { diff --git a/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeRemote.java b/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeRemote.java index 0bde678..8cef72e 100644 --- a/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeRemote.java +++ b/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeRemote.java @@ -28,7 +28,7 @@ public interface MedicalTestFacadeRemote { * @param title * @param message */ - public void askQuestion(int userID, String title, String message); + public String askQuestion(int userID, String title, String message); /** * El médico responde a una pregunta diff --git a/1.sources/MyHealth/src/managedbean/medicalTest/QuestionsMBean.java b/1.sources/MyHealth/src/managedbean/medicalTest/QuestionsMBean.java index d8a3a3b..1497118 100644 --- a/1.sources/MyHealth/src/managedbean/medicalTest/QuestionsMBean.java +++ b/1.sources/MyHealth/src/managedbean/medicalTest/QuestionsMBean.java @@ -100,10 +100,15 @@ public class QuestionsMBean extends ManagedBeanBase implements Serializable { } public void addNewQuestion() { - getRemoteManagerMedicalTest().askQuestion(userID, this.selected.getTitle(), this.selected.getMessage()); - this.create(); - this.loadQuestions(); - this.addFacesMessage(FacesMessage.SEVERITY_INFO, "Datos guardados", "La pregunta se registrado correctamente en el sistema."); + String result = getRemoteManagerMedicalTest().askQuestion(userID, this.selected.getTitle(), this.selected.getMessage()); + if(result == "ok") { + this.create(); + this.loadQuestions(); + this.addFacesMessage(FacesMessage.SEVERITY_INFO, "Datos guardados", "La pregunta se registrado correctamente en el sistema."); + } else { + this.addFacesMessage(FacesMessage.SEVERITY_ERROR, "Error", result); + } + } public boolean isShowPanelDetail() { From be08aaff6e293a2eb7443d592bb545c09ac29261 Mon Sep 17 00:00:00 2001 From: Roberto Orden Erena Date: Sat, 28 Dec 2019 22:59:26 +0100 Subject: [PATCH 2/8] =?UTF-8?q?Peque=C3=B1as=20correcciones=20en=20SQL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 2.database/01.CreateTables.sql | 2 +- 2.database/02.Datos_prueba.sql | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/2.database/01.CreateTables.sql b/2.database/01.CreateTables.sql index 7d66c74..3c62cd8 100644 --- a/2.database/01.CreateTables.sql +++ b/2.database/01.CreateTables.sql @@ -201,7 +201,7 @@ CREATE TABLE myhealth.medicaltest "time" TIME NOT NULL, observations TEXT COLLATE pg_catalog."default", highresimage TEXT, - type VARCHAR(30) NOT NULL, + type VARCHAR(50) NOT NULL, patientid INTEGER REFERENCES myhealth.patient(id) NOT NULL, specialistdoctorid INTEGER REFERENCES myhealth.specialistdoctor(id) NOT NULL, CONSTRAINT medicaltest_pkey PRIMARY KEY (id) diff --git a/2.database/02.Datos_prueba.sql b/2.database/02.Datos_prueba.sql index 6776088..e3349ec 100644 --- a/2.database/02.Datos_prueba.sql +++ b/2.database/02.Datos_prueba.sql @@ -459,13 +459,13 @@ INSERT INTO myhealth.visit(date, "time", observations, result, patientid, family -- Insertar datos de prueba para medical test INSERT INTO myhealth.medicaltest(date, "time", observations, highresimage, type, patientid, specialistdoctorid) VALUES -('2019-12-23','09:00:00','Observaciones del medical test1','somehighresimage1', 'Radiografía Tórax', 1, 1), -('2019-12-24','19:20:00','Observaciones del medical test2','somehighresimage2', 'TAC Craneal', 2, 1), -('2019-12-25','18:35:20','Observaciones del medical test3','somehighresimage3', 'Radiografía Cadera', 3, 2), -('2019-12-26','08:15:10','Observaciones del medical test4','somehighresimage4', 'TAC Rodilla', 4, 2), -('2019-12-27','18:15:10','Observaciones del medical test5','somehighresimage5', 'TAC Pie Izquierdo', 5, 1), -('2019-12-28','22:15:40','Observaciones del medical test6','somehighresimage6', 'Radiografía Tórax', 6, 3), -('2019-12-28','23:15:40','Observaciones del medical test7','somehighresimage7', 'Radiografía Tibia', 7, 1), -('2019-12-29','11:12:20','Observaciones del medical test8','somehighresimage8', 'TAC Craneal', 8, 1), -('2019-12-30','13:17:50','Observaciones del medical test9','somehighresimage9', 'Radiografía Cadera', 2, 2), -('2019-12-31','05:08:30','Observaciones del medical test10','somehighresimage10', 'Radiografía rodilla', 4, 1); +('2019-12-23','09:00:00','Observaciones del medical test1','somehighresimage1', 'MAGNETIC_RESONANCE_IMAGING', 1, 1), +('2019-12-24','19:20:00','Observaciones del medical test2','somehighresimage2', 'CT_SCAN', 1, 1), +('2019-12-25','18:35:20','Observaciones del medical test3','somehighresimage3', 'BLOOD_TEST', 1, 1), +('2019-12-26','08:15:10','Observaciones del medical test4','somehighresimage4', 'CT_SCAN', 4, 2), +('2019-12-27','18:15:10','Observaciones del medical test5','somehighresimage5', 'CT_SCAN', 5, 1), +('2019-12-28','22:15:40','Observaciones del medical test6','somehighresimage6', 'MAGNETIC_RESONANCE_IMAGING', 6, 3), +('2019-12-28','23:15:40','Observaciones del medical test7','somehighresimage7', 'MAGNETIC_RESONANCE_IMAGING', 7, 1), +('2019-12-29','11:12:20','Observaciones del medical test8','somehighresimage8', 'CT_SCAN', 8, 1), +('2019-12-30','13:17:50','Observaciones del medical test9','somehighresimage9', 'MAGNETIC_RESONANCE_IMAGING', 2, 2), +('2019-12-31','05:08:30','Observaciones del medical test10','somehighresimage10', 'MAGNETIC_RESONANCE_IMAGING', 4, 1); From 2e0cc8bf36675908df198b02d9a022f2778dd314 Mon Sep 17 00:00:00 2001 From: Roberto Orden Erena Date: Sat, 28 Dec 2019 22:59:55 +0100 Subject: [PATCH 3/8] =?UTF-8?q?Ver=20pruebas=20m=C3=A9dicas=20casi=20funci?= =?UTF-8?q?onando=20al=20completo:=20falta=20cargar=20imagen=20real=20Crea?= =?UTF-8?q?r=20prueba=20medica:=20formulario=20comenzado.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../docroot/medicaltest/MedicalTests.xhtml | 131 +++++++---- 1.sources/MyHealth/src/TO/MedicalTestTO.java | 31 ++- .../src/ejb/common/CommonFacadeBean.java | 219 ++++++++++++------ .../src/ejb/common/CommonFacadeLocal.java | 4 + .../medicalTest/MedicalTestFacadeBean.java | 159 ++++++++++++- .../medicalTest/MedicalTestFacadeRemote.java | 22 +- .../MyHealth/src/jpa/MedicalTestJPA.java | 9 +- .../medicalTest/MedicalTestMBean.java | 183 ++++++++++++++- 8 files changed, 619 insertions(+), 139 deletions(-) diff --git a/1.sources/MyHealth/docroot/medicaltest/MedicalTests.xhtml b/1.sources/MyHealth/docroot/medicaltest/MedicalTests.xhtml index 16b990f..3e298f0 100644 --- a/1.sources/MyHealth/docroot/medicaltest/MedicalTests.xhtml +++ b/1.sources/MyHealth/docroot/medicaltest/MedicalTests.xhtml @@ -1,59 +1,92 @@ - + - - - -
- -
- -
-
- -
-
- -
- -
- -
-
- -
-
- -
- -
- -
-
- -
-
- -
- -
-
-
- -
-
- -
-
-
+ + +
+
+ + + + + + + + + + + + + + + + +
+ +
+
+
- +
+ +
+
Fecha:
+
+ +
+
Hora:
+
+ +
+
Observaciones:
+
+ +
+
Tipo de prueba:
+
+ +
+
Imagen de alta resolución:
+
+ +
+
+
+ +
+
Fecha:
+
+ +
+
Hora:
+
+ +
+
Observaciones:
+
+ +
+
Tipo de prueba:
+
+ + + +
+
+
+
+
- + \ No newline at end of file diff --git a/1.sources/MyHealth/src/TO/MedicalTestTO.java b/1.sources/MyHealth/src/TO/MedicalTestTO.java index 79f8e21..add4ed5 100644 --- a/1.sources/MyHealth/src/TO/MedicalTestTO.java +++ b/1.sources/MyHealth/src/TO/MedicalTestTO.java @@ -1,7 +1,11 @@ package TO; import java.io.Serializable; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.time.LocalTime; import java.util.Date; +import java.util.Locale; import javax.xml.bind.annotation.XmlRootElement; @@ -19,7 +23,7 @@ public class MedicalTestTO implements Serializable { private int id; private Date date; - private long time; + private LocalTime time; private String observations; private String highresimage; private MedicalTestType type; @@ -27,7 +31,15 @@ public class MedicalTestTO implements Serializable { private SpecialistDoctorTO specialistDoctor; - public MedicalTestTO(int id, Date date, int time, String observations, String highresimage, MedicalTestType type, + public MedicalTestTO() { + super(); + this.date = new Date(); + this.time = LocalTime.now(); + this.patient = new PatientTO(); + this.specialistDoctor = new SpecialistDoctorTO(); + } + + public MedicalTestTO(int id, Date date, LocalTime time, String observations, String highresimage, MedicalTestType type, PatientTO patiend, SpecialistDoctorTO specialistDoctor) { this.setId(id); this.setDate(date); @@ -55,11 +67,11 @@ public class MedicalTestTO implements Serializable { this.date = date; } - public long getTime() { + public LocalTime getTime() { return time; } - public void setTime(long time) { + public void setTime(LocalTime time) { this.time = time; } @@ -102,5 +114,16 @@ public class MedicalTestTO implements Serializable { public void setSpecialistDoctor(SpecialistDoctorTO specialistDoctor) { this.specialistDoctor = specialistDoctor; } + + @Override + public String toString() { + return Integer.toString(this.getId()); + } + + public String getOnlyDate() { + DateFormat df = DateFormat.getDateInstance(DateFormat.DATE_FIELD, new Locale("es", "ES")); + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); + return sdf.format(this.getDate()); + } } diff --git a/1.sources/MyHealth/src/ejb/common/CommonFacadeBean.java b/1.sources/MyHealth/src/ejb/common/CommonFacadeBean.java index 80c1a8e..d5c0ede 100644 --- a/1.sources/MyHealth/src/ejb/common/CommonFacadeBean.java +++ b/1.sources/MyHealth/src/ejb/common/CommonFacadeBean.java @@ -10,6 +10,7 @@ import javax.persistence.TypedQuery; import TO.FamilyDoctorTO; import TO.MedicalSpecialtyTO; +import TO.MedicalTestTO; import TO.PatientTO; import TO.PrimaryHealthCareCenterTO; import TO.QuestionTO; @@ -18,6 +19,7 @@ import TO.VisitTO; import common.Utils; import jpa.FamilyDoctorJPA; import jpa.MedicalSpecialtyJPA; +import jpa.MedicalTestJPA; import jpa.PatientJPA; import jpa.PrimaryHealthCareCenterJPA; import jpa.QuestionJPA; @@ -36,7 +38,8 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { private EntityManager entman; /** - * Metodo que devuelve todas las especialidades medicas registradas en el sistema + * Metodo que devuelve todas las especialidades medicas registradas en el + * sistema * * @return Devuelve una Lista de MedicalSpecialtyTO (Transfer Objects). */ @@ -47,9 +50,11 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { /** * Metodo que devuelve las especialidades médicas de forma paginada * - * Acepta como parametro la página (comenzando en 0) y el número de elementos de cada página. + * Acepta como parametro la página (comenzando en 0) y el número de elementos de + * cada página. * - * si pageSize == 0, entonces se devuelven todas las especialidades registradas (Se ignora el parámetro). + * si pageSize == 0, entonces se devuelven todas las especialidades registradas + * (Se ignora el parámetro). * * @return Devuelve una Lista de MedicalSpecialtyTO (Transfer Objects). */ @@ -58,12 +63,15 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { } /** - * Método que devuelve una lista de espcialidades médicas que tienen una coincidencia parcial en el nombre o en la descripción con el termino de búsqueda (searchTerm) - * especificado. + * Método que devuelve una lista de espcialidades médicas que tienen una + * coincidencia parcial en el nombre o en la descripción con el termino de + * búsqueda (searchTerm) especificado. * - * Además permite la paginacción de datos. Si pageSize == 0 no se realiza paginación y se devuelven todos los resultados. + * Además permite la paginacción de datos. Si pageSize == 0 no se realiza + * paginación y se devuelven todos los resultados. * - * Si serachTerm es nulo o cadena vacía entonces no se tiene en cuenta el parámetro y devuelven todas las especialidades existentes. + * Si serachTerm es nulo o cadena vacía entonces no se tiene en cuenta el + * parámetro y devuelven todas las especialidades existentes. * * @return Devuelve una Lista de MedicalSpecialtyTO (Transfer Objects). */ @@ -79,7 +87,8 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { strFilter = "WHERE lower(ms.name) LIKE :searchTerm OR lower(ms.description) LIKE :searchTerm"; } - TypedQuery query = entman.createQuery(String.format(strQuery, strFilter), MedicalSpecialtyJPA.class); + TypedQuery query = entman.createQuery(String.format(strQuery, strFilter), + MedicalSpecialtyJPA.class); if (searchTerm.length() > 0) query.setParameter("searchTerm", "%" + searchTerm + "%"); @@ -109,9 +118,11 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { } /** - * Método que devuelve una lista de CAPs (Centros de Atención Primarios) de forma paginada + * Método que devuelve una lista de CAPs (Centros de Atención Primarios) de + * forma paginada * - * Si pageSize == 0 no se realiza paginación y se devuelven todos los resultados. + * Si pageSize == 0 no se realiza paginación y se devuelven todos los + * resultados. * * @return Devuelve una Lista de MedicalSpecialtyTO (Transfer Objects). */ @@ -120,12 +131,15 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { } /** - * Método que devuelve una lista de CAPs (Centros de Atención Primarios) que tienen una coincidencia parcial en el nombre o en la localización con el termino de búsqueda - * (searchTerm) especificado. + * Método que devuelve una lista de CAPs (Centros de Atención Primarios) que + * tienen una coincidencia parcial en el nombre o en la localización con el + * termino de búsqueda (searchTerm) especificado. * - * Además permite la paginacción de datos. Si pageSize == 0 no se realiza paginación y se devuelven todos los resultados. + * Además permite la paginacción de datos. Si pageSize == 0 no se realiza + * paginación y se devuelven todos los resultados. * - * Si serachTerm es nulo o cadena vacía entonces no se tiene en cuenta el parámetro y devuelven todos los CAPs existentes. + * Si serachTerm es nulo o cadena vacía entonces no se tiene en cuenta el + * parámetro y devuelven todos los CAPs existentes. * * @return Devuelve una Lista de PrimaryHealthCareCenterTO (Transfer Objects). */ @@ -141,7 +155,8 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { strFilter = "WHERE lower(phc.name) LIKE :searchTerm OR lower(phc.location) LIKE :searchTerm"; } - TypedQuery query = entman.createQuery(String.format(strQuery, strFilter), PrimaryHealthCareCenterJPA.class); + TypedQuery query = entman.createQuery(String.format(strQuery, strFilter), + PrimaryHealthCareCenterJPA.class); if (searchTerm.length() > 0) query.setParameter("searchTerm", "%" + searchTerm + "%"); @@ -162,7 +177,8 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { } /** - * Método que devuelve una lista con todos los médicos de familia registrados en el sistema. + * Método que devuelve una lista con todos los médicos de familia registrados en + * el sistema. * * @return Devuelve una Lista de FamilyDoctorTO (Transfer Objects). */ @@ -171,9 +187,11 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { } /** - * Método que devuelve una lista con todos los médicos de familia registrados en el sistema de forma paginada. + * Método que devuelve una lista con todos los médicos de familia registrados en + * el sistema de forma paginada. * - * Si pageSize == 0 no se realiza paginación y se devuelven todos los resultados. + * Si pageSize == 0 no se realiza paginación y se devuelven todos los + * resultados. * * @return Devuelve una Lista de FamilyDoctorTO (Transfer Objects). */ @@ -182,11 +200,15 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { } /** - * Método que devuelve una lista de médicos de familia que tienen una coincidencia parcial en el nombre o en los apellidos con el termino de búsqueda (searchTerm) especificado. + * Método que devuelve una lista de médicos de familia que tienen una + * coincidencia parcial en el nombre o en los apellidos con el termino de + * búsqueda (searchTerm) especificado. * - * Además permite la paginacción de datos. Si pageSize == 0 no se realiza paginación y se devuelven todos los resultados. + * Además permite la paginacción de datos. Si pageSize == 0 no se realiza + * paginación y se devuelven todos los resultados. * - * Si serachTerm es nulo o cadena vacía entonces no se tiene en cuenta el parámetro y devuelven todos los registros existentes. + * Si serachTerm es nulo o cadena vacía entonces no se tiene en cuenta el + * parámetro y devuelven todos los registros existentes. * * @return Devuelve una Lista de FamilyDoctorTO (Transfer Objects). */ @@ -202,7 +224,8 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { strFilter = "WHERE lower(fd.name) LIKE :searchTerm OR lower(fd.surname) LIKE :searchTerm"; } - TypedQuery query = entman.createQuery(String.format(strQuery, strFilter), FamilyDoctorJPA.class); + TypedQuery query = entman.createQuery(String.format(strQuery, strFilter), + FamilyDoctorJPA.class); if (searchTerm.length() > 0) query.setParameter("searchTerm", "%" + searchTerm + "%"); @@ -221,11 +244,11 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { return allFDTOs; } - + public List listPatientsPaged(int pageNumber, int pageSize) { return this.listPatientsFiltered(null, pageNumber, pageSize); } - + public List listPatientsFiltered(String searchTerm, int pageNumber, int pageSize) { String strQuery = "SELECT p FROM PatientJPA p %s order by p.name, p.surname"; String strFilter = ""; @@ -259,7 +282,8 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { } /** - * Método que convierte un objecto de tipo MedicalSpecialtyJPA (JPA) a su equivalente MedicalSpecialtyTO (Tranfer Object) + * Método que convierte un objecto de tipo MedicalSpecialtyJPA (JPA) a su + * equivalente MedicalSpecialtyTO (Tranfer Object) * * @return MedicalSpecialtyTO (Transfer Object de una especialidad médica) */ @@ -274,7 +298,8 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { } /** - * Método que convierte un objecto de tipo PrimaryHealthCareCenterJPA (JPA) a su equivalente PrimaryHealthCareCenterTO (Tranfer Object) + * Método que convierte un objecto de tipo PrimaryHealthCareCenterJPA (JPA) a su + * equivalente PrimaryHealthCareCenterTO (Tranfer Object) * * @return PrimaryHealthCareCenterTO (Transfer Object de un CAP) */ @@ -289,10 +314,14 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { } /** - * Método que convierte un objecto de tipo SpecialistDoctorJPA (JPA) a su equivalente SpecialistDoctorTO (Tranfer Object) + * Método que convierte un objecto de tipo SpecialistDoctorJPA (JPA) a su + * equivalente SpecialistDoctorTO (Tranfer Object) * - * El parámetro nestedProps es un valor entero que indica a que nivel de profundidad se debe navegar a través de las propiedades relacionadas para convertirlas de JPA a TO. Un - * valor 0 indica que no se convertirá ninguna propiedad que tenga un entidad JPA relacionada (tendrá valor null en el objeto TO). + * El parámetro nestedProps es un valor entero que indica a que nivel de + * profundidad se debe navegar a través de las propiedades relacionadas para + * convertirlas de JPA a TO. Un valor 0 indica que no se convertirá ninguna + * propiedad que tenga un entidad JPA relacionada (tendrá valor null en el + * objeto TO). * * @return SpecialistDoctorTO (Transfer Object de un médico especialista) */ @@ -305,18 +334,22 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { ms = sd.getMedicalSpecialty(); nestedProps--; - sdTO = new SpecialistDoctorTO(sd.getId(), sd.getProfessionalNumber(), sd.getNif(), sd.getName(), sd.getSurname(), sd.getPassword(), sd.getEmail(), - this.getPOJOforMedicalSpecialtyJPA(ms)); + sdTO = new SpecialistDoctorTO(sd.getId(), sd.getProfessionalNumber(), sd.getNif(), sd.getName(), + sd.getSurname(), sd.getPassword(), sd.getEmail(), this.getPOJOforMedicalSpecialtyJPA(ms)); } return sdTO; } /** - * Método que convierte un objecto de tipo FamilyDoctorJPA (JPA) a su equivalente FamilyDoctorTO (Tranfer Object) + * Método que convierte un objecto de tipo FamilyDoctorJPA (JPA) a su + * equivalente FamilyDoctorTO (Tranfer Object) * - * El parámetro nestedProps es un valor entero que indica a que nivel de profundidad se debe navegar a través de las propiedades relacionadas para convertirlas de JPA a TO. Un - * valor 0 indica que no se convertirá ninguna propiedad que tenga un entidad JPA relacionada (tendrá valor null en el objeto TO). + * El parámetro nestedProps es un valor entero que indica a que nivel de + * profundidad se debe navegar a través de las propiedades relacionadas para + * convertirlas de JPA a TO. Un valor 0 indica que no se convertirá ninguna + * propiedad que tenga un entidad JPA relacionada (tendrá valor null en el + * objeto TO). * * @return FamilyDoctorTO (Transfer Object de un médico especialista) */ @@ -329,18 +362,22 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { phc = fd.getPrimaryHealthCareCenter(); nestedProps--; - fdTO = new FamilyDoctorTO(fd.getId(), fd.getProfessionalNumber(), fd.getNif(), fd.getName(), fd.getSurname(), fd.getPassword(), fd.getEmail(), - this.getPOJOforPrimaryHealthCareCenterJPA(phc)); + fdTO = new FamilyDoctorTO(fd.getId(), fd.getProfessionalNumber(), fd.getNif(), fd.getName(), + fd.getSurname(), fd.getPassword(), fd.getEmail(), this.getPOJOforPrimaryHealthCareCenterJPA(phc)); } return fdTO; } /** - * Método que convierte un objecto de tipo PatientJPA (JPA) a su equivalente PatientTO (Tranfer Object) + * Método que convierte un objecto de tipo PatientJPA (JPA) a su equivalente + * PatientTO (Tranfer Object) * - * El parámetro nestedProps es un valor entero que indica a que nivel de profundidad se debe navegar a través de las propiedades relacionadas para convertirlas de JPA a TO. Un - * valor 0 indica que no se convertirá ninguna propiedad que tenga un entidad JPA relacionada (tendrá valor null en el objeto TO). + * El parámetro nestedProps es un valor entero que indica a que nivel de + * profundidad se debe navegar a través de las propiedades relacionadas para + * convertirlas de JPA a TO. Un valor 0 indica que no se convertirá ninguna + * propiedad que tenga un entidad JPA relacionada (tendrá valor null en el + * objeto TO). * * @return PatientTO (Transfer Object de un médico especialista) */ @@ -353,7 +390,8 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { fd = pat.getFamilyDoctor(); nestedProps--; - paTO = new PatientTO(pat.getId(), pat.getPersonalIdentificationCode(), pat.getNif(), pat.getName(), pat.getSurname(), pat.getPassword(), pat.getEmail(), + paTO = new PatientTO(pat.getId(), pat.getPersonalIdentificationCode(), pat.getNif(), pat.getName(), + pat.getSurname(), pat.getPassword(), pat.getEmail(), this.getPOJOforFamilyDoctorJPA(fd, nestedProps)); } @@ -361,9 +399,11 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { } /** - * Método que recupera un paciente a partir de su Identificador (Id) de base de datos. + * Método que recupera un paciente a partir de su Identificador (Id) de base de + * datos. * - * @return PatientTO (Transfer Object del objeto recuperado) o null si no se encuentra el objeto buscado + * @return PatientTO (Transfer Object del objeto recuperado) o null si no se + * encuentra el objeto buscado */ public PatientTO findPatientById(int patientId) { // Recuperamos propiedades anidadas 1 nivel! @@ -371,12 +411,15 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { } /** - * Método que recupera un paciente a partir de su CIP (Código de Identificación de Paciente) + * Método que recupera un paciente a partir de su CIP (Código de Identificación + * de Paciente) * - * @return PatientTO (Transfer Object del objeto recuperado) o null si no se encuentra el objeto buscado + * @return PatientTO (Transfer Object del objeto recuperado) o null si no se + * encuentra el objeto buscado */ public PatientTO findPatientByCode(String code) { - TypedQuery query = entman.createQuery("from PatientJPA pat where pat.personalIdentificationCode=:code", PatientJPA.class); + TypedQuery query = entman + .createQuery("from PatientJPA pat where pat.personalIdentificationCode=:code", PatientJPA.class); query.setMaxResults(1); query.setParameter("code", code); @@ -390,7 +433,8 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { /** * Método que recupera un paciente a partir de su NIF * - * @return PatientTO (Transfer Object del objeto recuperado) o null si no se encuentra el objeto buscado + * @return PatientTO (Transfer Object del objeto recuperado) o null si no se + * encuentra el objeto buscado */ public PatientTO findPatientByNif(String searchedNIF) { TypedQuery query = entman.createQuery("from PatientJPA pat where pat.nif=:nif", PatientJPA.class); @@ -405,21 +449,26 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { } /** - * Método que recupera un médico de familia a partir de su Identificador (Id) de base de datos. + * Método que recupera un médico de familia a partir de su Identificador (Id) de + * base de datos. * - * @return FamilyDoctorTO (Transfer Object del objeto recuperado) o null si no se encuentra el objeto buscado + * @return FamilyDoctorTO (Transfer Object del objeto recuperado) o null si no + * se encuentra el objeto buscado */ public FamilyDoctorTO findFamilyDoctorById(int ProfessionalNumberId) { return this.getPOJOforFamilyDoctorJPA(entman.find(FamilyDoctorJPA.class, ProfessionalNumberId), 1); } /** - * Método que recupera un médico de familia a partir de su NP (Número de profesional) + * Método que recupera un médico de familia a partir de su NP (Número de + * profesional) * - * @return FamilyDoctorTO (Transfer Object del objeto recuperado) o null si no se encuentra el objeto buscado + * @return FamilyDoctorTO (Transfer Object del objeto recuperado) o null si no + * se encuentra el objeto buscado */ public FamilyDoctorTO findFamilyDoctorByCode(String code) { - TypedQuery query = entman.createQuery("from FamilyDoctorJPA d where d.professionalNumber=:code", FamilyDoctorJPA.class); + TypedQuery query = entman + .createQuery("from FamilyDoctorJPA d where d.professionalNumber=:code", FamilyDoctorJPA.class); query.setParameter("code", code); @@ -433,10 +482,12 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { /** * Método que recupera un médico de familia a partir de su NIF * - * @return FamilyDoctorTO (Transfer Object del objeto recuperado) o null si no se encuentra el objeto buscado + * @return FamilyDoctorTO (Transfer Object del objeto recuperado) o null si no + * se encuentra el objeto buscado */ public FamilyDoctorTO findFamilyDoctorByNif(String searchedNIF) { - TypedQuery query = entman.createQuery("from FamilyDoctorJPA d where d.nif=:nif", FamilyDoctorJPA.class); + TypedQuery query = entman.createQuery("from FamilyDoctorJPA d where d.nif=:nif", + FamilyDoctorJPA.class); query.setMaxResults(1); query.setParameter("nif", searchedNIF); @@ -448,21 +499,26 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { } /** - * Método que recupera un médico especialista a partir de su Identificador (Id) de base de datos. + * Método que recupera un médico especialista a partir de su Identificador (Id) + * de base de datos. * - * @return SpecialistDoctorTO (Transfer Object del objeto recuperado) o null si no se encuentra el objeto buscado + * @return SpecialistDoctorTO (Transfer Object del objeto recuperado) o null si + * no se encuentra el objeto buscado */ public SpecialistDoctorTO findSpecialistDoctorById(int ProfessionalNumberId) { return this.getPOJOforSpecialistDoctorJPA(entman.find(SpecialistDoctorJPA.class, ProfessionalNumberId), 1); } /** - * Método que recupera un médico especialista a partir de su NP (Número de profesional) + * Método que recupera un médico especialista a partir de su NP (Número de + * profesional) * - * @return SpecialistDoctorTO (Transfer Object del objeto recuperado) o null si no se encuentra el objeto buscado + * @return SpecialistDoctorTO (Transfer Object del objeto recuperado) o null si + * no se encuentra el objeto buscado */ public SpecialistDoctorTO findSpecialistDoctorByCode(String code) { - TypedQuery query = entman.createQuery("from SpecialistDoctorJPA d where d.professionalNumber=:code", SpecialistDoctorJPA.class); + TypedQuery query = entman + .createQuery("from SpecialistDoctorJPA d where d.professionalNumber=:code", SpecialistDoctorJPA.class); query.setParameter("code", code); @@ -476,10 +532,12 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { /** * Método que recupera un médico especialista a partir de su NIF * - * @return SpecialistDoctorTO (Transfer Object del objeto recuperado) o null si no se encuentra el objeto buscado + * @return SpecialistDoctorTO (Transfer Object del objeto recuperado) o null si + * no se encuentra el objeto buscado */ public SpecialistDoctorTO findSpecialistDoctorByNif(String searchedNIF) { - TypedQuery query = entman.createQuery("from SpecialistDoctorJPA d where d.nif=:nif", SpecialistDoctorJPA.class); + TypedQuery query = entman.createQuery("from SpecialistDoctorJPA d where d.nif=:nif", + SpecialistDoctorJPA.class); query.setMaxResults(1); query.setParameter("nif", searchedNIF); @@ -491,12 +549,17 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { } /** - * Método que convierte un objecto de tipo QuestionJPA (JPA) a su equivalente QuestionTO (Tranfer Object) + * Método que convierte un objecto de tipo QuestionJPA (JPA) a su equivalente + * QuestionTO (Tranfer Object) * - * El parámetro nestedProps es un valor entero que indica a que nivel de profundidad se debe navegar a través de las propiedades relacionadas para convertirlas de JPA a TO. Un - * valor 0 indica que no se convertirá ninguna propiedad que tenga un entidad JPA relacionada (tendrá valor null en el objeto TO). + * El parámetro nestedProps es un valor entero que indica a que nivel de + * profundidad se debe navegar a través de las propiedades relacionadas para + * convertirlas de JPA a TO. Un valor 0 indica que no se convertirá ninguna + * propiedad que tenga un entidad JPA relacionada (tendrá valor null en el + * objeto TO). * - * @return QuestionTO (Transfer Object del objeto recuperado) o null si no se encuentra el objeto buscado + * @return QuestionTO (Transfer Object del objeto recuperado) o null si no se + * encuentra el objeto buscado */ public QuestionTO getPOJOforQuestionJPA(QuestionJPA qs, int nestedProps) { QuestionTO qsTO = null; @@ -510,8 +573,9 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { } nestedProps--; - qsTO = new QuestionTO(qs.getId(), qs.getTitle(), qs.getMessage(), qs.getStatus(), this.getPOJOforPatientJPA(pat, nestedProps), - this.getPOJOforFamilyDoctorJPA(fd, nestedProps), qs.getResponse()); + qsTO = new QuestionTO(qs.getId(), qs.getTitle(), qs.getMessage(), qs.getStatus(), + this.getPOJOforPatientJPA(pat, nestedProps), this.getPOJOforFamilyDoctorJPA(fd, nestedProps), + qs.getResponse()); } return qsTO; @@ -529,8 +593,27 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { } nestedProps--; - qsTO = new VisitTO(vi.getId(), vi.getDate(), vi.getTime(), vi.getObservations(), vi.getResult(), this.getPOJOforFamilyDoctorJPA(fd, nestedProps), - this.getPOJOforPatientJPA(pat, nestedProps)); + qsTO = new VisitTO(vi.getId(), vi.getDate(), vi.getTime(), vi.getObservations(), vi.getResult(), + this.getPOJOforFamilyDoctorJPA(fd, nestedProps), this.getPOJOforPatientJPA(pat, nestedProps)); + } + + return qsTO; + } + + public MedicalTestTO getPOJOforMedicalTestJPA(MedicalTestJPA vi, int nestedProps) { + MedicalTestTO qsTO = null; + + if (vi != null) { + SpecialistDoctorJPA fd = null; + PatientJPA pat = null; + if (nestedProps > 0) { + fd = vi.getSpecialistDoctor(); + pat = vi.getPatient(); + } + + nestedProps--; + qsTO = new MedicalTestTO(vi.getId(), vi.getDate(), vi.getTime(), vi.getObservations(), vi.getHighresimage(), vi.getType(), + this.getPOJOforPatientJPA(pat, nestedProps), this.getPOJOforSpecialistDoctorJPA(fd, nestedProps)); } return qsTO; diff --git a/1.sources/MyHealth/src/ejb/common/CommonFacadeLocal.java b/1.sources/MyHealth/src/ejb/common/CommonFacadeLocal.java index f3e0281..4438ba9 100644 --- a/1.sources/MyHealth/src/ejb/common/CommonFacadeLocal.java +++ b/1.sources/MyHealth/src/ejb/common/CommonFacadeLocal.java @@ -6,6 +6,7 @@ import javax.ejb.Local; import TO.FamilyDoctorTO; import TO.MedicalSpecialtyTO; +import TO.MedicalTestTO; import TO.PatientTO; import TO.PrimaryHealthCareCenterTO; import TO.QuestionTO; @@ -13,6 +14,7 @@ import TO.SpecialistDoctorTO; import TO.VisitTO; import jpa.FamilyDoctorJPA; import jpa.MedicalSpecialtyJPA; +import jpa.MedicalTestJPA; import jpa.PatientJPA; import jpa.PrimaryHealthCareCenterJPA; import jpa.QuestionJPA; @@ -78,6 +80,8 @@ public interface CommonFacadeLocal { public PatientTO getPOJOforPatientJPA(PatientJPA pat, int nestedProps); public QuestionTO getPOJOforQuestionJPA(QuestionJPA qs, int nestedProps); + + public MedicalTestTO getPOJOforMedicalTestJPA(MedicalTestJPA mt, int nestedProps); public VisitTO getPOJOforVisitJPA(VisitJPA qs, int nestedProps); } diff --git a/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeBean.java b/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeBean.java index 4567047..6bac419 100644 --- a/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeBean.java +++ b/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeBean.java @@ -1,5 +1,6 @@ package ejb.medicalTest; +import java.time.LocalTime; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -10,11 +11,14 @@ import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.TypedQuery; +import TO.MedicalTestTO; +import TO.PatientTO; import TO.QuestionTO; import TO.SpecialistDoctorTO; import common.MedicalTestType; import common.QuestionStatus; import ejb.common.CommonFacadeLocal; +import jpa.MedicalTestJPA; import jpa.PatientJPA; import jpa.QuestionJPA; import jpa.SpecialistDoctorJPA; @@ -152,16 +156,22 @@ public class MedicalTestFacadeBean implements MedicalTestFacadeRemote { /** * Añadir pruebas médicas a una cita * - * Sólo médicos especialistas pueden gestionar pruebas médicas en el sistema. + * Dado que será añadida por el médico especialista en sesión no hace falta más información. * - * @param idMedicalTest + * @param patientiID * @param date * @param time * @param testType Pudiera llegar a ser: Análisis de sangre, resonancias * magnéticas y TAC * @param observations */ - public void addMedicalTest(int idMedicalTest, Date date, long time, MedicalTestType testType, String observations) { + public void addMedicalTest(int patientID, int doctorSpecialistID, Date date, LocalTime time, MedicalTestType testType, String observations) { + SpecialistDoctorJPA specDoctor = entman.find(SpecialistDoctorJPA.class, doctorSpecialistID); + PatientJPA pat = entman.find(PatientJPA.class, patientID); + + MedicalTestJPA mt = new MedicalTestJPA(0, date, time, observations, null, testType, pat, specDoctor); + + entman.persist(mt); } /** @@ -171,7 +181,19 @@ public class MedicalTestFacadeBean implements MedicalTestFacadeRemote { * * @param idMedicalTest */ - public void getMedicalTest(int idMedicalTest) { + public MedicalTestTO getMedicalTest(int idMedicalTest) { + MedicalTestTO resp = new MedicalTestTO(); + + resp = commonServices.getPOJOforMedicalTestJPA(this.getMedicalTestJPA(idMedicalTest), 1); + + return resp; + } + + private MedicalTestJPA getMedicalTestJPA(int idMedicalTest) { + TypedQuery query = entman.createQuery("SELECT q from MedicalTestJPA q where q.id=:idMedicalTest", + MedicalTestJPA.class); + query.setParameter("idMedicalTest", idMedicalTest); + return query.getSingleResult(); } /** @@ -181,6 +203,10 @@ public class MedicalTestFacadeBean implements MedicalTestFacadeRemote { * @param image */ public void addImage(int idMedicalTest, String image) { + MedicalTestJPA mt = this.getMedicalTestJPA(idMedicalTest); + mt.setHighresimage(image); + + entman.persist(mt); } /** @@ -190,6 +216,7 @@ public class MedicalTestFacadeBean implements MedicalTestFacadeRemote { * @param image */ public void updateImage(int idMedicalTest, String image) { + this.addImage(idMedicalTest, image); } /** @@ -198,6 +225,10 @@ public class MedicalTestFacadeBean implements MedicalTestFacadeRemote { * @param idMedicalTest */ public void removeImage(int idMedicalTest) { + MedicalTestJPA mt = this.getMedicalTestJPA(idMedicalTest); + mt.setHighresimage(null); + + entman.persist(mt); } public Long getSpecialistDoctorByMedicalSpecialityCount(int specialityId) { @@ -236,4 +267,124 @@ public class MedicalTestFacadeBean implements MedicalTestFacadeRemote { return pendingQuestions; } + @Override + public List loadMedicalTestForPatient(int patientID) { + List medicalTests = new ArrayList(); + + TypedQuery query = entman.createQuery( + "SELECT q from MedicalTestJPA q where q.patient.id=:patientId order by q.id desc", + MedicalTestJPA.class); + + query.setParameter("patientId", patientID); + + List allJPA = query.getResultList(); + + for (MedicalTestJPA item : allJPA) { + medicalTests.add(commonServices.getPOJOforMedicalTestJPA(item, 1)); + } + + return medicalTests; + } + + @Override + public List loadMedicalTestForFamilyDoctor(int familyDoctorID) { + return this.loadMedicalTestForFamilyDoctor(familyDoctorID, -1); + } + + @Override + public List loadMedicalTestForSpecialistDoctor(int specialistDoctorID) { + return this.loadMedicalTestForSpecialistDoctor(specialistDoctorID, -1); + } + + @Override + public List loadMedicalTestForFamilyDoctor(int familyDoctorID, int patientID) { + List medicalTests = new ArrayList(); + String extraQuery = ""; + + if(patientID > 0) { + extraQuery = " and q.patient.id=:patientID"; + } + + TypedQuery query = entman.createQuery( + "SELECT q from MedicalTestJPA q where q.patient.familyDoctor.id=:familyDoctorID " + extraQuery + " order by q.id desc", + MedicalTestJPA.class); + if(patientID > 0) { + query.setParameter("patientID", patientID); + } + query.setParameter("familyDoctorID", familyDoctorID); + + List allJPA = query.getResultList(); + + for (MedicalTestJPA item : allJPA) { + medicalTests.add(commonServices.getPOJOforMedicalTestJPA(item, 1)); + } + + return medicalTests; + } + + @Override + public List loadMedicalTestForSpecialistDoctor(int specialistDoctorID, int patientID) { + List medicalTests = new ArrayList(); + String extraQuery = ""; + + if(patientID > 0) { + extraQuery = " and q.patient.id=:patientID"; + } + + TypedQuery query = entman.createQuery( + "SELECT q from MedicalTestJPA q where q.specialistDoctor.id=:specialistDoctorID " + extraQuery + " order by q.id desc", + MedicalTestJPA.class); + + if(patientID > 0) { + query.setParameter("patientID", patientID); + } + query.setParameter("specialistDoctorID", specialistDoctorID); + + List allJPA = query.getResultList(); + + for (MedicalTestJPA item : allJPA) { + medicalTests.add(commonServices.getPOJOforMedicalTestJPA(item, 1)); + } + + return medicalTests; + } + + @Override + public List loadPatientsForSpecialistDoctor(int specialistDoctorID) { + List medicalTests = new ArrayList(); + + TypedQuery query = entman.createQuery( + "SELECT distinct q.patient from MedicalTestJPA q where q.specialistDoctor.id=:specialistDoctorID", + PatientJPA.class); + + query.setParameter("specialistDoctorID", specialistDoctorID); + + List allJPA = query.getResultList(); + + for (PatientJPA item : allJPA) { + medicalTests.add(commonServices.getPOJOforPatientJPA(item, 1)); + } + + return medicalTests; + } + + @Override + public List loadPatientsForFamilyDoctor(int familyDoctorID) { + List medicalTests = new ArrayList(); + + TypedQuery query = entman.createQuery( + "SELECT distinct q.patient from MedicalTestJPA q where q.patient.familyDoctor.id=:familyDoctorID", + PatientJPA.class); + + query.setParameter("familyDoctorID", familyDoctorID); + + List allJPA = query.getResultList(); + + for (PatientJPA item : allJPA) { + medicalTests.add(commonServices.getPOJOforPatientJPA(item, 1)); + } + + return medicalTests; + } + } \ No newline at end of file diff --git a/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeRemote.java b/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeRemote.java index 8cef72e..f796aa4 100644 --- a/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeRemote.java +++ b/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeRemote.java @@ -1,10 +1,13 @@ package ejb.medicalTest; +import java.time.LocalTime; import java.util.Date; import java.util.List; import javax.ejb.Remote; +import TO.MedicalTestTO; +import TO.PatientTO; import TO.QuestionTO; import TO.SpecialistDoctorTO; import common.MedicalTestType; @@ -62,8 +65,23 @@ public interface MedicalTestFacadeRemote { // ********************************************************************* MEDICAL // TEST + public List loadMedicalTestForPatient(int patientID); + + public List loadMedicalTestForFamilyDoctor(int familyDoctorID); + + public List loadMedicalTestForSpecialistDoctor(int specialistDoctorID); + + public List loadMedicalTestForFamilyDoctor(int familyDoctorID, int patientID); + + public List loadMedicalTestForSpecialistDoctor(int specialistDoctorID, int patientID); + + public List loadPatientsForSpecialistDoctor(int specialistDoctorID); + + public List loadPatientsForFamilyDoctor(int familyDoctorID); + /** * Añadir una prueba médica a un paciente + * Dado que será añadida por el médico especialista en sesión no hace falta más información. * * @param idMedicalTest * @param date @@ -71,14 +89,14 @@ public interface MedicalTestFacadeRemote { * @param testType Pudiera llegar a ser: Análisis de sangre, resonancias magnéticas y TAC * @param observations */ - public void addMedicalTest(int id, Date date, long time, MedicalTestType testType, String observations); + public void addMedicalTest(int patientID, int doctorSpecialistID, Date date, LocalTime time, MedicalTestType testType, String observations); /** * Recuperar una prueba médica por ID * * @param idMedicalTest */ - public void getMedicalTest(int idPatient); + public MedicalTestTO getMedicalTest(int idPatient); /** * Añadir una imagen a una prueba médica diff --git a/1.sources/MyHealth/src/jpa/MedicalTestJPA.java b/1.sources/MyHealth/src/jpa/MedicalTestJPA.java index 963c96a..616205b 100644 --- a/1.sources/MyHealth/src/jpa/MedicalTestJPA.java +++ b/1.sources/MyHealth/src/jpa/MedicalTestJPA.java @@ -1,6 +1,7 @@ package jpa; import java.io.Serializable; +import java.time.LocalTime; import java.util.Date; import javax.persistence.Column; @@ -36,7 +37,7 @@ public class MedicalTestJPA implements Serializable { @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private Date date; - private long time; + private LocalTime time; private String observations; private String highresimage; @Enumerated(EnumType.STRING) @@ -56,7 +57,7 @@ public class MedicalTestJPA implements Serializable { super(); } - public MedicalTestJPA(int id, Date date, long time, String observations, String highresimage, MedicalTestType type, PatientJPA patient, SpecialistDoctorJPA specialistDoctor) { + public MedicalTestJPA(int id, Date date, LocalTime time, String observations, String highresimage, MedicalTestType type, PatientJPA patient, SpecialistDoctorJPA specialistDoctor) { this.id = id; this.date = date; this.time = time; @@ -83,11 +84,11 @@ public class MedicalTestJPA implements Serializable { this.date = date; } - public long getTime() { + public LocalTime getTime() { return time; } - public void setTime(long time) { + public void setTime(LocalTime time) { this.time = time; } diff --git a/1.sources/MyHealth/src/managedbean/medicalTest/MedicalTestMBean.java b/1.sources/MyHealth/src/managedbean/medicalTest/MedicalTestMBean.java index 2396638..aef69ea 100644 --- a/1.sources/MyHealth/src/managedbean/medicalTest/MedicalTestMBean.java +++ b/1.sources/MyHealth/src/managedbean/medicalTest/MedicalTestMBean.java @@ -1,27 +1,194 @@ package managedbean.medicalTest; import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; import javax.annotation.PostConstruct; -import javax.enterprise.context.RequestScoped; +import javax.faces.component.html.HtmlSelectOneMenu; +import javax.faces.event.AjaxBehaviorEvent; +import javax.faces.view.ViewScoped; import javax.inject.Named; -import managedbean.common.ManagedBeanBase; +import org.primefaces.event.SelectEvent; -@Named("MedicalTestMBean") -@RequestScoped +import TO.MedicalTestTO; +import TO.PatientTO; +import common.UserType; +import managedbean.common.ManagedBeanBase; +import managedbean.common.SessionUtils; + +@Named("mt") +@ViewScoped public class MedicalTestMBean extends ManagedBeanBase implements Serializable { private static final long serialVersionUID = 1L; + private int userID; + private UserType userType; + private List medicalTests; + private MedicalTestTO selected; + private PatientTO patSelected; + private boolean addNewMode = false; + public MedicalTestMBean() { } @PostConstruct public void init() { - // Inicialización de variables y propiedades van aquí. - - // Como realizar llamadas al EJB Remoto - // this.getRemoteManagerSystemAdmin().MetodoEJB + this.userType = SessionUtils.getUserType(); + this.userID = Integer.valueOf(SessionUtils.getUserId()); + + this.selected = null; + this.patSelected = null; + + this.loadMedicalTests(); + this.getPatients(); } + + public void addMedicalTest() { + getRemoteManagerMedicalTest().addMedicalTest(this.selected.getPatient().getId(), userID, + this.selected.getDate(), this.selected.getTime(), this.selected.getType(), + this.selected.getObservations()); + } + + public void addImage() { + getRemoteManagerMedicalTest().addImage(this.selected.getId(), this.selected.getHighresimage()); + } + + public void updateImage() { + getRemoteManagerMedicalTest().updateImage(this.selected.getId(), this.selected.getHighresimage()); + } + + public void removeImage() { + getRemoteManagerMedicalTest().removeImage(this.selected.getId()); + } + + public MedicalTestTO getSelected() { + return this.selected; + } + + public void setSelected(MedicalTestTO selected) { + this.selected = selected; + } + + public PatientTO getPatSelected() { + return this.patSelected; + } + + public void setPatSelected(PatientTO s) { + this.patSelected = s; + } + + public void loadMedicalTests() { + if (userType == UserType.PATIENT) { + // Cargar las pruebas para el paciente en sesión + this.medicalTests = getRemoteManagerMedicalTest().loadMedicalTestForPatient(userID); + } else if (userType == UserType.SPECIALIST_DOCTOR) { + // Cargar las pruebas que el doctor especialista ha creado + this.medicalTests = getRemoteManagerMedicalTest().loadMedicalTestForSpecialistDoctor(userID); + } else if (userType == UserType.FAMILY_DOCTOR) { + // Cargar las pruebas para los pacientes del doctor de familia en sesión + this.medicalTests = getRemoteManagerMedicalTest().loadMedicalTestForFamilyDoctor(userID); + } else { + // Nothing todo + this.medicalTests = new ArrayList(); + } + System.out.println(this.medicalTests); + } + + public List getPatients() { + if (userType == UserType.SPECIALIST_DOCTOR) { + // Cargar los pacientes a los que ha añadido pruebas médicas el médico especialista + return getRemoteManagerMedicalTest().loadPatientsForSpecialistDoctor(userID); + } else if (userType == UserType.FAMILY_DOCTOR) { + // Cargar los pacientes del médico de familia que tiene pruebas médicas hechas + return getRemoteManagerMedicalTest().loadPatientsForFamilyDoctor(userID); + } else { + // Nothing todo + return new ArrayList(); + } + } + + public List getMedicalTests() { + return this.medicalTests; + } + + public void setMedicalTests(List list) { + // Nothing to do + } + + /*************************************************** METODOS PARA LA VISTA */ + private Integer patIdSelected = -1; + public void setPatIdSelected(Integer value) { + this.patIdSelected = value; + this.addNewMode = false; + } + + public Integer getPatIdSelected() { + return this.patIdSelected; + } + + public String getTitlePanel() { + String res; + if (userType == UserType.PATIENT) { + // Cargar las pruebas para el paciente en sesión + res = "Realizadas al paciente: " + SessionUtils.getloggedOnUser().getName(); + } else if (userType == UserType.SPECIALIST_DOCTOR) { + // Cargar las pruebas que el doctor especialista ha creado + res = "Solicitadas por el médico especialista: " + SessionUtils.getloggedOnUser().getName(); + } else if (userType == UserType.FAMILY_DOCTOR) { + // Cargar las pruebas para los pacientes del doctor de familia en sesión + res = "Pacientes del médico de familia: " + SessionUtils.getloggedOnUser().getName(); + } else { + // Nothing todo + res = "Error"; + } + return res; + } + + public boolean isPatSelector() { + return !(userType == UserType.PATIENT); + } + + public void onSelectPatient(AjaxBehaviorEvent event) { + this.selected = null; + if (userType == UserType.SPECIALIST_DOCTOR) { + // Cargar las pruebas que el doctor especialista ha creado + medicalTests = getRemoteManagerMedicalTest().loadMedicalTestForSpecialistDoctor(userID, this.patIdSelected); + } else if (userType == UserType.FAMILY_DOCTOR) { + // Cargar las pruebas para los pacientes del doctor de familia en sesión + medicalTests = getRemoteManagerMedicalTest().loadMedicalTestForFamilyDoctor(userID, this.patIdSelected); + } + } + + public void onSelectMT(SelectEvent event) { + this.selected = (MedicalTestTO) event.getObject(); + this.addNewMode = false; + } + + public void addMT() { + this.selected = new MedicalTestTO(); + this.selected.setId(-1); + this.selected.setObservations(""); + this.addNewMode = true; + } + + public boolean isAddNewMode() { + return addNewMode; + } + + public void setAddNewMode(boolean addNewMode) { + this.addNewMode = addNewMode; + } + + public boolean getViewCreate() { + return addNewMode; + } + + public boolean getViewEdit() { + return !addNewMode && this.selected != null; + } + + } From 47caa1fc546dd3a47bf1d3fbd81dd2a3abcfb1b8 Mon Sep 17 00:00:00 2001 From: Roberto Orden Erena Date: Sat, 28 Dec 2019 23:06:32 +0100 Subject: [PATCH 4/8] =?UTF-8?q?Peque=C3=B1a=20mejora?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../docroot/medicaltest/MedicalTests.xhtml | 4 +- .../medicalTest/MedicalTestMBean.java | 50 +++++++++++-------- 2 files changed, 29 insertions(+), 25 deletions(-) diff --git a/1.sources/MyHealth/docroot/medicaltest/MedicalTests.xhtml b/1.sources/MyHealth/docroot/medicaltest/MedicalTests.xhtml index 3e298f0..fe6dee4 100644 --- a/1.sources/MyHealth/docroot/medicaltest/MedicalTests.xhtml +++ b/1.sources/MyHealth/docroot/medicaltest/MedicalTests.xhtml @@ -11,13 +11,11 @@ -
- + diff --git a/1.sources/MyHealth/src/managedbean/medicalTest/MedicalTestMBean.java b/1.sources/MyHealth/src/managedbean/medicalTest/MedicalTestMBean.java index aef69ea..48ad5c1 100644 --- a/1.sources/MyHealth/src/managedbean/medicalTest/MedicalTestMBean.java +++ b/1.sources/MyHealth/src/managedbean/medicalTest/MedicalTestMBean.java @@ -5,6 +5,7 @@ import java.util.ArrayList; import java.util.List; import javax.annotation.PostConstruct; +import javax.faces.application.FacesMessage; import javax.faces.component.html.HtmlSelectOneMenu; import javax.faces.event.AjaxBehaviorEvent; import javax.faces.view.ViewScoped; @@ -38,10 +39,10 @@ public class MedicalTestMBean extends ManagedBeanBase implements Serializable { public void init() { this.userType = SessionUtils.getUserType(); this.userID = Integer.valueOf(SessionUtils.getUserId()); - + this.selected = null; this.patSelected = null; - + this.loadMedicalTests(); this.getPatients(); } @@ -71,11 +72,11 @@ public class MedicalTestMBean extends ManagedBeanBase implements Serializable { public void setSelected(MedicalTestTO selected) { this.selected = selected; } - + public PatientTO getPatSelected() { return this.patSelected; } - + public void setPatSelected(PatientTO s) { this.patSelected = s; } @@ -96,10 +97,11 @@ public class MedicalTestMBean extends ManagedBeanBase implements Serializable { } System.out.println(this.medicalTests); } - + public List getPatients() { if (userType == UserType.SPECIALIST_DOCTOR) { - // Cargar los pacientes a los que ha añadido pruebas médicas el médico especialista + // Cargar los pacientes a los que ha añadido pruebas médicas el médico + // especialista return getRemoteManagerMedicalTest().loadPatientsForSpecialistDoctor(userID); } else if (userType == UserType.FAMILY_DOCTOR) { // Cargar los pacientes del médico de familia que tiene pruebas médicas hechas @@ -109,26 +111,27 @@ public class MedicalTestMBean extends ManagedBeanBase implements Serializable { return new ArrayList(); } } - + public List getMedicalTests() { return this.medicalTests; } - + public void setMedicalTests(List list) { // Nothing to do } /*************************************************** METODOS PARA LA VISTA */ private Integer patIdSelected = -1; + public void setPatIdSelected(Integer value) { this.patIdSelected = value; this.addNewMode = false; } - + public Integer getPatIdSelected() { return this.patIdSelected; } - + public String getTitlePanel() { String res; if (userType == UserType.PATIENT) { @@ -146,11 +149,11 @@ public class MedicalTestMBean extends ManagedBeanBase implements Serializable { } return res; } - + public boolean isPatSelector() { return !(userType == UserType.PATIENT); } - + public void onSelectPatient(AjaxBehaviorEvent event) { this.selected = null; if (userType == UserType.SPECIALIST_DOCTOR) { @@ -161,17 +164,21 @@ public class MedicalTestMBean extends ManagedBeanBase implements Serializable { medicalTests = getRemoteManagerMedicalTest().loadMedicalTestForFamilyDoctor(userID, this.patIdSelected); } } - + public void onSelectMT(SelectEvent event) { this.selected = (MedicalTestTO) event.getObject(); this.addNewMode = false; } - + public void addMT() { - this.selected = new MedicalTestTO(); - this.selected.setId(-1); - this.selected.setObservations(""); - this.addNewMode = true; + if (this.patIdSelected != -1) { + this.selected = new MedicalTestTO(); + this.selected.setId(-1); + this.selected.setObservations(""); + this.addNewMode = true; + } else { + this.addFacesMessage(FacesMessage.SEVERITY_WARN, "Atención!", "Debe elegir un paciente al que añadir la prueba médica."); + } } public boolean isAddNewMode() { @@ -181,14 +188,13 @@ public class MedicalTestMBean extends ManagedBeanBase implements Serializable { public void setAddNewMode(boolean addNewMode) { this.addNewMode = addNewMode; } - + public boolean getViewCreate() { return addNewMode; } - + public boolean getViewEdit() { return !addNewMode && this.selected != null; } - - + } From 8dc561f8768610c3e96410f557ba9ba7e62205df Mon Sep 17 00:00:00 2001 From: dalvarezgon Date: Sun, 29 Dec 2019 00:48:29 +0100 Subject: [PATCH 5/8] =?UTF-8?q?Gesti=C3=B3n=20Centros=20de=20Atenci=C3=B3n?= =?UTF-8?q?=20Primaria?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../systemAdmin/ManageHealthCareCenters.xhtml | 77 ++++++++ .../systemAdmin/ManageSpecialties.xhtml | 2 +- .../systemAdmin/SystemAdminFacadeBean.java | 76 +++++++- .../systemAdmin/SystemAdminFacadeRemote.java | 15 ++ .../src/managedbean/common/MenuMBean.java | 2 +- .../managedbean/systemAdmin/LoginMBean.java | 2 +- .../ManageHealthCareCentersMBean.java | 173 ++++++++++++++++++ .../systemAdmin/ManageSpecialitiesMBean.java | 12 +- 8 files changed, 347 insertions(+), 12 deletions(-) create mode 100644 1.sources/MyHealth/docroot/systemAdmin/ManageHealthCareCenters.xhtml create mode 100644 1.sources/MyHealth/src/managedbean/systemAdmin/ManageHealthCareCentersMBean.java diff --git a/1.sources/MyHealth/docroot/systemAdmin/ManageHealthCareCenters.xhtml b/1.sources/MyHealth/docroot/systemAdmin/ManageHealthCareCenters.xhtml new file mode 100644 index 0000000..110763e --- /dev/null +++ b/1.sources/MyHealth/docroot/systemAdmin/ManageHealthCareCenters.xhtml @@ -0,0 +1,77 @@ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+ \ No newline at end of file diff --git a/1.sources/MyHealth/docroot/systemAdmin/ManageSpecialties.xhtml b/1.sources/MyHealth/docroot/systemAdmin/ManageSpecialties.xhtml index 9f2c34c..9af78b6 100644 --- a/1.sources/MyHealth/docroot/systemAdmin/ManageSpecialties.xhtml +++ b/1.sources/MyHealth/docroot/systemAdmin/ManageSpecialties.xhtml @@ -43,7 +43,7 @@
- +
diff --git a/1.sources/MyHealth/src/ejb/systemAdmin/SystemAdminFacadeBean.java b/1.sources/MyHealth/src/ejb/systemAdmin/SystemAdminFacadeBean.java index 6881d51..bc3c636 100644 --- a/1.sources/MyHealth/src/ejb/systemAdmin/SystemAdminFacadeBean.java +++ b/1.sources/MyHealth/src/ejb/systemAdmin/SystemAdminFacadeBean.java @@ -1,5 +1,6 @@ package ejb.systemAdmin; +import java.util.ArrayList; import java.util.List; import javax.ejb.EJB; @@ -12,6 +13,7 @@ import TO.FamilyDoctorTO; import TO.LoggedUserTO; import TO.MedicalSpecialtyTO; import TO.PatientTO; +import TO.PrimaryHealthCareCenterTO; import TO.SpecialistDoctorTO; import common.Constants; import common.HashUtils; @@ -19,6 +21,7 @@ import common.UserType; import ejb.common.CommonFacadeLocal; import jpa.AdministratorJPA; import jpa.MedicalSpecialtyJPA; +import jpa.PrimaryHealthCareCenterJPA; /** * @@ -148,10 +151,81 @@ public class SystemAdminFacadeBean implements SystemAdminFacadeRemote { @Override public MedicalSpecialtyTO insertSpecialty(String name, String description) throws Exception { - MedicalSpecialtyJPA ms = new MedicalSpecialtyJPA(name, description); entman.persist(ms); return this.commonServices.getPOJOforMedicalSpecialtyJPA(ms); } + + @Override + public PrimaryHealthCareCenterTO updateHealthCareCenter(int id, String name, String location) throws Exception { + PrimaryHealthCareCenterJPA ms = entman.find(PrimaryHealthCareCenterJPA.class, id); + + if (ms == null) { + throw new Exception("No se pueden actualizar los datos del CAP porque no se encuentra en la base de datos ningún registro con id: " + String.valueOf(id)); + } + + ms.setName(name); + ms.setLocation(location); + + entman.persist(ms); + + return this.commonServices.getPOJOforPrimaryHealthCareCenterJPA(ms); + } + + public PrimaryHealthCareCenterTO findHealthCareCenterByName(String searchedName) { + TypedQuery query = entman.createQuery("from PrimaryHealthCareCenterJPA cap where cap.name=:name", PrimaryHealthCareCenterJPA.class); + query.setMaxResults(1); + query.setParameter("name", searchedName); + + List results = query.getResultList(); + if (results.size() > 0) + return this.commonServices.getPOJOforPrimaryHealthCareCenterJPA(results.get(0)); + else + return null; + } + + @Override + public void deleteHealthCareCenter(int id) throws Exception { + PrimaryHealthCareCenterJPA cap = entman.find(PrimaryHealthCareCenterJPA.class, id); + + if (cap == null) { + throw new Exception("No se puede borrar el CAP porque no se encuentra en la base de datos ningún registro con id: " + String.valueOf(id)); + } + + entman.remove(cap); + } + + @Override + public PrimaryHealthCareCenterTO insertHealthCareCenter(String name, String location) throws Exception { + PrimaryHealthCareCenterJPA cap = new PrimaryHealthCareCenterJPA(name, location); + entman.persist(cap); + + return this.commonServices.getPOJOforPrimaryHealthCareCenterJPA(cap); + } + + public Long getCAPCount() { + TypedQuery query = entman.createQuery("SELECT count(1) from PrimaryHealthCareCenterJPA", Long.class); + + return query.getSingleResult(); + } + + public List listCAPsPaged(int pageNumber, int pageSize) { + TypedQuery query = entman.createQuery("SELECT c from PrimaryHealthCareCenterJPA c order by c.name", PrimaryHealthCareCenterJPA.class); + + if (pageSize > 0) { + query.setFirstResult(pageNumber * pageSize); + query.setMaxResults(pageSize); + } + + List allJPA = query.getResultList(); + List caps = new ArrayList(); + + for (PrimaryHealthCareCenterJPA item : allJPA) { + caps.add(commonServices.getPOJOforPrimaryHealthCareCenterJPA(item)); + } + + return caps; + } + } diff --git a/1.sources/MyHealth/src/ejb/systemAdmin/SystemAdminFacadeRemote.java b/1.sources/MyHealth/src/ejb/systemAdmin/SystemAdminFacadeRemote.java index 0980961..7ee27dd 100644 --- a/1.sources/MyHealth/src/ejb/systemAdmin/SystemAdminFacadeRemote.java +++ b/1.sources/MyHealth/src/ejb/systemAdmin/SystemAdminFacadeRemote.java @@ -1,9 +1,12 @@ package ejb.systemAdmin; +import java.util.List; + import javax.ejb.Remote; import TO.LoggedUserTO; import TO.MedicalSpecialtyTO; +import TO.PrimaryHealthCareCenterTO; /** * @@ -25,4 +28,16 @@ public interface SystemAdminFacadeRemote { public void deleteSpecialty(int id) throws Exception; public MedicalSpecialtyTO insertSpecialty(String name, String description) throws Exception; + + public PrimaryHealthCareCenterTO updateHealthCareCenter(int id, String name, String location) throws Exception; + + public PrimaryHealthCareCenterTO findHealthCareCenterByName(String name); + + public void deleteHealthCareCenter(int id) throws Exception; + + public PrimaryHealthCareCenterTO insertHealthCareCenter(String name, String location) throws Exception; + + public Long getCAPCount(); + + public List listCAPsPaged(int pageNumber, int pageSize); } \ No newline at end of file diff --git a/1.sources/MyHealth/src/managedbean/common/MenuMBean.java b/1.sources/MyHealth/src/managedbean/common/MenuMBean.java index 63e09bd..eba96f5 100644 --- a/1.sources/MyHealth/src/managedbean/common/MenuMBean.java +++ b/1.sources/MyHealth/src/managedbean/common/MenuMBean.java @@ -42,7 +42,7 @@ public class MenuMBean implements Serializable { subMenu = new DefaultSubMenu("Administración del sistema", "fa fa-wrench"); subMenu.addElement(createMenuItem("Gestionar especialidades", "fa fa-file-text-o", "/systemAdmin/ManageSpecialties", null)); - subMenu.addElement(createMenuItem("Centros At. Primaria", "fa fa-hospital-o", "/systemAdmin/ManageSpecialties", null)); + subMenu.addElement(createMenuItem("Centros At. Primaria", "fa fa-hospital-o", "/systemAdmin/ManageHealthCareCenters", null)); subMenu.addElement(new DefaultSeparator()); subMenu.addElement(createMenuItem("Ver médicos de un CAP", "fa fa-medkit", "/systemAdmin/ManageSpecialties", null)); subMenu.addElement(new DefaultSeparator()); diff --git a/1.sources/MyHealth/src/managedbean/systemAdmin/LoginMBean.java b/1.sources/MyHealth/src/managedbean/systemAdmin/LoginMBean.java index 5618439..892a1c9 100644 --- a/1.sources/MyHealth/src/managedbean/systemAdmin/LoginMBean.java +++ b/1.sources/MyHealth/src/managedbean/systemAdmin/LoginMBean.java @@ -83,7 +83,7 @@ public class LoginMBean extends ManagedBeanBase { // logout event, invalidate session public String logout() { - this.addFacesMessageKeep(FacesMessage.SEVERITY_INFO, "Sessión cerrada", "Ha cerrado correctament su ssesión. Hasta la vista"); + this.addFacesMessageKeep(FacesMessage.SEVERITY_INFO, "Sessión cerrada", "Ha cerrado correctament su sesión. Hasta la vista"); SessionUtils.DestroySession(); diff --git a/1.sources/MyHealth/src/managedbean/systemAdmin/ManageHealthCareCentersMBean.java b/1.sources/MyHealth/src/managedbean/systemAdmin/ManageHealthCareCentersMBean.java new file mode 100644 index 0000000..3b6d33e --- /dev/null +++ b/1.sources/MyHealth/src/managedbean/systemAdmin/ManageHealthCareCentersMBean.java @@ -0,0 +1,173 @@ +package managedbean.systemAdmin; + +import java.io.IOException; +import java.io.Serializable; +import java.util.List; +import java.util.Map; + +import javax.annotation.PostConstruct; +import javax.faces.view.ViewScoped; +import javax.faces.application.FacesMessage; +import javax.faces.context.FacesContext; +import javax.inject.Named; + +import org.primefaces.event.RowEditEvent; +import org.primefaces.model.LazyDataModel; +import org.primefaces.model.SortOrder; + +import TO.PrimaryHealthCareCenterTO; +import managedbean.common.ManagedBeanBase; + +@Named("ManageHealthCareCenters") +@ViewScoped +public class ManageHealthCareCentersMBean extends ManagedBeanBase implements Serializable { + + private static final long serialVersionUID = 1L; + + private Integer id; + private String name; + private String location; + private PrimaryHealthCareCenterTO primaryHealthCareCenter; + private LazyDataModel lazyDataModelCAPsList; + + public ManageHealthCareCentersMBean() { + } + + @PostConstruct + public void init() { + this.lazyDataModelCAPsList = new LazyDataModel() { + private static final long serialVersionUID = 1L; + + @Override + public List load(int first, int pageSize, String sortField, SortOrder sortOrder, Map filters) { + Long totalRowCount = getRemoteManagerSystemAdmin().getCAPCount(); + this.setRowCount(totalRowCount.intValue()); + + return getRemoteManagerSystemAdmin().listCAPsPaged((first / pageSize), pageSize); + } + }; + + } + + public LazyDataModel getlazyDataModelCAPsList() { + return lazyDataModelCAPsList; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + + private void showPrimaryHealthCareCenterData(PrimaryHealthCareCenterTO cap) { + this.primaryHealthCareCenter = cap; + + if (cap == null) { + this.id = null; + this.name = ""; + this.location = ""; + } else { + this.id = cap.getId(); + this.name = cap.getName(); + this.location = cap.getLocation(); + } + } + + public PrimaryHealthCareCenterTO getPrimaryHealthCareCenter() { + return primaryHealthCareCenter; + } + + public void setPrimaryHealthCareCenter(PrimaryHealthCareCenterTO value) { + this.primaryHealthCareCenter = value; + } + + public void onRowEdit(RowEditEvent event) { + int error = 0; + + if (((PrimaryHealthCareCenterTO) event.getObject()).getName() == null || ((PrimaryHealthCareCenterTO) event.getObject()).getName().trim().length() == 0) { + this.addFacesMessage(FacesMessage.SEVERITY_WARN, "Nombre no relleno", "Por favor, escriba un nombre para el centro."); + error++; + } + if (((PrimaryHealthCareCenterTO) event.getObject()).getLocation() == null || ((PrimaryHealthCareCenterTO) event.getObject()).getLocation().trim().length() == 0) { + this.addFacesMessage(FacesMessage.SEVERITY_WARN, "Localización no rellena", "Por favor, escriba una localización."); + error++; + } + + if (error == 0) { + try { + this.getRemoteManagerSystemAdmin().updateHealthCareCenter(((PrimaryHealthCareCenterTO) event.getObject()).getId(), ((PrimaryHealthCareCenterTO) event.getObject()).getName(), + ((PrimaryHealthCareCenterTO) event.getObject()).getLocation()); + + this.showPrimaryHealthCareCenterData(null); + + FacesMessage msg = new FacesMessage("CAP editado", ((PrimaryHealthCareCenterTO) event.getObject()).getName()); + FacesContext.getCurrentInstance().addMessage(null, msg); + } catch (Exception e) { + this.manageException(e); + } + } + } + + public void onRowCancel(RowEditEvent event) { + FacesMessage msg = new FacesMessage("Edición cancelada", ((PrimaryHealthCareCenterTO) event.getObject()).getName()); + FacesContext.getCurrentInstance().addMessage(null, msg); + } + + public void deleteDataById(Integer id) throws IOException { + try { + this.getRemoteManagerSystemAdmin().deleteHealthCareCenter(id); + this.showPrimaryHealthCareCenterData(null); + + this.addFacesMessage(FacesMessage.SEVERITY_INFO, "El CAP se ha borrado", "Los datos del Centro de Atención Primaria se han borrado correctamente."); + } catch (Exception e) { + this.manageException(e); + } + } + + public void insertData() { + int error = 0; + + if (name == null || name.trim().length() == 0) { + this.addFacesMessage(FacesMessage.SEVERITY_WARN, "Nombre no relleno", "Por favor, escriba un nombre para el centro."); + error++; + } + if (location == null || location.trim().length() == 0) { + this.addFacesMessage(FacesMessage.SEVERITY_WARN, "Localización no rellena", "Por favor, escriba una localización."); + error++; + } + + if (this.getRemoteManagerSystemAdmin().findHealthCareCenterByName(name) != null) { + this.addFacesMessage(FacesMessage.SEVERITY_WARN, "CAP ya existente", "El CAP ya se encuentra en la base de datos"); + error++; + } + + if (error == 0) { + try { + this.getRemoteManagerSystemAdmin().insertHealthCareCenter(name, location); + this.showPrimaryHealthCareCenterData(null); + + this.addFacesMessage(FacesMessage.SEVERITY_INFO, "Los datos se han guardado", "Los datos del Centro de Atención Primaria se han guardado correctamente."); + } catch (Exception e) { + this.manageException(e); + } + } + } +} diff --git a/1.sources/MyHealth/src/managedbean/systemAdmin/ManageSpecialitiesMBean.java b/1.sources/MyHealth/src/managedbean/systemAdmin/ManageSpecialitiesMBean.java index 2f5067a..5349cf1 100644 --- a/1.sources/MyHealth/src/managedbean/systemAdmin/ManageSpecialitiesMBean.java +++ b/1.sources/MyHealth/src/managedbean/systemAdmin/ManageSpecialitiesMBean.java @@ -10,7 +10,6 @@ import javax.inject.Named; import TO.LoggedUserTO; import TO.MedicalSpecialtyTO; -import common.Constants; import managedbean.common.ManagedBeanBase; import managedbean.common.SessionUtils; @@ -51,7 +50,7 @@ public class ManageSpecialitiesMBean extends ManagedBeanBase implements Serializ } private void refreshFormData() { - this.medicalSpecialitiesList = this.getRemoteManagerCommon().listMedicalSpecialitiesPaged(0, Constants.MAX_ITEMS_AUTOCOMPLETE_SEARCH); + this.medicalSpecialitiesList = this.getRemoteManagerCommon().listAllMedicalSpecialities(); } public Integer getId() { @@ -118,9 +117,7 @@ public class ManageSpecialitiesMBean extends ManagedBeanBase implements Serializ if (error == 0) { try { - MedicalSpecialtyTO ms = this.getRemoteManagerSystemAdmin().updateSpecialty(this.medicalSpecialty.getId(), this.medicalSpecialty.getName(), - this.medicalSpecialty.getDescription()); - + this.getRemoteManagerSystemAdmin().updateSpecialty(this.medicalSpecialty.getId(), this.medicalSpecialty.getName(),this.medicalSpecialty.getDescription()); this.showSpecialtyData(null); this.refreshFormData(); @@ -149,7 +146,7 @@ public class ManageSpecialitiesMBean extends ManagedBeanBase implements Serializ this.showSpecialtyData(null); this.refreshFormData(); - this.addFacesMessage(FacesMessage.SEVERITY_INFO, "Los especialidad se ha borrado", "Los datos de la especialidad se han borrado correctamente."); + this.addFacesMessage(FacesMessage.SEVERITY_INFO, "La especialidad se ha borrado", "Los datos de la especialidad se han borrado correctamente."); } catch (Exception e) { this.manageException(e); } @@ -175,8 +172,7 @@ public class ManageSpecialitiesMBean extends ManagedBeanBase implements Serializ if (error == 0) { try { - MedicalSpecialtyTO ms = this.getRemoteManagerSystemAdmin().insertSpecialty(name, description); - + this.getRemoteManagerSystemAdmin().insertSpecialty(name, description); this.showSpecialtyData(null); this.refreshFormData(); From 9cd602f8cfe60298d268a85bb0456278721341b5 Mon Sep 17 00:00:00 2001 From: Roberto Orden Erena Date: Sun, 29 Dec 2019 10:20:16 +0100 Subject: [PATCH 6/8] Creando un MT --- .../docroot/medicaltest/MedicalTests.xhtml | 12 ++- .../medicalTest/MedicalTestFacadeBean.java | 71 +++++++++-------- .../medicalTest/MedicalTestFacadeRemote.java | 2 +- .../medicalTest/MedicalTestMBean.java | 77 ++++++++++++------- 4 files changed, 98 insertions(+), 64 deletions(-) diff --git a/1.sources/MyHealth/docroot/medicaltest/MedicalTests.xhtml b/1.sources/MyHealth/docroot/medicaltest/MedicalTests.xhtml index fe6dee4..10670a9 100644 --- a/1.sources/MyHealth/docroot/medicaltest/MedicalTests.xhtml +++ b/1.sources/MyHealth/docroot/medicaltest/MedicalTests.xhtml @@ -15,7 +15,7 @@
- + @@ -76,10 +76,16 @@
Tipo de prueba:
- - + +
+
+
+ +
+
+
diff --git a/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeBean.java b/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeBean.java index 6bac419..c3981df 100644 --- a/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeBean.java +++ b/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeBean.java @@ -69,9 +69,9 @@ public class MedicalTestFacadeBean implements MedicalTestFacadeRemote { qjpa.setFamilyDoctor(pat.getFamilyDoctor()); entman.persist(qjpa); - + return "ok"; - + } else { return "No tienes médico de familia elegido, por favor acude a la sección 'Gestionar Perfil' -> 'Cambiar médico de familia'"; } @@ -156,22 +156,29 @@ public class MedicalTestFacadeBean implements MedicalTestFacadeRemote { /** * Añadir pruebas médicas a una cita * - * Dado que será añadida por el médico especialista en sesión no hace falta más información. + * Dado que será añadida por el médico especialista en sesión no hace falta más + * información. * * @param patientiID * @param date * @param time - * @param testType Pudiera llegar a ser: Análisis de sangre, resonancias - * magnéticas y TAC + * @param testType Pudiera llegar a ser: Análisis de sangre, resonancias + * magnéticas y TAC * @param observations */ - public void addMedicalTest(int patientID, int doctorSpecialistID, Date date, LocalTime time, MedicalTestType testType, String observations) { - SpecialistDoctorJPA specDoctor = entman.find(SpecialistDoctorJPA.class, doctorSpecialistID); - PatientJPA pat = entman.find(PatientJPA.class, patientID); - - MedicalTestJPA mt = new MedicalTestJPA(0, date, time, observations, null, testType, pat, specDoctor); - - entman.persist(mt); + public String addMedicalTest(int patientID, int doctorSpecialistID, Date date, LocalTime time, + MedicalTestType testType, String observations) { + try { + SpecialistDoctorJPA specDoctor = entman.find(SpecialistDoctorJPA.class, doctorSpecialistID); + PatientJPA pat = entman.find(PatientJPA.class, patientID); + + MedicalTestJPA mt = new MedicalTestJPA(0, date, time, observations, null, testType, pat, specDoctor); + + entman.persist(mt); + return "ok"; + } catch (Exception ex) { + return ex.getMessage(); + } } /** @@ -188,10 +195,10 @@ public class MedicalTestFacadeBean implements MedicalTestFacadeRemote { return resp; } - + private MedicalTestJPA getMedicalTestJPA(int idMedicalTest) { - TypedQuery query = entman.createQuery("SELECT q from MedicalTestJPA q where q.id=:idMedicalTest", - MedicalTestJPA.class); + TypedQuery query = entman + .createQuery("SELECT q from MedicalTestJPA q where q.id=:idMedicalTest", MedicalTestJPA.class); query.setParameter("idMedicalTest", idMedicalTest); return query.getSingleResult(); } @@ -205,7 +212,7 @@ public class MedicalTestFacadeBean implements MedicalTestFacadeRemote { public void addImage(int idMedicalTest, String image) { MedicalTestJPA mt = this.getMedicalTestJPA(idMedicalTest); mt.setHighresimage(image); - + entman.persist(mt); } @@ -227,7 +234,7 @@ public class MedicalTestFacadeBean implements MedicalTestFacadeRemote { public void removeImage(int idMedicalTest) { MedicalTestJPA mt = this.getMedicalTestJPA(idMedicalTest); mt.setHighresimage(null); - + entman.persist(mt); } @@ -295,20 +302,20 @@ public class MedicalTestFacadeBean implements MedicalTestFacadeRemote { public List loadMedicalTestForSpecialistDoctor(int specialistDoctorID) { return this.loadMedicalTestForSpecialistDoctor(specialistDoctorID, -1); } - + @Override public List loadMedicalTestForFamilyDoctor(int familyDoctorID, int patientID) { List medicalTests = new ArrayList(); String extraQuery = ""; - - if(patientID > 0) { + + if (patientID > 0) { extraQuery = " and q.patient.id=:patientID"; } - - TypedQuery query = entman.createQuery( - "SELECT q from MedicalTestJPA q where q.patient.familyDoctor.id=:familyDoctorID " + extraQuery + " order by q.id desc", - MedicalTestJPA.class); - if(patientID > 0) { + + TypedQuery query = entman + .createQuery("SELECT q from MedicalTestJPA q where q.patient.familyDoctor.id=:familyDoctorID " + + extraQuery + " order by q.id desc", MedicalTestJPA.class); + if (patientID > 0) { query.setParameter("patientID", patientID); } query.setParameter("familyDoctorID", familyDoctorID); @@ -326,16 +333,16 @@ public class MedicalTestFacadeBean implements MedicalTestFacadeRemote { public List loadMedicalTestForSpecialistDoctor(int specialistDoctorID, int patientID) { List medicalTests = new ArrayList(); String extraQuery = ""; - - if(patientID > 0) { + + if (patientID > 0) { extraQuery = " and q.patient.id=:patientID"; } - TypedQuery query = entman.createQuery( - "SELECT q from MedicalTestJPA q where q.specialistDoctor.id=:specialistDoctorID " + extraQuery + " order by q.id desc", - MedicalTestJPA.class); - - if(patientID > 0) { + TypedQuery query = entman + .createQuery("SELECT q from MedicalTestJPA q where q.specialistDoctor.id=:specialistDoctorID " + + extraQuery + " order by q.id desc", MedicalTestJPA.class); + + if (patientID > 0) { query.setParameter("patientID", patientID); } query.setParameter("specialistDoctorID", specialistDoctorID); diff --git a/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeRemote.java b/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeRemote.java index f796aa4..60b3063 100644 --- a/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeRemote.java +++ b/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeRemote.java @@ -89,7 +89,7 @@ public interface MedicalTestFacadeRemote { * @param testType Pudiera llegar a ser: Análisis de sangre, resonancias magnéticas y TAC * @param observations */ - public void addMedicalTest(int patientID, int doctorSpecialistID, Date date, LocalTime time, MedicalTestType testType, String observations); + public String addMedicalTest(int patientID, int doctorSpecialistID, Date date, LocalTime time, MedicalTestType testType, String observations); /** * Recuperar una prueba médica por ID diff --git a/1.sources/MyHealth/src/managedbean/medicalTest/MedicalTestMBean.java b/1.sources/MyHealth/src/managedbean/medicalTest/MedicalTestMBean.java index 48ad5c1..e5a6e10 100644 --- a/1.sources/MyHealth/src/managedbean/medicalTest/MedicalTestMBean.java +++ b/1.sources/MyHealth/src/managedbean/medicalTest/MedicalTestMBean.java @@ -15,6 +15,7 @@ import org.primefaces.event.SelectEvent; import TO.MedicalTestTO; import TO.PatientTO; +import common.MedicalTestType; import common.UserType; import managedbean.common.ManagedBeanBase; import managedbean.common.SessionUtils; @@ -87,10 +88,12 @@ public class MedicalTestMBean extends ManagedBeanBase implements Serializable { this.medicalTests = getRemoteManagerMedicalTest().loadMedicalTestForPatient(userID); } else if (userType == UserType.SPECIALIST_DOCTOR) { // Cargar las pruebas que el doctor especialista ha creado - this.medicalTests = getRemoteManagerMedicalTest().loadMedicalTestForSpecialistDoctor(userID); + this.medicalTests = getRemoteManagerMedicalTest().loadMedicalTestForSpecialistDoctor(userID, + this.patIdSelected); } else if (userType == UserType.FAMILY_DOCTOR) { // Cargar las pruebas para los pacientes del doctor de familia en sesión - this.medicalTests = getRemoteManagerMedicalTest().loadMedicalTestForFamilyDoctor(userID); + this.medicalTests = getRemoteManagerMedicalTest().loadMedicalTestForFamilyDoctor(userID, + this.patIdSelected); } else { // Nothing todo this.medicalTests = new ArrayList(); @@ -121,7 +124,7 @@ public class MedicalTestMBean extends ManagedBeanBase implements Serializable { } /*************************************************** METODOS PARA LA VISTA */ - private Integer patIdSelected = -1; + private int patIdSelected = -1; public void setPatIdSelected(Integer value) { this.patIdSelected = value; @@ -132,22 +135,8 @@ public class MedicalTestMBean extends ManagedBeanBase implements Serializable { return this.patIdSelected; } - public String getTitlePanel() { - String res; - if (userType == UserType.PATIENT) { - // Cargar las pruebas para el paciente en sesión - res = "Realizadas al paciente: " + SessionUtils.getloggedOnUser().getName(); - } else if (userType == UserType.SPECIALIST_DOCTOR) { - // Cargar las pruebas que el doctor especialista ha creado - res = "Solicitadas por el médico especialista: " + SessionUtils.getloggedOnUser().getName(); - } else if (userType == UserType.FAMILY_DOCTOR) { - // Cargar las pruebas para los pacientes del doctor de familia en sesión - res = "Pacientes del médico de familia: " + SessionUtils.getloggedOnUser().getName(); - } else { - // Nothing todo - res = "Error"; - } - return res; + public boolean isSpecialistDoctor() { + return this.userType == UserType.SPECIALIST_DOCTOR; } public boolean isPatSelector() { @@ -156,13 +145,8 @@ public class MedicalTestMBean extends ManagedBeanBase implements Serializable { public void onSelectPatient(AjaxBehaviorEvent event) { this.selected = null; - if (userType == UserType.SPECIALIST_DOCTOR) { - // Cargar las pruebas que el doctor especialista ha creado - medicalTests = getRemoteManagerMedicalTest().loadMedicalTestForSpecialistDoctor(userID, this.patIdSelected); - } else if (userType == UserType.FAMILY_DOCTOR) { - // Cargar las pruebas para los pacientes del doctor de familia en sesión - medicalTests = getRemoteManagerMedicalTest().loadMedicalTestForFamilyDoctor(userID, this.patIdSelected); - } + this.loadMedicalTests(); + } public void onSelectMT(SelectEvent event) { @@ -175,9 +159,11 @@ public class MedicalTestMBean extends ManagedBeanBase implements Serializable { this.selected = new MedicalTestTO(); this.selected.setId(-1); this.selected.setObservations(""); + this.selected.setType(MedicalTestType.BLOOD_TEST); this.addNewMode = true; } else { - this.addFacesMessage(FacesMessage.SEVERITY_WARN, "Atención!", "Debe elegir un paciente al que añadir la prueba médica."); + this.addFacesMessage(FacesMessage.SEVERITY_WARN, "Atención!", + "Debe elegir un paciente al que añadir la prueba médica."); } } @@ -190,11 +176,46 @@ public class MedicalTestMBean extends ManagedBeanBase implements Serializable { } public boolean getViewCreate() { - return addNewMode; + return addNewMode && userType == UserType.SPECIALIST_DOCTOR; } public boolean getViewEdit() { return !addNewMode && this.selected != null; } + public List getMedicalTestTypes() { + ArrayList list = new ArrayList(); + list.add(MedicalTestType.BLOOD_TEST); + list.add(MedicalTestType.CT_SCAN); + list.add(MedicalTestType.MAGNETIC_RESONANCE_IMAGING); + return list; + } + + public String getMedicalTestTypeSelected() { + return this.selected.getType().getName(); + } + + public void setMedicalTestTypeSelected(String val) { + MedicalTestType mt; + if (val.equals(MedicalTestType.BLOOD_TEST)) { + mt = MedicalTestType.BLOOD_TEST; + } else if (val.equals(MedicalTestType.CT_SCAN)) { + mt = MedicalTestType.CT_SCAN; + } else { + mt = MedicalTestType.MAGNETIC_RESONANCE_IMAGING; + } + this.selected.setType(mt); + } + + public void save() { + String res = getRemoteManagerMedicalTest().addMedicalTest(this.patIdSelected, userID, this.selected.getDate(), + this.selected.getTime(), this.selected.getType(), this.selected.getObservations()); + if (res.equals("ok")) { + this.addFacesMessage(FacesMessage.SEVERITY_INFO, "Éxito", "Guardado correctamente"); + } else { + this.addFacesMessage(FacesMessage.SEVERITY_ERROR, "Error", res); + } + this.loadMedicalTests(); + } + } From 5fa3d1525a216176d401890169e3a3d1731a4bfc Mon Sep 17 00:00:00 2001 From: Roberto Orden Erena Date: Sun, 29 Dec 2019 13:10:38 +0100 Subject: [PATCH 7/8] =?UTF-8?q?Subida=20y=20gesti=C3=B3n=20de=20im=C3=A1ge?= =?UTF-8?q?nes=20completa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../docroot/medicaltest/MedicalTests.xhtml | 119 +++++++++++------- .../medicalTest/MedicalTestMBean.java | 40 ++++-- 2 files changed, 108 insertions(+), 51 deletions(-) diff --git a/1.sources/MyHealth/docroot/medicaltest/MedicalTests.xhtml b/1.sources/MyHealth/docroot/medicaltest/MedicalTests.xhtml index 10670a9..7218dc2 100644 --- a/1.sources/MyHealth/docroot/medicaltest/MedicalTests.xhtml +++ b/1.sources/MyHealth/docroot/medicaltest/MedicalTests.xhtml @@ -5,92 +5,125 @@ xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" - xmlns:p="http://primefaces.org/ui" - xmlns:o="http://omnifaces.org/ui"> + xmlns:p="http://primefaces.org/ui" xmlns:o="http://omnifaces.org/ui"> - -
-
+ +
+
+ - - - - - - - - + + + + + + + + - - - - - -
- -
+ + + + + +
+ +
-
-
- + +
+
+ +
-
Fecha:
+
Fecha:
-
Hora:
+
Hora:
-
Observaciones:
+
Observaciones:
- +
-
Tipo de prueba:
+
Tipo de prueba:
-
Imagen de alta resolución:
+
Imagen de alta resolución:
- + +
+ + +
+
+ +
+
+ +
+
- +
+ + +
-
Fecha:
+
Fecha:
- +
-
Hora:
+
Hora:
- +
-
Observaciones:
+
Observaciones:
-
Tipo de prueba:
+
Tipo de prueba:
- +
- +
- +
-
+
- +
\ No newline at end of file diff --git a/1.sources/MyHealth/src/managedbean/medicalTest/MedicalTestMBean.java b/1.sources/MyHealth/src/managedbean/medicalTest/MedicalTestMBean.java index e5a6e10..1ed7e98 100644 --- a/1.sources/MyHealth/src/managedbean/medicalTest/MedicalTestMBean.java +++ b/1.sources/MyHealth/src/managedbean/medicalTest/MedicalTestMBean.java @@ -2,16 +2,18 @@ package managedbean.medicalTest; import java.io.Serializable; import java.util.ArrayList; +import java.util.Base64; import java.util.List; import javax.annotation.PostConstruct; import javax.faces.application.FacesMessage; -import javax.faces.component.html.HtmlSelectOneMenu; import javax.faces.event.AjaxBehaviorEvent; import javax.faces.view.ViewScoped; import javax.inject.Named; +import org.primefaces.event.FileUploadEvent; import org.primefaces.event.SelectEvent; +import org.primefaces.model.UploadedFile; import TO.MedicalTestTO; import TO.PatientTO; @@ -32,6 +34,7 @@ public class MedicalTestMBean extends ManagedBeanBase implements Serializable { private MedicalTestTO selected; private PatientTO patSelected; private boolean addNewMode = false; + private UploadedFile imageUpload; public MedicalTestMBean() { } @@ -55,15 +58,31 @@ public class MedicalTestMBean extends ManagedBeanBase implements Serializable { } public void addImage() { - getRemoteManagerMedicalTest().addImage(this.selected.getId(), this.selected.getHighresimage()); + if(this.imageUpload != null ) { + String content = "data:"+imageUpload.getContentType()+";base64," + Base64.getEncoder().encodeToString(imageUpload.getContents()); + System.out.println("FILE Content base64: "); + System.out.println(content); + this.selected.setHighresimage(content); + getRemoteManagerMedicalTest().addImage(this.selected.getId(), content); + this.loadMedicalTests(); + this.imageUpload = null; + }else { + System.out.println("IMAGEN SUBIDA ES NULA"); + } + } + + public UploadedFile getImageUpload() { + return imageUpload; } - public void updateImage() { - getRemoteManagerMedicalTest().updateImage(this.selected.getId(), this.selected.getHighresimage()); + public void setImageUpload(UploadedFile imageUpload) { + this.imageUpload = imageUpload; } public void removeImage() { + this.selected.setHighresimage(null); getRemoteManagerMedicalTest().removeImage(this.selected.getId()); + this.loadMedicalTests(); } public MedicalTestTO getSelected() { @@ -97,8 +116,7 @@ public class MedicalTestMBean extends ManagedBeanBase implements Serializable { } else { // Nothing todo this.medicalTests = new ArrayList(); - } - System.out.println(this.medicalTests); + } } public List getPatients() { @@ -196,15 +214,21 @@ public class MedicalTestMBean extends ManagedBeanBase implements Serializable { } public void setMedicalTestTypeSelected(String val) { + System.out.println("********************************"); + System.out.println(val); + System.out.println("********************************"); MedicalTestType mt; - if (val.equals(MedicalTestType.BLOOD_TEST)) { + if (val.equals("BLOOD_TEST")) { mt = MedicalTestType.BLOOD_TEST; - } else if (val.equals(MedicalTestType.CT_SCAN)) { + } else if (val.equals("CT_SCAN")) { mt = MedicalTestType.CT_SCAN; } else { mt = MedicalTestType.MAGNETIC_RESONANCE_IMAGING; } this.selected.setType(mt); + System.out.println("********************************"); + System.out.println(this.selected.getType()); + System.out.println("********************************"); } public void save() { From b305c59054dbbfdd2cb3a7c27321812e0506b265 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20Garcia=20Nu=C3=B1ez?= Date: Sun, 29 Dec 2019 18:09:59 +0100 Subject: [PATCH 8/8] =?UTF-8?q?Si=20no=20est=C3=A1=20autorizado,=20redirig?= =?UTF-8?q?e=20por=20defecto=20a=20la=20p=C3=A1gina=20de=20login.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MyHealth/src/managedbean/common/AuthorizationFilter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1.sources/MyHealth/src/managedbean/common/AuthorizationFilter.java b/1.sources/MyHealth/src/managedbean/common/AuthorizationFilter.java index 3c149ec..9c00e5e 100644 --- a/1.sources/MyHealth/src/managedbean/common/AuthorizationFilter.java +++ b/1.sources/MyHealth/src/managedbean/common/AuthorizationFilter.java @@ -181,7 +181,7 @@ public class AuthorizationFilter implements Filter { } - resp.sendRedirect(req.getContextPath() + "/home.xhtml"); + resp.sendRedirect(req.getContextPath() + "/login.xhtml"); } catch (Exception e) { if (Exceptions.is(e, PersistenceException.class) == true) { if (ses != null)