/*
* PatientView
*
* Copyright (c) Worth Solutions Limited 2004-2013
*
* This file is part of PatientView.
*
* PatientView is free software: you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version.
* PatientView is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License along with PatientView in a file
* titled COPYING. If not, see <http://www.gnu.org/licenses/>.
*
* @package PatientView
* @link http://www.patientview.org
* @author PatientView <info@patientview.org>
* @copyright Copyright (c) 2004-2013, Worth Solutions Limited
* @license http://www.gnu.org/licenses/gpl-3.0.html The GNU General Public License V3.0
*/
package org.patientview.radar.web.pages.patient;
import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
import org.apache.wicket.datetime.markup.html.basic.DateLabel;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.data.DataView;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.patientview.model.Patient;
import org.patientview.model.generic.DiseaseGroup;
import org.patientview.radar.model.user.DemographicsUserDetail;
import org.patientview.radar.model.user.User;
import org.patientview.radar.service.DemographicsManager;
import org.patientview.radar.service.DiagnosisManager;
import org.patientview.radar.web.RadarApplication;
import org.patientview.radar.web.RadarSecuredSession;
import org.patientview.radar.web.dataproviders.DemographicsDataProvider;
import org.patientview.radar.web.pages.BasePage;
import org.patientview.radar.web.pages.patient.alport.AlportPatientPage;
import org.patientview.radar.web.pages.patient.hnf1b.HNF1BPatientPage;
import org.patientview.radar.web.pages.patient.srns.SrnsPatientPage;
import java.util.Date;
@AuthorizeInstantiation({User.ROLE_PROFESSIONAL, User.ROLE_SUPER_USER})
public class ExistingPatientsListingPage extends BasePage {
@SpringBean
private DemographicsManager demographicsManager;
@SpringBean
private DiagnosisManager diagnosisManager;
public ExistingPatientsListingPage() {
DemographicsDataProvider demographicsDataProvider = new DemographicsDataProvider(demographicsManager,
RadarSecuredSession.get().getUser());
// List existing patients
add(new DataView<Patient>("patients", demographicsDataProvider) {
@Override
protected void populateItem(Item<Patient> item) {
// Populate fields
Patient patient = item.getModelObject();
// TODO: this is terrible as we need to check disease groups to know where to send it - well done abul
// TODO: need to implement a patient base page with the constructors needed and then have an enum map
// TODO: that maps disease ids to the page they need to go to so we dont need all these ifs
if (patient.getDiseaseGroup() != null && (patient.getDiseaseGroup().getId().equals(
DiseaseGroup.SRNS_DISEASE_GROUP_ID) || patient.getDiseaseGroup().getId().
equals(DiseaseGroup.MPGN_DISEASEGROUP_ID))) {
item.add(new BookmarkablePageLink<SrnsPatientPage>("edit", SrnsPatientPage.class,
SrnsPatientPage.getParameters(patient)));
} else if (patient.getDiseaseGroup() != null && patient.getDiseaseGroup().getId().equals(
DiseaseGroup.ALPORT_DISEASEGROUP_ID)) {
item.add(new BookmarkablePageLink<AlportPatientPage>("edit", AlportPatientPage.class,
AlportPatientPage.getPageParameters(patient)));
} else if (patient.getDiseaseGroup() != null && patient.getDiseaseGroup().getId().equals(
DiseaseGroup.HNF1B_DISEASEGROUP_ID)) {
item.add(new BookmarkablePageLink<AlportPatientPage>("edit", HNF1BPatientPage.class,
HNF1BPatientPage.getPageParameters(patient)));
} else {
item.add(new BookmarkablePageLink<GenericPatientPage>("edit", GenericPatientPage.class,
GenericPatientPage.getPageParameters(patient)));
}
item.add(new Label("surname"), new Label("forename"));
item.add(DateLabel.forDatePattern("dob", RadarApplication.DATE_PATTERN2));
item.add(new Label("id", Long.toString(patient.getRadarNo())));
String diseaseGroup = "";
if (patient.getDiseaseGroup() != null) {
diseaseGroup = patient.getDiseaseGroup().getId();
}
item.add(new Label("diagnosis", diseaseGroup));
item.add(new Label("nhsNumber", patient.getNhsno()).setEscapeModelStrings(false));
item.add(new Label("hospitalnumber"));
item.add(DateLabel.forDatePattern("dateReg", RadarApplication.DATE_PATTERN2));
item.add(new Label("status.abbreviation", patient.getStatusModel() != null
? patient.getStatusModel().getAbbreviation() : ""));
item.add(new Label("renalUnit.name"));
item.add(new Label("rrtModalityEunm"));
DemographicsUserDetail demographicsUserDetail =
demographicsManager.getDemographicsUserDetail(patient.getNhsno(), patient.getUnitcode());
item.add(new Label("lastverificationdate",
formatDate(demographicsUserDetail.getLastverificationdate())));
item.add(new Label("email", patient.getEmailAddress()));
item.add(new Label("lastlogon", formatDate(demographicsUserDetail.getLastlogon())));
item.add(new Label("accountlocked", "" + (demographicsUserDetail.isAccountlocked() ? "Yes" : "No")));
}
private String formatDate(Date date){
return date == null? "" : DateFormatUtils.format(date, RadarApplication.DATE_PATTERN2);
}
});
}
}