Skip to content

Commit

Permalink
Removed unique constraint from order_type.java_class_name and updated…
Browse files Browse the repository at this point in the history
… OrderService.getActiveOrders and getOrders to include orders for sub types if order type is specified

Follow up

Follow up
  • Loading branch information
wluyima committed Mar 26, 2014
1 parent 80ba451 commit 4be23f6
Show file tree
Hide file tree
Showing 9 changed files with 86 additions and 23 deletions.
2 changes: 2 additions & 0 deletions api/src/main/java/org/openmrs/api/OrderService.java
Expand Up @@ -150,6 +150,7 @@ public interface OrderService extends OpenmrsService {
* @should get the orders that match all the arguments
* @should get all unvoided matches if includeVoided is set to false
* @should include voided matches if includeVoided is set to true
* @should include orders for sub types if order type is specified
*/
@Authorized(PrivilegeConstants.VIEW_ORDERS)
public List<Order> getOrders(Patient patient, CareSetting careSetting, OrderType orderType, boolean includeVoided);
Expand Down Expand Up @@ -250,6 +251,7 @@ public interface OrderService extends OpenmrsService {
* @should fail if patient is null
* @should return active orders as of the specified date
* @should return all orders if no orderType is specified
* @should include orders for sub types if order type is specified
*/
@Authorized(PrivilegeConstants.VIEW_ORDERS)
public List<Order> getActiveOrders(Patient patient, OrderType orderType, CareSetting careSetting, Date asOfDate);
Expand Down
6 changes: 3 additions & 3 deletions api/src/main/java/org/openmrs/api/db/OrderDAO.java
Expand Up @@ -75,8 +75,8 @@ public List<Order> getOrders(OrderType orderType, List<Patient> patients, List<C
* @see org.openmrs.api.OrderService#getOrders(org.openmrs.Patient, org.openmrs.CareSetting,
* org.openmrs.OrderType, boolean)
*/
public List<Order> getOrders(Patient patient, CareSetting careSetting, OrderType orderType, boolean includeVoided,
boolean includeDiscontinuationOrders);
public List<Order> getOrders(Patient patient, CareSetting careSetting, List<OrderType> orderTypes,
boolean includeVoided, boolean includeDiscontinuationOrders);

/**
* Auto generated method comment
Expand Down Expand Up @@ -107,7 +107,7 @@ public List<Order> getOrders(Patient patient, CareSetting careSetting, OrderType
* @see org.openmrs.api.OrderService#getActiveOrders(org.openmrs.Patient, org.openmrs.OrderType,
* org.openmrs.CareSetting, java.util.Date)
*/
public List<Order> getActiveOrders(Patient patient, OrderType orderType, CareSetting careSetting, Date asOfDate);
public List<Order> getActiveOrders(Patient patient, List<OrderType> orderTypes, CareSetting careSetting, Date asOfDate);

/**
* Get care setting by type
Expand Down
Expand Up @@ -143,13 +143,13 @@ public List<Order> getOrders(OrderType orderType, List<Patient> patients, List<C
}

/**
* @see OrderDAO#getOrders(org.openmrs.Patient, org.openmrs.CareSetting, org.openmrs.OrderType,
* @see OrderDAO#getOrders(org.openmrs.Patient, org.openmrs.CareSetting, java.util.List,
* boolean, boolean)
*/
@Override
public List<Order> getOrders(Patient patient, CareSetting careSetting, OrderType orderType, boolean includeVoided,
boolean includeDiscontinuationOrders) {
return createOrderCriteria(patient, careSetting, orderType, includeVoided, includeDiscontinuationOrders).list();
public List<Order> getOrders(Patient patient, CareSetting careSetting, List<OrderType> orderTypes,
boolean includeVoided, boolean includeDiscontinuationOrders) {
return createOrderCriteria(patient, careSetting, orderTypes, includeVoided, includeDiscontinuationOrders).list();
}

/**
Expand Down Expand Up @@ -214,12 +214,12 @@ public Long getNextOrderNumberSeedSequenceValue() {
}

/**
* @see org.openmrs.api.db.OrderDAO#getActiveOrders(org.openmrs.Patient, org.openmrs.OrderType,
* @see org.openmrs.api.db.OrderDAO#getActiveOrders(org.openmrs.Patient, java.util.List,
* org.openmrs.CareSetting, java.util.Date)
*/
@SuppressWarnings("unchecked")
public List<Order> getActiveOrders(Patient patient, OrderType orderType, CareSetting careSetting, Date asOfDate) {
Criteria crit = createOrderCriteria(patient, careSetting, orderType, false, false);
public List<Order> getActiveOrders(Patient patient, List<OrderType> orderTypes, CareSetting careSetting, Date asOfDate) {
Criteria crit = createOrderCriteria(patient, careSetting, orderTypes, false, false);

Disjunction dateStoppedAndAutoExpDateDisjunction = Restrictions.disjunction();
Criterion stopAndAutoExpDateAreBothNull = Restrictions.and(Restrictions.isNull("dateStopped"), Restrictions
Expand All @@ -242,12 +242,12 @@ public List<Order> getActiveOrders(Patient patient, OrderType orderType, CareSet
*
* @param patient
* @param careSetting
* @param orderType
* @param orderTypes
* @param includeVoided
* @param includeDiscontinuationOrders
* @return
*/
private Criteria createOrderCriteria(Patient patient, CareSetting careSetting, OrderType orderType,
private Criteria createOrderCriteria(Patient patient, CareSetting careSetting, List<OrderType> orderTypes,
boolean includeVoided, boolean includeDiscontinuationOrders) {
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Order.class);
if (patient != null) {
Expand All @@ -256,8 +256,8 @@ private Criteria createOrderCriteria(Patient patient, CareSetting careSetting, O
if (careSetting != null) {
criteria.add(Restrictions.eq("careSetting", careSetting));
}
if (orderType != null) {
criteria.add(Restrictions.eq("orderType", orderType));
if (orderTypes != null && orderTypes.size() > 0) {
criteria.add(Restrictions.in("orderType", orderTypes));
}
if (!includeVoided) {
criteria.add(Restrictions.eq("voided", false));
Expand Down
16 changes: 14 additions & 2 deletions api/src/main/java/org/openmrs/api/impl/OrderServiceImpl.java
Expand Up @@ -279,7 +279,13 @@ public List<Order> getOrders(Patient patient, CareSetting careSetting, OrderType
if (careSetting == null) {
throw new IllegalArgumentException("CareSetting is required");
}
return dao.getOrders(patient, careSetting, orderType, includeVoided, false);
List<OrderType> orderTypes = null;
if (orderType != null) {
orderTypes = new ArrayList<OrderType>();
orderTypes.add(orderType);
orderTypes.addAll(getSubtypes(orderType, true));
}
return dao.getOrders(patient, careSetting, orderTypes, includeVoided, false);
}

/**
Expand Down Expand Up @@ -375,7 +381,13 @@ public List<Order> getActiveOrders(Patient patient, OrderType orderType, CareSet
if (asOfDate == null) {
asOfDate = new Date();
}
return dao.getActiveOrders(patient, orderType, careSetting, asOfDate);
List<OrderType> orderTypes = null;
if (orderType != null) {
orderTypes = new ArrayList<OrderType>();
orderTypes.add(orderType);
orderTypes.addAll(getSubtypes(orderType, true));
}
return dao.getActiveOrders(patient, orderTypes, careSetting, asOfDate);
}

/**
Expand Down
2 changes: 1 addition & 1 deletion api/src/main/resources/liquibase-update-to-latest.xml
Expand Up @@ -6530,7 +6530,7 @@
<constraints nullable="false"/>
</column>
<column name="java_class_name" type="varchar(255)">
<constraints nullable="false" unique="true" />
<constraints nullable="false" />
</column>
<column name="parent" type="int"/>
<column name="creator" type="int">
Expand Down
Expand Up @@ -19,7 +19,7 @@

<property name="description" type="java.lang.String" not-null="true" length="1024"/>

<property name="javaClassName" type="java.lang.String" column="java_class_name" not-null="true" length="255" unique="true" />
<property name="javaClassName" type="java.lang.String" column="java_class_name" not-null="true" length="255" />

<property name="dateCreated" type="java.util.Date" column="date_created" not-null="true" length="19"/>

Expand Down
48 changes: 48 additions & 0 deletions api/src/test/java/org/openmrs/api/OrderServiceTest.java
Expand Up @@ -495,6 +495,29 @@ public void getActiveOrders_shouldReturnAllOrdersIfNoOrderTypeIsSpecified() thro
assertThat(orders, hasItems(expectedOrders));
}

/**
* @verifies include orders for sub types if order type is specified
* @see OrderService#getActiveOrders(org.openmrs.Patient, org.openmrs.OrderType,
* org.openmrs.CareSetting, java.util.Date)
*/
@Test
public void getActiveOrders_shouldIncludeOrdersForSubTypesIfOrderTypeIsSpecified() throws Exception {
executeDataSet("org/openmrs/api/include/OrderServiceTest-otherOrders.xml");
Patient patient = Context.getPatientService().getPatient(2);
OrderType testOrderType = orderService.getOrderType(2);
List<Order> orders = orderService.getActiveOrders(patient, testOrderType, null, null);
assertEquals(5, orders.size());
Order[] expectedOrder1 = { orderService.getOrder(7), orderService.getOrder(101), orderService.getOrder(102),
orderService.getOrder(103), orderService.getOrder(104) };
assertThat(orders, hasItems(expectedOrder1));

OrderType labTestOrderType = orderService.getOrderType(7);
orders = orderService.getActiveOrders(patient, labTestOrderType, null, null);
assertEquals(3, orders.size());
Order[] expectedOrder2 = { orderService.getOrder(101), orderService.getOrder(103), orderService.getOrder(104) };
assertThat(orders, hasItems(expectedOrder2));
}

/**
* @see {@link OrderService#discontinueOrder(org.openmrs.Order, String, java.util.Date, org.openmrs.Provider, org.openmrs.Encounter)}
*/
Expand Down Expand Up @@ -1388,6 +1411,31 @@ public void getOrders_shouldIncludeVoidedMatchesIfIncludeVoidedIsSetToTrue() thr
assertEquals(4, orderService.getOrders(patient, outPatient, testOrderType, true).size());
}

/**
* @verifies include orders for sub types if order type is specified
* @see OrderService#getOrders(org.openmrs.Patient, org.openmrs.CareSetting,
* org.openmrs.OrderType, boolean)
*/
@Test
public void getOrders_shouldIncludeOrdersForSubTypesIfOrderTypeIsSpecified() throws Exception {
executeDataSet("org/openmrs/api/include/OrderServiceTest-otherOrders.xml");
Patient patient = patientService.getPatient(2);
OrderType testOrderType = orderService.getOrderType(2);
CareSetting outPatient = orderService.getCareSetting(1);
List<Order> orders = orderService.getOrders(patient, outPatient, testOrderType, false);
assertEquals(7, orders.size());
Order[] expectedOrder1 = { orderService.getOrder(6), orderService.getOrder(7), orderService.getOrder(9),
orderService.getOrder(101), orderService.getOrder(102), orderService.getOrder(103),
orderService.getOrder(104) };
assertThat(orders, hasItems(expectedOrder1));

OrderType labTestOrderType = orderService.getOrderType(7);
orders = orderService.getOrders(patient, outPatient, labTestOrderType, false);
assertEquals(3, orderService.getOrders(patient, outPatient, labTestOrderType, false).size());
Order[] expectedOrder2 = { orderService.getOrder(101), orderService.getOrder(103), orderService.getOrder(104) };
assertThat(orders, hasItems(expectedOrder2));
}

/**
* @verifies fail if patient is null
* @see OrderService#getAllOrdersByPatient(org.openmrs.Patient)
Expand Down
@@ -1,7 +1,8 @@
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
<orders order_id="6" order_number="6" urgency="ROUTINE" order_action="NEW" concept_id="88" orderer="1" instructions="" start_date="2012-08-19 00:00:00.0" creator="1" date_created="2012-01-19 12:24:10.0" voided="false" patient_id="2" uuid="0c96f25c-4949-4f72-9931-d808fbcdb611" care_setting="1"/>
<orders order_id="7" order_number="7" urgency="ROUTINE" order_action="NEW" concept_id="792" orderer="1" instructions="" start_date="2012-09-19 00:00:00.0" creator="1" date_created="2012-02-19 12:24:10.0" voided="false" patient_id="2" uuid="1c96f25c-4949-4f72-9931-d808fbcdb612" care_setting="1"/>
<drug_order order_id="6" drug_inventory_id="3" dose="125.0" dose_units="50" frequency="1" as_needed="false" dosing_type="SIMPLE"/>
<drug_order order_id="7" drug_inventory_id="3" dose="225.0" dose_units="50" frequency="1" as_needed="false" dosing_type="SIMPLE"/>
<order_type order_type_id="100" name="some Order Type" parent="2" java_class_name="org.openmrs.TestOrder" description="Some lab order" creator="1" date_created="2008-08-15 15:49:04.0" retired="1" retired_by="1" retire_reason="None" date_retired="2008-08-15 00:00:00.0" uuid="dd3fb1d0-ae06-22e3-a5e2-0800211c9a66"/>
<orders order_id="101" order_type="7" order_number="ORD-101" urgency="ROUTINE" order_action="NEW" concept_id="5497" orderer="1" start_date="2008-11-19 09:24:10.0" patient_id="2" care_setting="1" encounter_id="6" uuid="7d96f25c-4949-4f72-9931-d808fbc226de" date_created="2008-11-19 09:24:10.0" creator="1" voided="0" />
<orders order_id="102" order_type="100" order_number="ORD-102" urgency="ROUTINE" order_action="NEW" concept_id="5497" orderer="1" start_date="2008-12-19 09:24:10.0" patient_id="2" care_setting="1" encounter_id="6" uuid="8d96f25c-4949-4f72-9931-d808fbc226de" date_created="2008-12-19 09:24:10.0" creator="1" voided="0" />
<orders order_id="103" order_type="9" order_number="ORD-103" urgency="ROUTINE" order_action="NEW" concept_id="5497" orderer="1" start_date="2008-13-19 09:24:10.0" patient_id="2" care_setting="1" encounter_id="6" uuid="9d96f25c-4949-4f72-9931-d808fbc226de" date_created="2008-13-19 09:24:10.0" creator="1" voided="0" />
<orders order_id="104" order_type="10" order_number="ORD-104" urgency="ROUTINE" order_action="NEW" concept_id="5497" orderer="1" start_date="2008-14-19 09:24:10.0" patient_id="2" care_setting="1" encounter_id="6" uuid="0d96f25c-4949-4f72-9931-d808fbc226de" date_created="2008-14-19 09:24:10.0" creator="1" voided="0" />
</dataset>
Expand Up @@ -185,7 +185,7 @@
<order_type order_type_id="1" name="Drug order" java_class_name="org.openmrs.DrugOrder" description="Categorises medication orders for the patient" date_created="2008-08-15 13:49:47.0" retired="false" uuid="2ca568f3-a64a-11e3-9aeb-50e549534c5e" creator="1" />
<order_type order_type_id="2" name="Test order" java_class_name="org.openmrs.TestOrder" description="Categorises test orders for the patient" date_created="2008-08-15 13:49:47.0" retired="false" uuid="52a447d3-a64a-11e3-9aeb-50e549534c5e" creator="1" />
<order_type order_type_id="3" name="Radiology order" java_class_name="org.openmrs.RadiologyOrder" description="starving" creator="1" date_created="2008-08-15 15:49:04.0" retired="1" retired_by="1" retire_reason="None" date_retired="2008-08-15 18:49:04.0" uuid="00e17510-aa09-11e3-a5e2-0800200c9a66"/>
<order_type order_type_id="7" name="Lab test" parent="2" java_class_name="org.openmrs.LabTestOrder" description="An order by a clinician for a laboratory test" creator="1" date_created="2008-08-15 13:50:14.0" retired="false" uuid="87f82f50-ac05-11e3-a5e2-0800200c9a66"/>
<order_type order_type_id="7" name="Lab test" parent="2" java_class_name="org.openmrs.TestOrder" description="An order by a clinician for a laboratory test" creator="1" date_created="2008-08-15 13:50:14.0" retired="false" uuid="87f82f50-ac05-11e3-a5e2-0800200c9a66"/>
<order_type order_type_id="8" name="Radiology test" parent="2" java_class_name="org.openmrs.RadiologyTestTestOrder" description="Order placed by radiologist" creator="1" date_created="2008-08-15 15:49:04.0" retired="false" uuid="90a1e5b0-ac05-11e3-a5e2-0800200c9a66"/>
<order_type order_type_id="9" name="SEROLOGY" parent="7" java_class_name="org.openmrs.SerologyTestOrder" description="Test is performed to detect and measure the levels of antibodies" creator="1" date_created="2008-08-15 13:49:47.0" retired="false" uuid="9b6cf570-ac05-11e3-a5e2-0800200c9a66"/>
<order_type order_type_id="10" name="MICROBIOLOGY" parent="7" java_class_name="org.openmrs.MicrobilogyTestOrder" description="Tests use techniques to spot microorganisms like bacteria" creator="1" date_created="2008-08-15 13:50:14.0" retired="false" uuid="a4ebaf10-ac05-11e3-a5e2-0800200c9a66"/>
Expand Down

0 comments on commit 4be23f6

Please sign in to comment.