Skip to content

Commit 1a4d49a

Browse files
RESTWS-907: Cannot search for inactive drug orders in RefApp 3.x
1 parent 294ff7f commit 1a4d49a

File tree

8 files changed

+82
-49
lines changed

8 files changed

+82
-49
lines changed

omod-1.10/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_10/DrugOrderSubclassHandler1_10.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.openmrs.module.webservices.rest.web.resource.impl.NeedsPaging;
3333
import org.openmrs.module.webservices.rest.web.response.ResourceDoesNotSupportOperationException;
3434
import org.openmrs.module.webservices.rest.web.v1_0.resource.openmrs1_8.DrugOrderSubclassHandler1_8;
35+
import org.openmrs.module.webservices.rest.web.v1_0.resource.openmrs1_8.OrderResource1_8;
3536

3637
/**
3738
* Exposes the {@link org.openmrs.DrugOrder} subclass as a type in
@@ -202,4 +203,14 @@ public static String getDisplay(DrugOrder delegate) {
202203

203204
return ret.toString();
204205
}
206+
207+
/**
208+
* @see OrderResource1_8#getStatus(org.openmrs.Order)
209+
*/
210+
@PropertyGetter("status")
211+
public String getStatus(DrugOrder delegate) {
212+
OrderResource1_8 orderResource = (OrderResource1_8) Context.getService(RestService.class)
213+
.getResourceBySupportedClass(Order.class);
214+
return orderResource.getStatus(delegate);
215+
}
205216
}

omod-1.10/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_10/TestOrderSubclassHandler1_10.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import io.swagger.models.properties.IntegerProperty;
4141
import io.swagger.models.properties.RefProperty;
4242
import io.swagger.models.properties.StringProperty;
43+
import org.openmrs.module.webservices.rest.web.v1_0.resource.openmrs1_8.OrderResource1_8;
4344

4445
/**
4546
* Exposes the {@link org.openmrs.TestOrder} subclass as a type in
@@ -215,4 +216,14 @@ public static String getDisplay(TestOrder delegate) {
215216
.getResourceBySupportedClass(Order.class);
216217
return orderResource.getDisplayString(delegate);
217218
}
219+
220+
/**
221+
* @see OrderResource1_8#getStatus(org.openmrs.Order)
222+
*/
223+
@PropertyGetter("status")
224+
public String getStatus(TestOrder delegate) {
225+
OrderResource1_8 orderResource = (OrderResource1_8) Context.getService(RestService.class)
226+
.getResourceBySupportedClass(Order.class);
227+
return orderResource.getStatus(delegate);
228+
}
218229
}

omod-1.10/src/test/java/org/openmrs/module/webservices/rest/web/v1_0/controller/openmrs1_10/OrderController1_10Test.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,7 @@
3737
import java.util.Date;
3838
import java.util.LinkedList;
3939
import java.util.List;
40-
import java.util.ListIterator;
4140
import java.util.Map;
42-
import java.util.stream.Collectors;
4341

