/** * 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.dwr; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Map; import java.util.Vector; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.openmrs.Concept; import org.openmrs.Drug; import org.openmrs.DrugOrder; import org.openmrs.Order; import org.openmrs.OrderType; import org.openmrs.Patient; import org.openmrs.api.APIException; import org.openmrs.api.OrderService; import org.openmrs.api.context.Context; import org.openmrs.util.OpenmrsConstants; import org.openmrs.util.OpenmrsUtil; public class DWROrderService { protected final Log log = LogFactory.getLog(getClass()); /** * This method would normally be return type void, but DWR requires a callback, so we know when * to refresh view */ public boolean createDrugOrder(Integer patientId, String drugId, Double dose, String units, String frequency, String startDate, String instructions) throws Exception { log.debug("PatientId is " + patientId + " and drugId is " + drugId + " and dose is " + dose + " and units are " + units + " and frequency is " + frequency + " and startDate is " + startDate + " and instructions are " + instructions); boolean ret = true; DrugOrder drugOrder = new DrugOrder(); Patient patient = Context.getPatientService().getPatient(patientId); Drug drug = Context.getConceptService().getDrugByNameOrId(drugId); if (drug == null) throw new DWRException("There is no drug with the name or drugId of: " + drugId); OrderType orderType = Context.getOrderService().getOrderType(OpenmrsConstants.ORDERTYPE_DRUG); if (orderType == null) throw new DWRException( "There is no 'Drug' Order Type in the system. This must be an Order Type with orderTypeId = " + OpenmrsConstants.ORDERTYPE_DRUG); drugOrder.setDrug(drug); Concept concept = drug.getConcept(); drugOrder.setConcept(concept); drugOrder.setOrderType(orderType); drugOrder.setPatient(patient); drugOrder.setDose(dose); drugOrder.setUnits(units); drugOrder.setFrequency(frequency); drugOrder.setInstructions(instructions); Date dStartDate = null; if (startDate != null) { SimpleDateFormat sdf = Context.getDateFormat(); try { dStartDate = sdf.parse(startDate); } catch (ParseException e) { throw new DWRException(e.getMessage()); } } drugOrder.setStartDate(dStartDate); drugOrder.setDateCreated(new Date()); drugOrder.setVoided(new Boolean(false)); try { Context.getOrderService().saveOrder(drugOrder); } catch (APIException e) { throw new DWRException(e.getMessage()); } log.debug("Finished creating new drug order"); return ret; } public void voidOrder(Integer orderId, String voidReason) { Order o = Context.getOrderService().getOrder(orderId); Context.getOrderService().voidOrder(o, voidReason); } public void discontinueOrder(Integer orderId, String discontinueReason, String discontinueDate) throws DWRException { Date dDiscDate = null; if (discontinueDate != null) { SimpleDateFormat sdf = Context.getDateFormat(); try { dDiscDate = sdf.parse(discontinueDate); } catch (ParseException e) { throw new DWRException(e.getMessage()); } } Order o = Context.getOrderService().getOrder(orderId); try { Context.getOrderService().discontinueOrder(o, Context.getConceptService().getConcept(discontinueReason), dDiscDate); } catch (APIException e) { throw new DWRException(e.getMessage()); } } public Vector<DrugOrderListItem> getDrugOrdersByPatientId(Integer patientId, int whatToShow) { Patient p = Context.getPatientService().getPatient(patientId); Vector<DrugOrderListItem> ret = new Vector<DrugOrderListItem>(); List<DrugOrder> drugOrders = Context.getOrderService().getDrugOrdersByPatient(p, whatToShow); if (drugOrders != null) { if (drugOrders.size() > 0) { for (DrugOrder drugOrder : drugOrders) { ret.add(new DrugOrderListItem(drugOrder)); } } } return ret; } public Vector<DrugOrderListItem> getCurrentDrugOrdersByPatientId(Integer patientId) { return getDrugOrdersByPatientId(patientId, OrderService.SHOW_CURRENT); } public Vector<DrugOrderListItem> getCompletedDrugOrdersByPatientId(Integer patientId) { return getDrugOrdersByPatientId(patientId, OrderService.SHOW_COMPLETE); } public String getUnitsByDrugId(Integer drugId) { String ret = ""; Drug drug = Context.getConceptService().getDrug(drugId); if (drug != null) { String drugUnits = drug.getUnits(); if (drugUnits != null) ret = drugUnits; } return ret; } public Vector<DrugSetItem> getCurrentDrugSet(Integer patientId, String drugSetId) { return getDrugSet(patientId, drugSetId, OrderService.SHOW_CURRENT); } public Vector<DrugSetItem> getCompletedDrugSet(Integer patientId, String drugSetId) { return getDrugSet(patientId, drugSetId, OrderService.SHOW_COMPLETE); } public Vector<DrugSetItem> getDrugSet(Integer patientId, String drugSetId, int whatToShow) { log.debug("In getDrugSet() method"); Vector<DrugSetItem> dsiList = null; Map<String, List<DrugOrder>> orders = this.getOrdersByDrugSet(patientId, drugSetId, ",", whatToShow); DrugSetItem dsi = new DrugSetItem(); Concept c = OpenmrsUtil.getConceptByIdOrName(drugSetId); dsi.setDrugSetId(c.getConceptId()); dsi.setDrugSetLabel(drugSetId.replace(" ", "_")); dsi.setName(c.getName(Context.getLocale()).getName()); if (orders != null) { List<DrugOrder> currList = orders.get(drugSetId); if (currList != null) { dsi.setDrugCount(currList.size()); } else { dsi.setDrugCount(0); } } else dsi.setDrugCount(0); dsiList = new Vector<DrugSetItem>(); dsiList.add(dsi); return dsiList; } public Vector<DrugSetItem> getCurrentOtherDrugSet(Integer patientId, String displayDrugSetIds) { return getOtherDrugSet(patientId, displayDrugSetIds, OrderService.SHOW_CURRENT); } public Vector<DrugSetItem> getCompletedOtherDrugSet(Integer patientId, String displayDrugSetIds) { return getOtherDrugSet(patientId, displayDrugSetIds, OrderService.SHOW_COMPLETE); } public Vector<DrugSetItem> getOtherDrugSet(Integer patientId, String displayDrugSetIds, int whatToShow) { DrugSetItem dsi = new DrugSetItem(); dsi.setDrugSetLabel("__other__"); dsi.setName("*"); Vector<DrugOrderListItem> otherItems = getOtherDrugOrdersByPatientIdDrugSetId(patientId, displayDrugSetIds, whatToShow); if (otherItems != null) { dsi.setDrugCount(otherItems.size()); } else dsi.setDrugCount(0); Vector<DrugSetItem> dsiList = new Vector<DrugSetItem>(); dsiList.add(dsi); return dsiList; } public Vector<DrugOrderListItem> getCurrentOtherDrugOrdersByPatientIdDrugSetId(Integer patientId, String displayDrugSetIds) { log.debug("in getCurrentOtherDrugOrdersBy...() method"); return this.getOtherDrugOrdersByPatientIdDrugSetId(patientId, displayDrugSetIds, OrderService.SHOW_CURRENT); } public Vector<DrugOrderListItem> getCompletedOtherDrugOrdersByPatientIdDrugSetId(Integer patientId, String displayDrugSetIds) { log.debug("in getCompletedOtherDrugOrdersBy...() method"); return this.getOtherDrugOrdersByPatientIdDrugSetId(patientId, displayDrugSetIds, OrderService.SHOW_COMPLETE); } public Vector<DrugOrderListItem> getOtherDrugOrdersByPatientIdDrugSetId(Integer patientId, String displayDrugSetIds, int whatToShow) { log.debug("in getOtherDrugOrdersBy...() method"); Vector<DrugOrderListItem> ret = null; Map<String, List<DrugOrder>> ordersBySetId = this.getOrdersByDrugSet(patientId, displayDrugSetIds, ",", whatToShow); if (ordersBySetId != null) { List<DrugOrder> orders = ordersBySetId.get("*"); if (orders != null) { for (DrugOrder order : orders) { if (ret == null) ret = new Vector<DrugOrderListItem>(); DrugOrderListItem drugOrderItem = new DrugOrderListItem(order); drugOrderItem.setDrugSetLabel("__other__"); ret.add(drugOrderItem); } } } return ret; } public Vector<DrugOrderListItem> getDrugOrdersByPatientIdDrugSetId(Integer patientId, String drugSetId, int whatToShow) { log.debug("Entering getCurrentDrugOrdersByPatientIdDrugSetId method with drugSetId: " + drugSetId); Vector<DrugOrderListItem> ret = null; Map<String, List<DrugOrder>> ordersBySetId = this.getOrdersByDrugSet(patientId, drugSetId, ",", whatToShow); if (ordersBySetId != null) { List<DrugOrder> orders = ordersBySetId.get(drugSetId); if (orders != null) { for (DrugOrder order : orders) { if (ret == null) ret = new Vector<DrugOrderListItem>(); DrugOrderListItem drugOrderItem = new DrugOrderListItem(order); drugOrderItem.setDrugSetId(OpenmrsUtil.getConceptByIdOrName(drugSetId).getConceptId()); drugOrderItem.setDrugSetLabel(drugSetId.replace(" ", "_")); ret.add(drugOrderItem); } } } return ret; } public Vector<DrugOrderListItem> getCurrentDrugOrdersByPatientIdDrugSetId(Integer patientId, String drugSetId) { return getDrugOrdersByPatientIdDrugSetId(patientId, drugSetId, OrderService.SHOW_CURRENT); } public Vector<DrugOrderListItem> getCompletedDrugOrdersByPatientIdDrugSetId(Integer patientId, String drugSetId) { return getDrugOrdersByPatientIdDrugSetId(patientId, drugSetId, OrderService.SHOW_COMPLETE); } public void voidCurrentDrugSet(Integer patientId, String drugSetId, String voidReason) { log.debug("in voidDrugSet() method"); Patient p = Context.getPatientService().getPatient(patientId); Context.getOrderService().voidDrugSet(p, drugSetId, voidReason, OrderService.SHOW_CURRENT); } public void voidCompletedDrugSet(Integer patientId, String drugSetId, String voidReason) { log.debug("in voidDrugSet() method"); Patient p = Context.getPatientService().getPatient(patientId); Context.getOrderService().voidDrugSet(p, drugSetId, voidReason, OrderService.SHOW_COMPLETE); } public void discontinueDrugSet(Integer patientId, String drugSetId, String discontinueReason, String discontinueDate) throws DWRException { log.debug("in discontinueDrugSet() method"); Patient p = Context.getPatientService().getPatient(patientId); Date discDate = null; if (discontinueDate != null) { SimpleDateFormat sdf = Context.getDateFormat(); try { discDate = sdf.parse(discontinueDate); } catch (ParseException e) { throw new DWRException(e.getMessage()); } } try { Context.getOrderService().discontinueDrugSet(p, drugSetId, Context.getConceptService().getConceptByIdOrName(discontinueReason), discDate); } catch (APIException e) { throw new DWRException(e.getMessage()); } } /* * This method would normally have a return type of void, but DWR requires a callback */ public boolean voidCurrentDrugOrders(Integer patientId, String voidReason) { log.debug("beginning method"); boolean ret = true; Patient p = Context.getPatientService().getPatient(patientId); List<DrugOrder> currentOrders = Context.getOrderService().getDrugOrdersByPatient(p, OrderService.SHOW_CURRENT); for (DrugOrder o : currentOrders) { Context.getOrderService().voidOrder(o, voidReason); } return ret; } /* * This method would normally have a return type of void, but DWR requires a callback */ public boolean discontinueCurrentDrugOrders(Integer patientId, String discontinueReason, String discontinueDate) throws DWRException { log.debug("beginning method"); boolean ret = true; Date discDate = null; if (discontinueDate != null) { SimpleDateFormat sdf = Context.getDateFormat(); try { discDate = sdf.parse(discontinueDate); } catch (ParseException e) { throw new DWRException(e.getMessage()); } } Patient p = Context.getPatientService().getPatient(patientId); List<DrugOrder> currentOrders = Context.getOrderService().getDrugOrdersByPatient(p, OrderService.SHOW_CURRENT); for (DrugOrder o : currentOrders) { try { Context.getOrderService().discontinueOrder(o, Context.getConceptService().getConcept(discontinueReason), discDate); } catch (APIException e) { throw new DWRException(e.getMessage()); } } return ret; } private Map<String, List<DrugOrder>> getOrdersByDrugSet(Integer patientId, String drugSetIds, String delimiter, int whatToShow) { Map<String, List<DrugOrder>> ret = null; if (patientId != null && drugSetIds != null) { Patient p = Context.getPatientService().getPatient(patientId); if (p != null) { List<DrugOrder> ordersToWorkWith = Context.getOrderService().getDrugOrdersByPatient(p, whatToShow); ret = Context.getOrderService().getDrugSetsByDrugSetIdList(ordersToWorkWith, drugSetIds, delimiter); } } return ret; } }