/** * The contents of this file are subject to the OpenMRS Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://license.openmrs.org * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * * Copyright (C) OpenMRS, LLC. All Rights Reserved. */ package org.openmrs.web.controller.patient; import java.util.Date; import java.util.List; import javax.servlet.ServletException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.openmrs.Concept; import org.openmrs.Obs; import org.openmrs.Patient; import org.openmrs.PatientIdentifier; import org.openmrs.PersonAddress; import org.openmrs.PersonName; import org.openmrs.api.PatientService; import org.openmrs.api.context.Context; import org.springframework.orm.ObjectRetrievalFailureException; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @Controller public class PatientDashboardController { /** Logger for this class and subclasses */ protected final Log log = LogFactory.getLog(getClass()); /** * render the patient dashboard model and direct to the view */ @RequestMapping("/patientDashboard.form") protected String renderDashboard(@RequestParam(required = true, value = "patientId") Integer patientId, ModelMap map) throws Exception { // get the patient PatientService ps = Context.getPatientService(); Patient patient = null; try { patient = ps.getPatient(patientId); } catch (ObjectRetrievalFailureException noPatientEx) { log.warn("There is no patient with id: '" + patientId + "'", noPatientEx); } if (patient == null) throw new ServletException("There is no patient with id: '" + patientId + "'"); log.debug("patient: '" + patient + "'"); map.put("patient", patient); // determine cause of death String causeOfDeathOther = ""; if (Context.isAuthenticated()) { String propCause = Context.getAdministrationService().getGlobalProperty("concept.causeOfDeath"); Concept conceptCause = Context.getConceptService().getConcept(propCause); if (conceptCause != null) { List<Obs> obssDeath = Context.getObsService().getObservationsByPersonAndConcept(patient, conceptCause); if (obssDeath.size() == 1) { Obs obsDeath = obssDeath.iterator().next(); causeOfDeathOther = obsDeath.getValueText(); if (causeOfDeathOther == null) { log.debug("cod is null, so setting to empty string"); causeOfDeathOther = ""; } else { log.debug("cod is valid: " + causeOfDeathOther); } } else { log.debug("obssDeath is wrong size: " + obssDeath.size()); } } else { log.debug("No concept cause found"); } } // determine patient variation String patientVariation = ""; Concept reasonForExitConcept = Context.getConceptService().getConcept( Context.getAdministrationService().getGlobalProperty("concept.reasonExitedCare")); if (reasonForExitConcept != null) { List<Obs> patientExitObs = Context.getObsService().getObservationsByPersonAndConcept(patient, reasonForExitConcept); if (patientExitObs != null) { log.debug("Exit obs is size " + patientExitObs.size()); if (patientExitObs.size() == 1) { Obs exitObs = patientExitObs.iterator().next(); Concept exitReason = exitObs.getValueCoded(); Date exitDate = exitObs.getObsDatetime(); if (exitReason != null && exitDate != null) { patientVariation = "Exited"; } } else if (patientExitObs.size() > 1) { log.error("Too many reasons for exit - not putting data into model"); } } } map.put("patientVariation", patientVariation); // empty objects used to create blank template in the view map.put("emptyIdentifier", new PatientIdentifier()); map.put("emptyName", new PersonName()); map.put("emptyAddress", new PersonAddress()); map.put("causeOfDeathOther", causeOfDeathOther); return "patientDashboardForm"; } }