4442
import static org.hamcrest.Matchers.hasItems;
4543
import static org.hamcrest.Matchers.contains;
@@ -508,7 +506,7 @@ public void doSearch_shouldGetAllInActiveOrdersForAPatient() throws Exception {
508506
List<String> statusList = new LinkedList<String>();
509507
for (Map<String, Object> m : resultMap) {
510508
for (String key : m.keySet()) {
511-
if (key.equals("status")) {
509+
if (key.equals(RestConstants.PROPERTY_FOR_STATUS)) {
512510
statusList.add((String) m.get(key));
513511
}
514512
}

omod-1.8/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_8/DrugOrderSubclassHandler1_8.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,4 +206,18 @@ public static String getDisplay(DrugOrder delegate) {
206206
// TODO dates, etc
207207
return ret.toString();
208208
}
209+
/**
210+
* @see OrderResource1_8#getStatus(org.openmrs.Order)
211+
*
212+
* Gets the status of the DrugOrder
213+
*
214+
* @param delegate DrugOrder to check if ACTIVE or INACTIVE
215+
* @return status String
216+
*/
217+
@PropertyGetter("status")
218+
public String getStatus(DrugOrder delegate) {
219+
OrderResource1_8 orderResource = (OrderResource1_8) Context.getService(RestService.class)
220+
.getResourceBySupportedClass(Order.class);
221+
return orderResource.getStatus(delegate);
222+
}
209223
}

omod-1.8/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_8/OrderResource1_8.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
*/
1010
package org.openmrs.module.webservices.rest.web.v1_0.resource.openmrs1_8;
1111

12+
import java.util.Date;
1213
import java.util.List;
1314

1415
import io.swagger.models.Model;
@@ -134,6 +135,43 @@ public String getDisplayString(Order order) {
134135
return "[No Concept]";
135136
return order.getConcept().getName().getName();
136137
}
138+
139+
/**
140+
* Status field for {@link Order}
141+
*
142+
* @param order to check if ACTIVE or INACTIVE.
143+
* @return Status
144+
*/
145+
@PropertyGetter("status")
146+
public String getStatus(Order order) {
147+
Date asOfDate = new Date();
148+
if (order.isDiscontinued(asOfDate) || isExpired(order, asOfDate)) {
149+
return "inactive";
150+
} else {
151+
return "active";
152+
}
153+
}
154+
155+
/**
156+
* @param order to check the autoExpireDate
157+
* @param checkDate to check against the order.autoExpireDate
158+
* @return boolean true or false if the order.autoExpireDate is passed or not
159+
*/
160+
private boolean isExpired(Order order, Date checkDate) {
161+
if (order.isVoided()) {
162+
return false;
163+
} else {
164+
if (checkDate == null) {
165+
checkDate = new Date();
166+
}
167+
168+
if (checkDate.after(order.getDateCreated())) {
169+
return order.getAutoExpireDate() != null && checkDate.after(order.getAutoExpireDate());
170+
} else {
171+
return false;
172+
}
173+
}
174+
}
137175

138176
/**
139177
* @see org.openmrs.module.webservices.rest.web.resource.impl.BaseDelegatingResource#getRepresentationDescription(org.openmrs.module.webservices.rest.web.representation.Representation)

omod-common/src/main/java/org/openmrs/module/webservices/rest/web/RestConstants.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,12 @@ public class RestConstants {
139139
* resource that represents a full class hierarchy
140140
*/
141141
public static final String PROPERTY_FOR_TYPE = "type";
142-
142+
143+
/**
144+
* Used in object representations to indicate the status of the order
145+
*/
146+
public static final String PROPERTY_FOR_STATUS = "status";
147+
143148
// a ref is just a uuid/uri/display value
144149
public static String REPRESENTATION_REF = "ref";
145150

omod-common/src/main/java/org/openmrs/module/webservices/rest/web/resource/impl/BaseDelegatingResource.java

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import java.util.ArrayList;
1515
import java.util.Collection;
1616
import java.util.Collections;
17-
import java.util.Date;
1817
import java.util.HashMap;
1918
import java.util.HashSet;
2019
import java.util.Iterator;
@@ -26,14 +25,11 @@
2625

2726
import org.apache.commons.beanutils.PropertyUtils;
2827
import org.apache.commons.collections.CollectionUtils;
29-
import org.apache.commons.lang.ObjectUtils;
3028
import org.apache.commons.lang.StringUtils;
31-
import org.apache.commons.lang.time.DateUtils;
3229
import org.apache.commons.logging.Log;
3330
import org.apache.commons.logging.LogFactory;
3431
import org.hibernate.proxy.HibernateProxy;
3532
import org.openmrs.OpenmrsObject;
36-
import org.openmrs.Order;
3733
import org.openmrs.api.context.Context;
3834
import org.openmrs.module.ModuleUtil;
3935
import org.openmrs.module.webservices.rest.SimpleObject;
@@ -402,7 +398,6 @@ public SimpleObject asRepresentation(T delegate, Representation representation)
402398
else
403399
simple = (SimpleObject) meth.invoke(handler, delegate, representation);
404400

405-
maybeDecorateWithStatus(simple, delegate);
406401
maybeDecorateWithType(simple, delegate);
407402
decorateWithResourceVersion(simple, representation);
408403

@@ -446,46 +441,6 @@ private void maybeDecorateWithType(SimpleObject simple, T delegate) {
446441
if (hasTypesDefined())
447442
simple.add(RestConstants.PROPERTY_FOR_TYPE, getTypeName(delegate));
448443
}
449-
450-
/**
451-
* If this resource is an Order, add a STATUS field to the REST response which indicates whether the order is ACTIVE or INACTIVE.
452-
*
453-
* @param simple simplified representation which will be decorated with the status
454-
* @param delegate the object that simple represents
455-
*/
456-
457-
private void maybeDecorateWithStatus(SimpleObject simple, T delegate) {
458-
if (delegate instanceof Order) {
459-
Date asOfDate = new Date();
460-
Order order = (Order) delegate;
461-
if (order.isDiscontinued(asOfDate) || isExpired(order, asOfDate)) {
462-
simple.add("status", "inactive");
463-
} else {
464-
simple.add("status", "active");
465-
}
466-
}
467-
}
468-
469-
/**
470-
* @param order to check the autoExpireDate
471-
* @param checkDate to check against the order.autoExpireDate
472-
* @return boolean true or false if the order.autoExpireDate is passed or not
473-
*/
474-
private boolean isExpired(Order order, Date checkDate) {
475-
if (order.isVoided()) {
476-
return false;
477-
} else {
478-
if (checkDate == null) {
479-
checkDate = new Date();
480-
}
481-
482-
if (checkDate.after(order.getDateCreated())) {
483-
return order.getAutoExpireDate() != null && checkDate.after(order.getAutoExpireDate());
484-
} else {
485-
return false;
486-
}
487-
}
488-
}
489444

490445
/**
491446
* If this resources supports subclasses, this method gets the user-friendly type name for the

omod-common/src/main/java/org/openmrs/module/webservices/rest/web/resource/impl/BaseDelegatingSubclassHandler.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ public SimpleObject convertToRef(Subclass delegate) throws ConversionException {
131131
DelegatingResourceDescription rep = new DelegatingResourceDescription();
132132
rep.addProperty("uuid");
133133
rep.addProperty("display");
134+
rep.addProperty("status");
134135
if (delegate instanceof OpenmrsData) {
135136
if (((OpenmrsData) delegate).isVoided())
136137
rep.addProperty("voided");

0 commit comments

Comments
 (0)