Skip to content

Commit

Permalink
TRUNK-4150 - Implementing feedback from the initial pull request.
Browse files Browse the repository at this point in the history
  • Loading branch information
shruthidipali committed Feb 13, 2014
1 parent 4553725 commit 257bd70
Show file tree
Hide file tree
Showing 6 changed files with 84 additions and 39 deletions.
3 changes: 2 additions & 1 deletion api/src/main/java/org/openmrs/api/OrderService.java
Expand Up @@ -61,11 +61,12 @@ public interface OrderService extends OpenmrsService {
/**
* Save or update the given <code>order</code> in the database
*
* @param order the Order to revise
* @param order the revised order
* @return the Order that was saved
* @throws APIException
* @should stop existing order
* @should not allow editing an existing order
* @should not allow revising a discontinued order
*/
@Authorized( { PrivilegeConstants.EDIT_ORDERS, PrivilegeConstants.ADD_ORDERS })
public Order saveRevisedOrder(Order order) throws APIException;
Expand Down
22 changes: 10 additions & 12 deletions api/src/main/java/org/openmrs/api/impl/OrderServiceImpl.java
Expand Up @@ -85,31 +85,29 @@ public Order saveOrder(Order order) throws APIException {
*/
public Order saveRevisedOrder(Order revisedOrder) throws APIException {

if (!Order.Action.REVISE.equals(revisedOrder.getAction())) {
throw new APIException("Action has to be 'REVISE'");
}

Order previousOrder = revisedOrder.getPreviousOrder();

if (previousOrder == null) {
throw new APIException("Previous order cannot be null");
}

if (Order.Action.DISCONTINUE.equals(previousOrder.getAction())) {
throw new APIException("Cannot revise a discontinued order");
}

if (OrderUtil.isOrderActive(previousOrder, null)) {
markAsRevised(previousOrder, new Date());
markAsDiscontinued(previousOrder, new Date());
} else {
throw new APIException("Cannot revise an inactive order.");
}

return saveOrderInternal(revisedOrder);
}

/**
* Make necessary checks, set necessary fields for discontinuing <code>orderToDiscontinue</code>
* and save.
*
* @param revisionDate
*/
private void markAsRevised(Order orderToRevise, Date revisionDate) {
orderToRevise.setDateStopped(revisionDate);
}

private Order saveOrderInternal(Order order) {
//TODO call module registered order number generators
//and if there is none, use the default below
Expand Down
85 changes: 62 additions & 23 deletions api/src/test/java/org/openmrs/api/OrderServiceTest.java
Expand Up @@ -770,26 +770,26 @@ public void getCareSettings_shouldReturnRetiredCareSettingsIfIncludeRetiredIsSet
assertEquals(3, careSettings.size());
assertTrue(containsId(careSettings, retiredCareSetting.getCareSettingId()));
}
/**
/**
* @see OrderService#saveRevisedOrder(org.openmrs.Order) (org.openmrs.Order)
*/
@Test
public void saveOrder_shouldReviseDrugOrder() throws Exception {
public void saveRevisedOrder_shouldReviseDrugOrder() throws Exception {
executeDataSet("org/openmrs/api/include/OrderServiceTest-reviseActiveOrders.xml");
Order order = orderService.getOrder(16);

DrugOrder orderWithRevision = (DrugOrder) order.cloneForRevision();
orderWithRevision.setDose((double) 200);
orderWithRevision.setDoseUnits(conceptService.getConcept(51));
orderWithRevision.setFrequency(orderService.getOrderFrequency(2));
orderWithRevision.setAsNeeded(false);
orderWithRevision.setDosingType(DrugOrder.DosingType.FREE_TEXT);
orderWithRevision.setDateCreated(new Date());
orderWithRevision.setDuration((double) 10);
orderWithRevision.setAutoExpireDate(dateAfterDays(10));

Integer revisedOrderId = orderService.saveRevisedOrder(orderWithRevision).getOrderId();
DrugOrder reviseOrder = (DrugOrder) order.cloneForRevision();
reviseOrder.setDose((double) 200);
reviseOrder.setDoseUnits(conceptService.getConcept(51));
reviseOrder.setFrequency(orderService.getOrderFrequency(2));
reviseOrder.setAsNeeded(false);
reviseOrder.setDosingType(DrugOrder.DosingType.FREE_TEXT);
reviseOrder.setDateCreated(new Date());
reviseOrder.setDuration((double) 10);
reviseOrder.setAutoExpireDate(dateAfterDays(10));

Integer revisedOrderId = orderService.saveRevisedOrder(reviseOrder).getOrderId();
DrugOrder savedRevisedOrder = (DrugOrder) orderService.getOrder(revisedOrderId);

assertEquals(new Integer(16), savedRevisedOrder.getPreviousOrder().getOrderId());
Expand All @@ -811,11 +811,7 @@ public void saveOrder_shouldReviseDrugOrder() throws Exception {
* @see OrderService#saveRevisedOrder(org.openmrs.Order)
*/
@Test
public void saveOrder_shouldNotReviseAnInActiveOrder() throws Exception {

expectedEx.expect(APIException.class);
expectedEx.expectMessage("Cannot revise an inactive order.");

public void saveRevisedOrder_shouldNotReviseAnInActiveOrder() throws Exception {
executeDataSet("org/openmrs/api/include/OrderServiceTest-reviseInActiveOrders.xml");
DrugOrder order = (DrugOrder) orderService.getOrder(6);

Expand All @@ -830,6 +826,8 @@ public void saveOrder_shouldNotReviseAnInActiveOrder() throws Exception {
orderWithRevision.setDuration((double) 10);
orderWithRevision.setAutoExpireDate(dateAfterDays(10));

expectedEx.expect(APIException.class);
expectedEx.expectMessage("Cannot revise an inactive order.");
orderService.saveRevisedOrder(orderWithRevision);
}

Expand All @@ -838,20 +836,61 @@ public void saveOrder_shouldNotReviseAnInActiveOrder() throws Exception {
* @see OrderService#saveRevisedOrder(org.openmrs.Order)
*/
@Test
public void saveOrder_shouldNotReviseOrderWithNoPreviousOrder() throws Exception {
public void saveRevisedOrder_shouldNotReviseOrderWithNoPreviousOrder() throws Exception {
executeDataSet("org/openmrs/api/include/OrderServiceTest-reviseActiveOrders.xml");

DrugOrder order = new DrugOrder();
order.setAction(Action.REVISE);
order.setDose((double) 200);
order.setDateCreated(new Date());
order.setDuration((double) 10);
order.setAutoExpireDate(dateAfterDays(10));
order.setConcept(conceptService.getConcept(88));
order.setPatient(patientService.getPatient(2));

expectedEx.expect(APIException.class);
expectedEx.expectMessage("Previous order cannot be null");
orderService.saveRevisedOrder(order);
}

/**
* @verifies not allow revisions for a discontinued order
* @see OrderService#saveRevisedOrder(org.openmrs.Order)
*/
@Test
public void saveRevisedOrder_shouldNotReviseAPreviouslyDiscontinuedOrder() throws Exception {
executeDataSet("org/openmrs/api/include/OrderServiceTest-reviseDiscontinuedOrders.xml");

executeDataSet("org/openmrs/api/include/OrderServiceTest-reviseActiveOrders.xml");
DrugOrder order = (DrugOrder) orderService.getOrder(16);
Order previousOrder = orderService.getOrder(16);

DrugOrder order = (DrugOrder) previousOrder.cloneForRevision();
order.setDose((double) 200);
order.setDateCreated(new Date());
order.setDuration((double) 10);
order.setAutoExpireDate(dateAfterDays(10));
order.setPreviousOrder(previousOrder);

expectedEx.expect(APIException.class);
expectedEx.expectMessage("Cannot revise a discontinued order");
orderService.saveRevisedOrder(order);
}

/**
* @verifies not allow revisions only for a REVISE Order
* @see OrderService#saveRevisedOrder(org.openmrs.Order)
*/
@Test
public void saveRevisedOrder_shouldReviseOnlyWhenActionIsRevise() throws Exception {
executeDataSet("org/openmrs/api/include/OrderServiceTest-reviseActiveOrders.xml");
Order order = orderService.getOrder(16);

DrugOrder revisionOrder = (DrugOrder) order.cloneForRevision();
revisionOrder.setAction(Action.DISCONTINUE);

expectedEx.expect(APIException.class);
expectedEx.expectMessage("Action has to be 'REVISE'");
orderService.saveRevisedOrder(revisionOrder).getOrderId();
}

private Date dateAfterDays(int days) {
Calendar c = Calendar.getInstance();
c.setTime(new Date());
Expand Down
@@ -1,9 +1,9 @@
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
<global_property property="order.nextOrderNumberSeed" property_value="1" uuid="1d55827e-26fe-102b-80cb-0017a47879y5"/>
<orders order_id="16" order_number="6" urgency="ROUTINE" order_action="NEW" concept_id="88" orderer="1" instructions=""
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" />
uuid="0c96f25c-4949-4f72-9931-d808fbcdb611"
care_setting="1" />
<drug_order order_id="16" drug_inventory_id="3" dose="125.0" dose_units="50" frequency="1" as_needed="false" dosing_type="SIMPLE" duration="10"/>
</dataset>
@@ -0,0 +1,8 @@
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
<orders order_id="16" order_number="6" urgency="ROUTINE" order_action="DISCONTINUE" concept_id="88" orderer="1" instructions=""
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" />
<drug_order order_id="16" drug_inventory_id="3" dose="125.0" dose_units="50" frequency="1" as_needed="false" dosing_type="SIMPLE" duration="10"/>
</dataset>
@@ -1,6 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
<global_property property="order.nextOrderNumberSeed" property_value="1" uuid="1d55827e-26fe-102b-80cb-0017a47879y5"/>
<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" auto_expire_date="2012-08-29 00:00:00.0" creator="1" date_created="2012-01-19 12:24:10.0"
voided="false" patient_id="2"
Expand Down

0 comments on commit 257bd70

Please sign in to comment.