Skip to content

Commit

Permalink
Trunk 5682 (openmrs#3054)
Browse files Browse the repository at this point in the history
* TRUNK-5682, add includeNullFufillerStatus param to OrderSearchCriteria
  • Loading branch information
cioan authored and mogoodrich committed Nov 15, 2019
1 parent 9cc6c71 commit 4c9a94a
Show file tree
Hide file tree
Showing 5 changed files with 93 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import org.hibernate.criterion.Disjunction;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;
import org.hibernate.criterion.SimpleExpression;
import org.hibernate.metadata.ClassMetadata;
import org.hibernate.transform.DistinctRootEntityResultTransformer;
import org.openmrs.CareSetting;
Expand Down Expand Up @@ -196,9 +197,27 @@ public List<Order> getOrders(OrderSearchCriteria searchCriteria) {
if (searchCriteria.getAction() != null) {
crit.add(Restrictions.eq("action", searchCriteria.getAction()));
}
if (searchCriteria.getFulfillerStatus() != null) {
crit.add(Restrictions.eq("fulfillerStatus", searchCriteria.getFulfillerStatus()));
}
SimpleExpression fulfillerStatusExpr = null;
if (searchCriteria.getFulfillerStatus() != null) {
fulfillerStatusExpr = Restrictions.eq("fulfillerStatus", searchCriteria.getFulfillerStatus());
}
Criterion fulfillerStatusCriteria = null;
if (searchCriteria.getIncludeNullFulfillerStatus() != null ) {
if (searchCriteria.getIncludeNullFulfillerStatus().booleanValue() == true ) {
fulfillerStatusCriteria = Restrictions.isNull("fulfillerStatus");
} else {
fulfillerStatusCriteria = Restrictions.isNotNull("fulfillerStatus");
}
}

if (fulfillerStatusExpr != null && fulfillerStatusCriteria != null) {
crit.add(Restrictions.or(fulfillerStatusExpr, fulfillerStatusCriteria));
} else if (fulfillerStatusExpr != null) {
crit.add(fulfillerStatusExpr);
} else if ( fulfillerStatusCriteria != null ){
crit.add(fulfillerStatusCriteria);
}

if (searchCriteria.getExcludeCanceledAndExpired() == true) {
Calendar cal = Calendar.getInstance();
// exclude expired orders (include only orders with autoExpireDate = null or autoExpireDate in the future)
Expand Down
18 changes: 18 additions & 0 deletions api/src/main/java/org/openmrs/parameter/OrderSearchCriteria.java
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,14 @@ public class OrderSearchCriteria {
*/
private final Order.FulfillerStatus fulfillerStatus;

/**
* Matches on orders with fulfiller_status = null
* This parameter could work in conjunction with fulfillerStatus.
* If fulfillerStatus is specified then includeNullFulfillerStatus=true would include
* all orders where fulfillerStatus=null OR fulfillerStatus = specified value
*/
private final Boolean includeNullFulfillerStatus;

/**
* Matches on action
*/
Expand All @@ -86,6 +94,7 @@ public OrderSearchCriteria(Patient patient, CareSetting careSetting, Collection<
Date canceledOrExpiredOnOrBeforeDate,
Order.Action action,
Order.FulfillerStatus fulfillerStatus,
Boolean includeNullFulfillerStatus,
boolean excludeCanceledAndExpired, boolean includeVoided) {
this.patient = patient;
this.careSetting = careSetting;
Expand All @@ -98,6 +107,7 @@ public OrderSearchCriteria(Patient patient, CareSetting careSetting, Collection<
this.canceledOrExpiredOnOrBeforeDate = canceledOrExpiredOnOrBeforeDate;
this.action = action;
this.fulfillerStatus = fulfillerStatus;
this.includeNullFulfillerStatus = includeNullFulfillerStatus;
this.excludeCanceledAndExpired = excludeCanceledAndExpired;
this.includeVoided = includeVoided;
}
Expand Down Expand Up @@ -172,6 +182,14 @@ public Order.FulfillerStatus getFulfillerStatus() {
return fulfillerStatus;
}

/**
*
* @return include(OR) orders with fulfiller_status = null
*/
public Boolean getIncludeNullFulfillerStatus() {
return includeNullFulfillerStatus;
}

public boolean getExcludeCanceledAndExpired() {
return excludeCanceledAndExpired;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ public class OrderSearchCriteriaBuilder {

private Order.FulfillerStatus fulfillerStatus;

private Boolean includeNullFulfillerStatus;

private boolean excludeCanceledAndExpired;

private boolean includeVoided;
Expand Down Expand Up @@ -151,6 +153,15 @@ public OrderSearchCriteriaBuilder setFulfillerStatus(Order.FulfillerStatus fulfi
return (this);
}

/**
*
* @param includeNullFulfillerStatus
* @return
*/
public OrderSearchCriteriaBuilder setIncludeNullFulfillerStatus(Boolean includeNullFulfillerStatus) {
this.includeNullFulfillerStatus = includeNullFulfillerStatus;
return (this);
}

public OrderSearchCriteriaBuilder setExcludeCanceledAndExpired(boolean excludeCanceledAndExpired) {
this.excludeCanceledAndExpired = excludeCanceledAndExpired;
Expand All @@ -173,7 +184,7 @@ public OrderSearchCriteriaBuilder setIncludeVoided(boolean includeVoided) {
public OrderSearchCriteria build() {
return new OrderSearchCriteria(patient, careSetting, concepts, orderTypes, activatedOnOrBeforeDate,
activatedOnOrAfterDate, isStopped, autoExpireOnOrBeforeDate, canceledOrExpiredOnOrBeforeDate,
action, fulfillerStatus, excludeCanceledAndExpired, includeVoided);
action, fulfillerStatus, includeNullFulfillerStatus, excludeCanceledAndExpired, includeVoided);
}
}

39 changes: 39 additions & 0 deletions api/src/test/java/org/openmrs/api/OrderServiceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -2120,6 +2120,45 @@ public void getOrders_shouldreturnOrdersWithFulfillerStatusCompleted() {
}
}

/**
* @see OrderService#(OrderSearchCriteria)
*/
@Test
public void getOrders_shouldReturnOrdersWithFulfillerStatusReceivedOrNull() {
OrderSearchCriteria orderSearchCriteria = new OrderSearchCriteriaBuilder().setFulfillerStatus(Order.FulfillerStatus.valueOf("RECEIVED")).setIncludeNullFulfillerStatus(new Boolean(true)).build();
List<Order> orders = orderService.getOrders(orderSearchCriteria);
assertEquals(12, orders.size());
for (Order order : orders) {
assertTrue(order.getFulfillerStatus() == Order.FulfillerStatus.RECEIVED ||
order.getFulfillerStatus() == null);
}
}

/**
* @see OrderService#(OrderSearchCriteria)
*/
@Test
public void getOrders_shouldReturnOrdersWithFulfillerStatusNotNull() {
OrderSearchCriteria orderSearchCriteria = new OrderSearchCriteriaBuilder().setIncludeNullFulfillerStatus(new Boolean(false)).build();
List<Order> orders = orderService.getOrders(orderSearchCriteria);
assertEquals(3, orders.size());
for (Order order : orders) {
assertTrue(order.getFulfillerStatus() != null);
}
}

/**
* @see OrderService#(OrderSearchCriteria)
*/
@Test
public void getOrders_shouldReturnOrdersWithFulfillerStatusNull() {
OrderSearchCriteria orderSearchCriteria = new OrderSearchCriteriaBuilder().setIncludeNullFulfillerStatus(new Boolean(true)).build();
List<Order> orders = orderService.getOrders(orderSearchCriteria);
assertEquals(10, orders.size());
for (Order order : orders) {
assertTrue(order.getFulfillerStatus() == null);
}
}
/**
* @see OrderService#(OrderSearchCriteria)
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -367,9 +367,9 @@
<orders order_id="444" order_type_id="1" order_number="444" urgency="ROUTINE" order_action="NEW" concept_id="88" orderer="1" creator="1" date_activated="2008-06-25 00:00:00.0" date_created="2008-06-25 00:00:00.0" voided="false" patient_id="2" uuid="9c21e407-697b-11e3-bd76-0800271c1b75" care_setting="1" encounter_id="6" />
<orders order_id="5" order_type_id="1" order_number="5" urgency="ROUTINE" order_action="NEW" concept_id="3" orderer="1" instructions="1x minutely" date_activated="2008-08-19 10:24:10.0" creator="1" date_created="2008-08-19 10:24:10.0" voided="false" patient_id="2" uuid="0c96f25c-4949-4f72-9931-d808fbc226db" care_setting="1" encounter_id="6" />
<orders order_id="6" order_type_id="2" order_number="ORD-6" urgency="ROUTINE" order_action="NEW" concept_id="5497" orderer="1" fulfiller_status="COMPLETED" date_activated="2008-09-19 09:24:10.0" auto_expire_date="2008-09-26 09:24:10.0" creator="1" date_created="2008-09-19 09:24:10.0" voided="false" patient_id="2" uuid="1c96f25c-4949-4f72-9931-d808fbc226de" care_setting="1" encounter_id="6" />
<orders order_id="7" order_type_id="2" order_number="ORD-7" urgency="ROUTINE" order_action="NEW" concept_id="5497" orderer="1" date_activated="2008-10-19 09:24:10.0" creator="1" date_created="2008-10-19 09:24:10.0" voided="false" patient_id="2" uuid="2c96f25c-4949-4f72-9931-d808fbc226df" care_setting="1" encounter_id="6" />
<orders order_id="7" order_type_id="2" order_number="ORD-7" urgency="ROUTINE" order_action="NEW" concept_id="5497" orderer="1" fulfiller_status="RECEIVED" date_activated="2008-10-19 09:24:10.0" creator="1" date_created="2008-10-19 09:24:10.0" voided="false" patient_id="2" uuid="2c96f25c-4949-4f72-9931-d808fbc226df" care_setting="1" encounter_id="6" />
<orders order_id="8" order_type_id="2" order_number="ORD-8" urgency="ROUTINE" order_action="NEW" concept_id="5497" orderer="1" date_activated="2008-11-19 09:24:10.0" creator="1" date_created="2008-11-19 09:24:10.0" patient_id="2" voided="true" voided_by="1" date_voided="2008-11-20 09:24:10.0" void_reason="Testing 1" uuid="3c96f25c-4949-4f72-9931-d808fbc226dg" care_setting="1" encounter_id="6" />
<orders order_id="9" order_type_id="2" order_number="ORD-9" urgency="ROUTINE" order_action="NEW" concept_id="5497" orderer="1" date_activated="2007-12-09 00:00:00.0" date_stopped="2007-12-17 00:00:00.0" auto_expire_date="2007-12-20 00:00:00.0" creator="1" date_created="2008-12-01 09:24:10.0" voided="false" patient_id="2" uuid="4c96f25c-4949-4f72-9931-d808fbc226dh" care_setting="1" encounter_id="6" />
<orders order_id="9" order_type_id="2" order_number="ORD-9" urgency="ROUTINE" order_action="NEW" concept_id="5497" orderer="1" fulfiller_status="RECEIVED" date_activated="2007-12-09 00:00:00.0" date_stopped="2007-12-17 00:00:00.0" auto_expire_date="2007-12-20 00:00:00.0" creator="1" date_created="2008-12-01 09:24:10.0" voided="false" patient_id="2" uuid="4c96f25c-4949-4f72-9931-d808fbc226dh" care_setting="1" encounter_id="6" />
<drug drug_id="2" concept_id="792" name="Triomune-30" combination="true" strength="1.0tab(s)" creator="1" date_created="2005-02-24 00:00:00.0" retired="false" uuid="3cfcf118-931c-46f7-8ff6-7b876f0d4202"/>
<drug drug_id="3" concept_id="88" name="ASPIRIN" combination="false" strength="325.0mg" creator="1" date_created="2005-02-24 00:00:00.0" retired="false" uuid="05ec820a-d297-44e3-be6e-698531d9dd3f"/>
<drug drug_id="11" concept_id="3" name="NYQUIL" combination="true" creator="1" date_created="2008-08-15 15:34:03.0" retired="true" uuid="7e2323fa-0fa0-461f-9b59-6765997d849e"/>
Expand Down

0 comments on commit 4c9a94a

Please sign in to comment.