Mejoras en la gestión de pruebas médicas (filtros de búsqueda)

This commit is contained in:
Marcos Garcia Nuñez
2019-12-29 21:33:57 +01:00
parent ea5f0a4352
commit b6e4116d0f
5 changed files with 341 additions and 258 deletions

View File

@@ -1,10 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
<html xmlns="http://www.w3.org/1999/xhtml" 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">
<ui:composition template="../header.xhtml">
@@ -15,33 +12,41 @@
<h:form id="frmMT">
<p:panel id="mainPanel" header="Pruebas médicas">
<f:facet name="actions">
<h:commandLink rendered="#{mt.specialistDoctor}"
action="#{mt.addMT}" immediate="true" update="frmMT"
styleClass="ui-panel-titlebar-icon ui-corner-all ui-state-default">
<h:commandLink rendered="#{mt.specialistDoctor}" action="#{mt.addMT}" immediate="true" update="frmMT" styleClass="ui-panel-titlebar-icon ui-corner-all ui-state-default">
<h:outputText styleClass="ui-icon pi pi-plus" />
</h:commandLink>
<h:commandLink action="#{mt.clearFilteredPatient}" immediate="true" update="frmMT" styleClass="ui-panel-titlebar-icon ui-corner-all ui-state-default">
<h:outputText styleClass="ui-icon pi pi-times-circle" title="Quitar filtro y ver todos los registros" />
</h:commandLink>
</f:facet>
<p:selectOneMenu rendered="#{mt.specialistDoctor}" id="lazy" value="#{mt.patIdSelected}"
converter="omnifaces.SelectItemsConverter">
<p:ajax event="valueChange" listener="#{mt.onSelectPatient}"
update="frmMT" />
<f:selectItem itemLabel="Todos" itemValue="-1" />
<f:selectItems value="#{mt.patients}" var="el"
itemLabel="#{el.name} #{el.surname}" itemValue="#{el.id}" />
</p:selectOneMenu>
<p:orderList id="medicalTestList" value="#{mt.medicalTests}"
var="el" itemValue="#{el}" controlsLocation="none"
responsive="true">
<p:ajax event="select" listener="#{mt.onSelectMT}"
update="frmMT,frmNEW,frmImage" />
<o:converter converterId="omnifaces.ListConverter"
list="#{mt.medicalTests}" />
<p:autoComplete id="filterPatient" widgetVar="filterPatient" dropdown="true" value="#{mt.patientFilterSelected}" completeMethod="#{mt.completePatientFilter}" var="p"
itemLabel="#{p.displayName}" itemValue="#{p}" forceSelection="true" placeholder="Seleccione un paciente o teclee para buscar...">
<o:converter converterId="omnifaces.ListConverter" list="#{mt.patientWithTestList}" />
<f:selectItem itemLabel="Ver todos" itemValue="">
<p:column headerText="Num. Prof.">
<h:outputText value="Ver todos" />
</p:column>
</f:selectItem>
<p:column headerText="Num. Prof.">
<h:outputText value="#{p.personalIdentificationCode}" />
</p:column>
<p:column headerText="Nombre">
<h:outputText value="#{p.name}" />
</p:column>
<p:column headerText="Apellidos">
<h:outputText value="#{p.surname}" />
</p:column>
<p:ajax event="itemSelect" listener="#{mt.onSelectPatient}" update="medicalTestList" />
<p:ajax event="change" listener="#{mt.onChangePatient}" update="medicalTestList" />
</p:autoComplete>
<p:orderList id="medicalTestList" value="#{mt.medicalTests}" var="el" itemValue="#{el}" controlsLocation="none" responsive="true">
<p:ajax event="select" listener="#{mt.onSelectMT}" update="frmMT,frmNEW,frmImage" />
<o:converter converterId="omnifaces.ListConverter" list="#{mt.medicalTests}" />
<p:column>
<h:outputText value="#{el.onlyDate} - #{el.type.testTypeName}" />
<br />
<h:outputText rendered="#{mt.patIdSelected == -1}"
value="#{el.patient.name} #{el.patient.surname}"
style="font-size: 0.8em !important; font-style: italic;" />
<h:outputText rendered="#{mt.patientFilterSelected == null}" value="#{el.patient.displayName}" style="font-size: 0.8em !important; font-style: italic;" />
</p:column>
</p:orderList>
</p:panel>
@@ -49,76 +54,109 @@
</div>
<div class="ui-g-7 ui-md-7">
<h:form id="frmImage" enctype="multipart/form-data">
<p:panel rendered="#{mt.viewEdit}" id="detailPanel"
header="Detalle de prueba médica">
<p:confirmDialog global="true" showEffect="fade" hideEffect="fade">
<p:commandButton value="Sí" type="button" styleClass="ui-confirmdialog-yes" icon="pi pi-check" />
<p:commandButton value="No" type="button" styleClass="ui-confirmdialog-no" icon="pi pi-times" />
</p:confirmDialog>
<p:panel rendered="#{mt.viewEdit}" id="detailPanel" header="Detalle de prueba médica">
<div class="ui-g ui-fluid">
<div class="ui-g-4 ui-md-4">Fecha:</div>
<div class="ui-g-8 ui-md-8">
<h:outputText value="#{mt.selected.date}"></h:outputText>
<div class="ui-g-3">Fecha:</div>
<div class="ui-g-9">
<h:outputText value="#{mt.selected.date}" />
</div>
<div class="ui-g-4 ui-md-4">Hora:</div>
<div class="ui-g-8 ui-md-8">
<h:outputText value="#{mt.selected.time}"></h:outputText>
<div class="ui-g-3">Hora:</div>
<div class="ui-g-9">
<h:outputText value="#{mt.selected.time}" />
</div>
<div class="ui-g-4 ui-md-4">Observaciones:</div>
<div class="ui-g-8 ui-md-8">
<h:outputText escape="false" value="#{mt.selected.observations}"></h:outputText>
<div class="ui-g-3">Observaciones:</div>
<div class="ui-g-9">
<h:outputText escape="false" value="#{mt.selected.observations}" />
</div>
<div class="ui-g-4 ui-md-4">Tipo de prueba:</div>
<div class="ui-g-8 ui-md-8">
<h:outputText value="#{mt.selected.type.testTypeName}"></h:outputText>
<div class="ui-g-3">Tipo de prueba:</div>
<div class="ui-g-9">
<h:outputText value="#{mt.selected.type.testTypeName}" />
</div>
<div class="ui-g-4 ui-md-4">Imagen de alta resolución:</div>
<div class="ui-g-8 ui-md-8">
<div class="ui-g-12 ui-md-12">
<p:fileUpload rendered="#{mt.specialistDoctor}" value="#{mt.imageUpload}" mode="simple" skinSimple="true" />
<p:commandButton rendered="#{mt.specialistDoctor}" value="Subir imagen" ajax="false" action="#{mt.addImage}" update="frmImage"/>
</div>
<div class="ui-g-12 ui-md-12">
<img src="#{mt.selected.highresimage}" style="max-width: 300px !important;"></img>
</div>
<div class="ui-g-12 ui-md-12">
<p:commandButton rendered="#{mt.specialistDoctor}" action="#{mt.removeImage}"
disabled="#{mt.selected.highresimage == null}"
value="Eliminar" icon="pi pi-delete" update="frmImage"/>
</div>
<div class="ui-g-12">
<p:outputPanel rendered="#{mt.selected.type != 'BLOOD_TEST'}">
<div class="ui-g ui-fluid">
<div class="ui-g-3">Imagen de alta resolución:</div>
<div class="ui-g-5">
<p:fileUpload rendered="#{mt.specialistDoctor}" value="#{mt.imageUpload}" mode="simple" skinSimple="true" />
</div>
<div class="ui-g-2">
<p:commandButton rendered="#{mt.specialistDoctor}" value="Subir" icon="pi pi-upload" ajax="false" action="#{mt.addImage}" update="frmImage" />
</div>
<div class="ui-g-2">
<p:commandButton rendered="#{mt.specialistDoctor}" value="Eliminar" icon="pi pi-trash" action="#{mt.removeImage}" disabled="#{mt.selected.highresimage == null}"
update="frmImage">
<p:confirm header="Confirme la eliminación" message="¿Está seguro de que desea eliminar la imagen?" icon="pi pi-exclamation-triangle" />
</p:commandButton>
</div>
<div class="ui-g-12 ui-md-12" style="align-content: center; text-align: center;">
<img src="#{mt.selected.highresimage}" style="max-width: 300px !important;" />
</div>
</div>
</p:outputPanel>
</div>
</div>
</p:panel>
</h:form>
<h:form id="frmNEW">
<p:panel rendered="#{mt.viewCreate}" id="createPanel"
header="Detalle de prueba médica">
<p:growl id="mesgs" showDetail="true" closable="true" autoupdate="true" />
<p:panel rendered="#{mt.viewCreate}" id="createPanel" header="Añadir una nueva prueba médica">
<div class="ui-g ui-fluid">
<div class="ui-g-4 ui-md-4">Fecha:</div>
<div class="ui-g-8 ui-md-8">
<h:outputText value="#{mt.selected.date}"></h:outputText>
<div class="ui-g-3">Paciente:</div>
<div class="ui-g-9">
<p:autoComplete id="addTestPatient" dropdown="true" value="#{mt.patSelected}" completeMethod="#{mt.completePatient}" var="p" itemLabel="#{p.displayName}" itemValue="#{p}"
forceSelection="true" placeholder="Seleccione un paciente o teclee para buscar..." required="true"
requiredMessage="Por favor, seleccione un paciente al cual aádir la prueba.">
<o:converter converterId="omnifaces.ListConverter" list="#{mt.patientList}" />
<p:column headerText="Num. Prof.">
<h:outputText value="#{p.personalIdentificationCode}" />
</p:column>
<p:column headerText="Nombre">
<h:outputText value="#{p.name}" />
</p:column>
<p:column headerText="Apellidos">
<h:outputText value="#{p.surname}" />
</p:column>
</p:autoComplete>
</div>
<div class="ui-g-4 ui-md-4">Hora:</div>
<div class="ui-g-8 ui-md-8">
<h:outputText value="#{mt.selected.time}"></h:outputText>
<div class="ui-g-3">Fecha:</div>
<div class="ui-g-9">
<p:datePicker id="fecha" value="#{mt.selected.date}" pattern="dd/MM/yyyy" showIcon="true" showButtonBar="true" autocomplete="true" required="true"
requiredMessage="Especifique la fecha de la prueba médica" />
</div>
<div class="ui-g-4 ui-md-4">Observaciones:</div>
<div class="ui-g-8 ui-md-8">
<p:textEditor value="#{mt.selected.observations}"></p:textEditor>
<div class="ui-g-3">Hora:</div>
<div class="ui-g-9">
<p:datePicker id="hora" value="#{mt.selected.time}" timeOnly="true" pattern="HH:mm" showIcon="true" showButtonBar="true" autocomplete="true" required="true"
requiredMessage="Especifique la hora de la prueba médica">
<f:convertDateTime type="localTime" pattern="HH:mm" />
</p:datePicker>
</div>
<div class="ui-g-4 ui-md-4">Tipo de prueba:</div>
<div class="ui-g-8 ui-md-8">
<p:selectOneMenu value="#{mt.medicalTestTypeSelected}">
<f:selectItems value="#{mt.medicalTestTypes}" var="el"
itemLabel="#{el.testTypeName}" itemValue="#{el.name}" />
<div class="ui-g-3">Observaciones:</div>
<div class="ui-g-9">
<p:textEditor value="#{mt.selected.observations}" required="true" requiredMessage="Debe indicar las observaciones de la prueba" />
</div>
<div class="ui-g-3">Tipo de prueba:</div>
<div class="ui-g-9">
<p:selectOneMenu id="selUsertype" value="#{mt.selected.type}" required="true" unselectable="false" requiredMessage="Debe especificar un tipo de prueba médica">
<f:selectItems value="#{mt.medicalTestTypes}" var="item" itemLabel="#{item.testTypeName}" />
</p:selectOneMenu>
</div>
<div class="ui-g-4 ui-md-4"></div>
<div class="ui-g-4 ui-md-4">
<p:commandButton value="Guardar" action="#{mt.save}"
icon="pi pi-save" update="frmMT,frmImage,frmNEW" />
<div class="ui-g-4 ui-md-5" />
<div class="ui-g-4 ui-md-2">
<p:commandButton value="Guardar" action="#{mt.save}" icon="pi pi-save" update="frmMT,frmImage,frmNEW" />
</div>
<div class="ui-g-4 ui-md-4"></div>
<div class="ui-g-4 ui-md-5" />
</div>
</p:panel>
</h:form>