Gestión de especialidades con paginado.

This commit is contained in:
dalvarezgon
2020-01-03 13:19:58 +01:00
parent f81e3011e8
commit 3aa971c8a2
4 changed files with 136 additions and 103 deletions

View File

@@ -6,53 +6,57 @@
<ui:composition template="../header.xhtml">
<ui:define name="content">
<h:form id="frmEditSpecialties">
<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:growl id="mesgsEdit" showDetail="true" closable="true" autoupdate="true" />
<p:panel id="PanelMS" style="margin-bottom: 10px;" header="Modificación y borrado de especialidades">
<h:form id="frmListSpecialties">
<p:growl id="mesgsList" showDetail="true" closable="true" autoupdate="true" />
<p:panel id="PanelSpecialtiesList" style="margin-bottom: 10px;" header="Gestión de Especialidades">
<div class="ui-g ui-fluid">
<div class="ui-g-2 ui-md-2">
<p:outputLabel for="ms" />
<p:selectOneMenu id="ms" value="#{ManageSpecialities.medicalSpecialty}" converter="omnifaces.SelectItemsIndexConverter" effect="fold" editable="true" filter="true"
filterMatchMode="startsWith" placeholder="- Selecciona una especialidad -">
<f:selectItems value="#{ManageSpecialities.medicalSpecialtiesList}" var="ms" itemValue="#{ms}" itemLabel="#{ms.name}" />
<f:ajax render="name description" />
</p:selectOneMenu>
</div>
<div class="ui-g-1 ui-md-1">
<p:outputLabel value="Nombre: " for="name" />
</div>
<div class="ui-g-2 ui-md-2">
<p:inputText id="name" value="#{ManageSpecialities.medicalSpecialty.name}" converter="omnifaces.TrimConverter" readonly="false" required="true"
requiredMessage="Es necesario un nombre" />
</div>
<div class="ui-g-1 ui-md-1">
<p:outputLabel value="Descripción: " for="description" />
</div>
<div class="ui-g-4 ui-md-4">
<p:inputText id="description" value="#{ManageSpecialities.medicalSpecialty.description}" converter="omnifaces.TrimConverter" readonly="false" required="true"
requiredMessage="Es necesaria una descripción" />
</div>
<div class="ui-g-1 ui-md-1 ">
<p:commandButton validateClient="true" value="Guardar" update="frmEditSpecialties" action="#{ManageSpecialities.saveData}" icon="pi pi-save" />
</div>
<div class="ui-g-1 ui-md-1 ">
<p:commandButton validateClient="true" value="Borrar" update="frmEditSpecialties" action="#{ManageSpecialities.deleteData}" icon="fa fa-remove">
<p:confirm header="Confirme la eliminación" message="¿Está seguro de que desea eliminar la especialidad?" icon="pi pi-exclamation-triangle" />
</p:commandButton>
</div>
</div>
</p:panel>
<p:dataTable widgetVar="dtSpecialty" var="specialty" value="#{ManageSpecialities.lazyDataModelSpecialtiesList}" editable="true" lazy="true" paginator="true" rows="10"
paginatorPosition="bottom" paginatorAlwaysVisible="true" currentPageReportTemplate="Página {currentPage} de {totalPages}"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" rowsPerPageTemplate="10,20,30,40">
<p:ajax event="rowEdit" listener="#{ManageSpecialities.onRowEdit}" update=":frmListSpecialties:mesgsList" />
<p:ajax event="rowEditCancel" listener="#{ManageSpecialities.onRowCancel}" update=":frmListSpecialties:mesgsList" />
<p:column headerText="Nombre">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{specialty.name}" /></f:facet>
<f:facet name="input"><p:inputText value="#{specialty.name}" style="width:100%" label="Nombre"/></f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Descripción">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{specialty.description}" /></f:facet>
<f:facet name="input"><p:inputText value="#{specialty.description}" style="width:100%" label="Descripción"/></f:facet>
</p:cellEditor>
</p:column>
<p:column style="width:80px; text-align: center;" headerText="Editar">
<p:rowEditor />
</p:column>
<p:column style="width:80px; text-align: center;" headerText="Eliminar">
<p:commandLink class="pi pi-trash" actionListener="#{ManageSpecialities.deleteDataById(specialty.id)}" update=":frmListSpecialties:mesgsList frmListSpecialties">
<p:confirm header="Eliminar" message="¿Está seguro de que quiere borrar el centro?" icon="pi pi-exclamation-triangle"/>
</p:commandLink>
</p:column>
<f:facet name="paginatorBottomLeft">
<p:commandButton type="button" icon="pi pi-refresh" onclick="PF('dtSpecialty').getPaginator().setPage(0);" />
</f:facet>
</p:dataTable>
<p:confirmDialog global="true">
<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>
</div>
</p:panel>
</h:form>
<h:form id="frmAddSpecialties">
<p:growl id="mesgsAdd" showDetail="true" closable="true" autoupdate="true" />
<p:panel id="PanelNewMS" header="Alta de especialidades">
<p:panel id="PanelNewSpecialty" header="Alta de Especialidades">
<div class="ui-g ui-fluid">
<div class="ui-g-1 ui-md-1">
<p:outputLabel value="Nombre: " for="nameNew" />
@@ -69,7 +73,7 @@
requiredMessage="Es necesaria una descripción" />
</div>
<div class="ui-g-2 ui-md-2 ">
<p:commandButton validateClient="true" value="Crear" update="mesgsAdd frmAddSpecialties frmEditSpecialties" action="#{ManageSpecialities.insertData}" icon="pi pi-check" />
<p:commandButton validateClient="true" value="Crear" update="mesgsAdd frmListSpecialties frmAddSpecialties" action="#{ManageSpecialities.insertData}" icon="pi pi-check" />
</div>
</div>
</p:panel>

