diff --git a/omod-1.10/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_10/OrderUtil.java b/omod-1.10/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_10/OrderUtil.java index 005171757..624b112ba 100644 --- a/omod-1.10/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_10/OrderUtil.java +++ b/omod-1.10/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_10/OrderUtil.java @@ -43,16 +43,16 @@ public static List getOrders(Patient patient, CareSetting careSetting, Or Date asOfDate, boolean includeVoided) { OrderService os = Context.getOrderService(); - if (!INACTIVE.equals(status) && !ANY.equals(status)) { + if (!INACTIVE.equalsIgnoreCase(status) && !ANY.equalsIgnoreCase(status)) { return os.getActiveOrders(patient, orderType, careSetting, asOfDate); } - if (INACTIVE.equals(status)) { + if (INACTIVE.equalsIgnoreCase(status)) { includeVoided = false; } List orders = os.getOrders(patient, careSetting, orderType, includeVoided); - if (INACTIVE.equals(status)) { + if (INACTIVE.equalsIgnoreCase(status)) { removeActiveOrders(orders, asOfDate); } diff --git a/omod-1.10/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_10/TestOrderSubclassHandler1_10.java b/omod-1.10/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_10/TestOrderSubclassHandler1_10.java index a42d475fb..974a1f728 100644 --- a/omod-1.10/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_10/TestOrderSubclassHandler1_10.java +++ b/omod-1.10/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_10/TestOrderSubclassHandler1_10.java @@ -40,6 +40,7 @@ import io.swagger.models.properties.IntegerProperty; import io.swagger.models.properties.RefProperty; import io.swagger.models.properties.StringProperty; +import org.openmrs.module.webservices.rest.web.v1_0.resource.openmrs1_8.OrderResource1_8; /** * Exposes the {@link org.openmrs.TestOrder} subclass as a type in @@ -215,4 +216,14 @@ public static String getDisplay(TestOrder delegate) { .getResourceBySupportedClass(Order.class); return orderResource.getDisplayString(delegate); } + + /** + * @see OrderResource1_8#getStatus(org.openmrs.Order) + */ + @PropertyGetter("status") + public String getStatus(TestOrder delegate) { + OrderResource1_8 orderResource = (OrderResource1_8) Context.getService(RestService.class) + .getResourceBySupportedClass(Order.class); + return orderResource.getStatus(delegate); + } } diff --git a/omod-1.10/src/test/java/org/openmrs/module/webservices/rest/web/v1_0/controller/openmrs1_10/OrderController1_10Test.java b/omod-1.10/src/test/java/org/openmrs/module/webservices/rest/web/v1_0/controller/openmrs1_10/OrderController1_10Test.java index 323a4265c..1ac4ac72f 100644 --- a/omod-1.10/src/test/java/org/openmrs/module/webservices/rest/web/v1_0/controller/openmrs1_10/OrderController1_10Test.java +++ b/omod-1.10/src/test/java/org/openmrs/module/webservices/rest/web/v1_0/controller/openmrs1_10/OrderController1_10Test.java @@ -35,7 +35,9 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Date; +import java.util.LinkedList; import java.util.List; +import java.util.Map; import static org.hamcrest.Matchers.hasItems; import static org.hamcrest.Matchers.contains; @@ -486,6 +488,31 @@ public void shouldGetAllInActiveOrdersForAPatient() throws Exception { PropertyUtils.getProperty(resultList.get(1), "uuid").toString() }); assertThat(uuids, hasItems(expectedOrderUuids)); } + + @Test + public void doSearch_shouldGetAllInActiveOrdersForAPatient() throws Exception { + SimpleObject results = deserialize(handle(newGetRequest(getURI(), + new Parameter("patient", "da7f524f-27ce-4bb2-86d6-6d1d05312bd5"), new Parameter("status", "INACTIVE"), + new Parameter("careSetting", RestTestConstants1_10.CARE_SETTING_UUID)))); + assertEquals(4, Util.getResultsSize(results)); + + List resultsList = Util.getResultsList(results); + List> resultMap = new LinkedList>(); + for (Object o : resultsList) { + resultMap.add((Map) o); + } + + String[] expectedStatuses = new String[] {"inactive", "inactive", "inactive", "inactive"}; + List statusList = new LinkedList(); + for (Map m : resultMap) { + for (String key : m.keySet()) { + if (key.equals(RestConstants.PROPERTY_FOR_STATUS)) { + statusList.add((String) m.get(key)); + } + } + } + assertEquals(Arrays.asList(expectedStatuses), statusList); + } @Test public void shouldGetAllOrdersForAPatientInTheSpecifiedCareSetting() throws Exception { diff --git a/omod-1.8/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_8/DrugOrderSubclassHandler1_8.java b/omod-1.8/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_8/DrugOrderSubclassHandler1_8.java index f1d82939d..0242139da 100644 --- a/omod-1.8/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_8/DrugOrderSubclassHandler1_8.java +++ b/omod-1.8/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_8/DrugOrderSubclassHandler1_8.java @@ -206,4 +206,18 @@ public static String getDisplay(DrugOrder delegate) { // TODO dates, etc return ret.toString(); } + /** + * @see OrderResource1_8#getStatus(org.openmrs.Order) + * + * Gets the status of the DrugOrder + * + * @param delegate DrugOrder to check if ACTIVE or INACTIVE + * @return status String + */ + @PropertyGetter("status") + public String getStatus(DrugOrder delegate) { + OrderResource1_8 orderResource = (OrderResource1_8) Context.getService(RestService.class) + .getResourceBySupportedClass(Order.class); + return orderResource.getStatus(delegate); + } } diff --git a/omod-1.8/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_8/OrderResource1_8.java b/omod-1.8/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_8/OrderResource1_8.java index e087cb560..4a9ae7705 100644 --- a/omod-1.8/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_8/OrderResource1_8.java +++ b/omod-1.8/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_8/OrderResource1_8.java @@ -9,6 +9,7 @@ */ package org.openmrs.module.webservices.rest.web.v1_0.resource.openmrs1_8; +import java.util.Date; import java.util.List; import io.swagger.models.Model; @@ -134,6 +135,43 @@ public String getDisplayString(Order order) { return "[No Concept]"; return order.getConcept().getName().getName(); } + + /** + * Status field for {@link Order} + * + * @param order to check if ACTIVE or INACTIVE. + * @return Status + */ + @PropertyGetter("status") + public String getStatus(Order order) { + Date asOfDate = new Date(); + if (order.isDiscontinued(asOfDate) || isExpired(order, asOfDate)) { + return "inactive"; + } else { + return "active"; + } + } + + /** + * @param order to check the autoExpireDate + * @param checkDate to check against the order.autoExpireDate + * @return boolean true or false if the order.autoExpireDate is passed or not + */ + private boolean isExpired(Order order, Date checkDate) { + if (order.isVoided()) { + return false; + } else { + if (checkDate == null) { + checkDate = new Date(); + } + + if (checkDate.after(order.getDateCreated())) { + return order.getAutoExpireDate() != null && checkDate.after(order.getAutoExpireDate()); + } else { + return false; + } + } + } /** * @see org.openmrs.module.webservices.rest.web.resource.impl.BaseDelegatingResource#getRepresentationDescription(org.openmrs.module.webservices.rest.web.representation.Representation) diff --git a/omod-common/src/main/java/org/openmrs/module/webservices/rest/web/RestConstants.java b/omod-common/src/main/java/org/openmrs/module/webservices/rest/web/RestConstants.java index e2a204ae7..435bcb878 100644 --- a/omod-common/src/main/java/org/openmrs/module/webservices/rest/web/RestConstants.java +++ b/omod-common/src/main/java/org/openmrs/module/webservices/rest/web/RestConstants.java @@ -139,7 +139,12 @@ public class RestConstants { * resource that represents a full class hierarchy */ public static final String PROPERTY_FOR_TYPE = "type"; - + + /** + * Used in object representations to indicate the status of the order + */ + public static final String PROPERTY_FOR_STATUS = "status"; + // a ref is just a uuid/uri/display value public static String REPRESENTATION_REF = "ref"; diff --git a/omod-common/src/main/java/org/openmrs/module/webservices/rest/web/resource/impl/BaseDelegatingSubclassHandler.java b/omod-common/src/main/java/org/openmrs/module/webservices/rest/web/resource/impl/BaseDelegatingSubclassHandler.java index c7796267a..c39fccb48 100644 --- a/omod-common/src/main/java/org/openmrs/module/webservices/rest/web/resource/impl/BaseDelegatingSubclassHandler.java +++ b/omod-common/src/main/java/org/openmrs/module/webservices/rest/web/resource/impl/BaseDelegatingSubclassHandler.java @@ -131,6 +131,7 @@ public SimpleObject convertToRef(Subclass delegate) throws ConversionException { DelegatingResourceDescription rep = new DelegatingResourceDescription(); rep.addProperty("uuid"); rep.addProperty("display"); + rep.addProperty("status"); if (delegate instanceof OpenmrsData) { if (((OpenmrsData) delegate).isVoided()) rep.addProperty("voided");