View File

@@ -118,6 +118,30 @@ public class SystemAdminFacadeBean implements SystemAdminFacadeRemote {
return usr;
}
public List<MedicalSpecialtyTO> listSpecialtiesPaged(int pageNumber, int pageSize) {
TypedQuery<MedicalSpecialtyJPA> query = entman.createQuery("SELECT s from MedicalSpecialtyJPA s order by s.name", MedicalSpecialtyJPA.class);
if (pageSize > 0) {
query.setFirstResult(pageNumber * pageSize);
query.setMaxResults(pageSize);
}
List<MedicalSpecialtyJPA> allJPA = query.getResultList();
List<MedicalSpecialtyTO> specialties = new ArrayList<MedicalSpecialtyTO>();
for (MedicalSpecialtyJPA item : allJPA) {
specialties.add(commonServices.getPOJOforMedicalSpecialtyJPA(item));
}
return specialties;
}
public Long getSpecialtiesCount() {
TypedQuery<Long> query = entman.createQuery("SELECT count(1) from MedicalSpecialtyJPA", Long.class);
return query.getSingleResult();
}
public MedicalSpecialtyTO updateSpecialty(int id, String name, String description) throws Exception {
MedicalSpecialtyJPA ms = entman.find(MedicalSpecialtyJPA.class, id);

View File

@@ -22,6 +22,10 @@ public interface SystemAdminFacadeRemote {
*/
public LoggedUserTO login(String id, String pwd);
public List<MedicalSpecialtyTO> listSpecialtiesPaged(int pageNumber, int pageSize);
public Long getSpecialtiesCount();
public MedicalSpecialtyTO updateSpecialty(int id, String name, String description) throws Exception;

View File

@@ -1,20 +1,25 @@
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.enterprise.context.RequestScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.view.ViewScoped;
import javax.inject.Named;
import TO.LoggedUserTO;
import org.primefaces.event.RowEditEvent;
import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;
import TO.MedicalSpecialtyTO;
import managedbean.common.ManagedBeanBase;
import managedbean.common.SessionUtils;
@Named("ManageSpecialities")
@RequestScoped
@ViewScoped
public class ManageSpecialitiesMBean extends ManagedBeanBase implements Serializable {
private static final long serialVersionUID = 1L;
@@ -23,34 +28,29 @@ public class ManageSpecialitiesMBean extends ManagedBeanBase implements Serializ
private String name;
private String description;
private MedicalSpecialtyTO medicalSpecialty;
private List<MedicalSpecialtyTO> medicalSpecialtiesList;
private LazyDataModel<MedicalSpecialtyTO> lazyDataModelSpecialtiesList;
public ManageSpecialitiesMBean() {
}
@PostConstruct
public void init() {
if (this.medicalSpecialty == null) {
this.medicalSpecialty = new MedicalSpecialtyTO();
}
// Recuperamos el usuario logeado actual
LoggedUserTO usr = null;
try {
usr = SessionUtils.getloggedOnUser();
this.lazyDataModelSpecialtiesList = new LazyDataModel<MedicalSpecialtyTO>() {
private static final long serialVersionUID = 1L;
if (usr == null)
this.addFacesMessage(FacesMessage.SEVERITY_ERROR, "Sesión no válida",
"Su sesión actual no es válida, por favor cierre su sesión y vuelva a logearse en el sistema.");
else {
this.refreshFormData();
@Override
public List<MedicalSpecialtyTO> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {
Long totalRowCount = getRemoteManagerSystemAdmin().getSpecialtiesCount();
this.setRowCount(totalRowCount.intValue());
return getRemoteManagerSystemAdmin().listSpecialtiesPaged((first / pageSize), pageSize);
}
} catch (Exception e) {
this.manageException(e);
}
};
}
private void refreshFormData() {
this.medicalSpecialtiesList = this.getRemoteManagerCommon().listAllMedicalSpecialties();
public LazyDataModel<MedicalSpecialtyTO> getlazyDataModelSpecialtiesList() {
return lazyDataModelSpecialtiesList;
}
public Integer getId() {
@@ -91,10 +91,6 @@ public class ManageSpecialitiesMBean extends ManagedBeanBase implements Serializ
}
}
public List<MedicalSpecialtyTO> getMedicalSpecialtiesList() {
return medicalSpecialtiesList;
}
public MedicalSpecialtyTO getMedicalSpecialty() {
return medicalSpecialty;
}
@@ -102,62 +98,68 @@ public class ManageSpecialitiesMBean extends ManagedBeanBase implements Serializ
public void setMedicalSpecialty(MedicalSpecialtyTO value) {
this.medicalSpecialty = value;
}
public void saveData() {
public void onRowEdit(RowEditEvent event) {
int error = 0;
if (this.medicalSpecialty.getName() == null || this.medicalSpecialty.getName().trim().length() == 0) {
this.addFacesMessage(FacesMessage.SEVERITY_WARN, "Nombre no relleno", "Por favor, escriba un nombre de especialidad.");
String newName = ((MedicalSpecialtyTO) event.getObject()).getName();
String newDescription = ((MedicalSpecialtyTO) event.getObject()).getDescription();
if (newName == null || newName.trim().length() == 0) {
this.addFacesMessage(FacesMessage.SEVERITY_WARN, "Nombre no relleno", "Por favor, escriba un nombre para la especialidad.");
error++;
}
if (this.medicalSpecialty.getDescription() == null || this.medicalSpecialty.getDescription().trim().length() == 0) {
if (newDescription == null || newDescription.trim().length() == 0) {
this.addFacesMessage(FacesMessage.SEVERITY_WARN, "Descripción no rellena", "Por favor, escriba una descripción.");
error++;
}
if (this.getRemoteManagerSystemAdmin().findSpecialtyByName(newName) != null) {
this.addFacesMessage(FacesMessage.SEVERITY_WARN, "Especialidad ya existente", "La especialidad ya se encuentra en la base de datos");
error++;
}
if (error == 0) {
try {
this.getRemoteManagerSystemAdmin().updateSpecialty(this.medicalSpecialty.getId(), this.medicalSpecialty.getName(), this.medicalSpecialty.getDescription());
this.showSpecialtyData(null);
this.refreshFormData();
this.getRemoteManagerSystemAdmin().updateSpecialty(((MedicalSpecialtyTO) event.getObject()).getId(),
((MedicalSpecialtyTO) event.getObject()).getName(), ((MedicalSpecialtyTO) event.getObject()).getDescription());
this.addFacesMessage(FacesMessage.SEVERITY_INFO, "Los datos se han guardado", "Los datos de la especialidad se han guardado correctamente.");
this.showSpecialtyData(null);
FacesMessage msg = new FacesMessage("Especialidad editada", ((MedicalSpecialtyTO) event.getObject()).getName());
FacesContext.getCurrentInstance().addMessage(null, msg);
} catch (Exception e) {
this.manageException(e);
}
}
}
public void deleteData() {
public void onRowCancel(RowEditEvent event) {
FacesMessage msg = new FacesMessage("Edición cancelada", ((MedicalSpecialtyTO) event.getObject()).getName());
FacesContext.getCurrentInstance().addMessage(null, msg);
}
public void deleteDataById(Integer id) throws IOException {
int error = 0;
try {
if (this.getRemoteManagerMedicalTest().getSpecialistDoctorByMedicalSpecialtyCount(id) > 0) {
this.addFacesMessage(FacesMessage.SEVERITY_ERROR, "No se puede eliminar esta especialidad",
"Existen especialistas que tienen asignada esta especialidad médica, por lo cual no puede ser eliminada. Asigne los especialista a otra especialidad para proceder a eliminar la especialidad a continuación.");
error++;
}
if (this.medicalSpecialty.getName() == null) {
this.addFacesMessage(FacesMessage.SEVERITY_WARN, "Nombre no relleno", "Por favor, escriba un nombre de especialidad.");
error++;
}
if (this.medicalSpecialty.getDescription() == null) {
this.addFacesMessage(FacesMessage.SEVERITY_WARN, "Descripción no rellena", "Por favor, escriba una descripción.");
error++;
}
if (this.getRemoteManagerMedicalTest().getSpecialistDoctorByMedicalSpecialtyCount(this.medicalSpecialty.getId()) > 0) {
this.addFacesMessage(FacesMessage.SEVERITY_ERROR, "No se puede eliminar esta especialidad",
"Existen especialistas que tienen asignada esta especialidad médica, por lo cual no puede ser eliminada. Asigne los especialista a otra especialidad para proceder a eliminar la especialidad a continuación.");
error++;
}
if (error == 0) {
try {
this.getRemoteManagerSystemAdmin().deleteSpecialty(this.medicalSpecialty.getId());
if (error == 0) {
this.getRemoteManagerSystemAdmin().deleteSpecialty(id);
this.showSpecialtyData(null);
this.refreshFormData();
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);
}
} catch (Exception e) {
this.manageException(e);
}
}
public void insertData() {
int error = 0;
@@ -179,7 +181,6 @@ public class ManageSpecialitiesMBean extends ManagedBeanBase implements Serializ
try {
this.getRemoteManagerSystemAdmin().insertSpecialty(name, description);
this.showSpecialtyData(null);
this.refreshFormData();
this.addFacesMessage(FacesMessage.SEVERITY_INFO, "Los datos se han guardado", "Los datos de la especialidad se han guardado correctamente.");
} catch (Exception e) {