Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 257bd70

Browse files
committedFeb 13, 2014
TRUNK-4150 - Implementing feedback from the initial pull request.
1 parent 4553725 commit 257bd70

File tree

6 files changed

+84
-39
lines changed

6 files changed

+84
-39
lines changed
 

‎api/src/main/java/org/openmrs/api/OrderService.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,12 @@ public interface OrderService extends OpenmrsService {
6161
/**
6262
* Save or update the given <code>order</code> in the database
6363
*
64-
* @param order the Order to revise
64+
* @param order the revised order
6565
* @return the Order that was saved
6666
* @throws APIException
6767
* @should stop existing order
6868
* @should not allow editing an existing order
69+
* @should not allow revising a discontinued order
6970
*/
7071
@Authorized( { PrivilegeConstants.EDIT_ORDERS, PrivilegeConstants.ADD_ORDERS })
7172
public Order saveRevisedOrder(Order order) throws APIException;

‎api/src/main/java/org/openmrs/api/impl/OrderServiceImpl.java

+10-12
Original file line numberDiff line numberDiff line change
@@ -85,31 +85,29 @@ public Order saveOrder(Order order) throws APIException {
8585
*/
8686
public Order saveRevisedOrder(Order revisedOrder) throws APIException {
8787

88+
if (!Order.Action.REVISE.equals(revisedOrder.getAction())) {
89+
throw new APIException("Action has to be 'REVISE'");
90+
}
91+
8892
Order previousOrder = revisedOrder.getPreviousOrder();
93+
8994
if (previousOrder == null) {
9095
throw new APIException("Previous order cannot be null");
9196
}
9297

98+
if (Order.Action.DISCONTINUE.equals(previousOrder.getAction())) {
99+
throw new APIException("Cannot revise a discontinued order");
100+
}
101+
93102
if (OrderUtil.isOrderActive(previousOrder, null)) {
94-
markAsRevised(previousOrder, new Date());
103+
markAsDiscontinued(previousOrder, new Date());
95104
} else {
96105
throw new APIException("Cannot revise an inactive order.");
97106
}
98107

99108
return saveOrderInternal(revisedOrder);
100109
}
101110

102-
/**
103-
* Make necessary checks, set necessary fields for discontinuing <code>orderToDiscontinue</code>
104-
* and save.
105-
*
106-
107-
* @param revisionDate
108-
*/
109-
private void markAsRevised(Order orderToRevise, Date revisionDate) {
110-
orderToRevise.setDateStopped(revisionDate);
111-
}
112-
113111
private Order saveOrderInternal(Order order) {
114112
//TODO call module registered order number generators
115113
//and if there is none, use the default below

‎api/src/test/java/org/openmrs/api/OrderServiceTest.java

+62-23
Original file line numberDiff line numberDiff line change
@@ -770,26 +770,26 @@ public void getCareSettings_shouldReturnRetiredCareSettingsIfIncludeRetiredIsSet
770770
assertEquals(3, careSettings.size());
771771
assertTrue(containsId(careSettings, retiredCareSetting.getCareSettingId()));
772772
}
773-
774-
/**
773+
774+
/**
775775
* @see OrderService#saveRevisedOrder(org.openmrs.Order) (org.openmrs.Order)
776776
*/
777777
@Test
778-
public void saveOrder_shouldReviseDrugOrder() throws Exception {
778+
public void saveRevisedOrder_shouldReviseDrugOrder() throws Exception {
779779
executeDataSet("org/openmrs/api/include/OrderServiceTest-reviseActiveOrders.xml");
780780
Order order = orderService.getOrder(16);
781781

782-
DrugOrder orderWithRevision = (DrugOrder) order.cloneForRevision();
783-
orderWithRevision.setDose((double) 200);
784-
orderWithRevision.setDoseUnits(conceptService.getConcept(51));
785-
orderWithRevision.setFrequency(orderService.getOrderFrequency(2));
786-
orderWithRevision.setAsNeeded(false);
787-
orderWithRevision.setDosingType(DrugOrder.DosingType.FREE_TEXT);
788-
orderWithRevision.setDateCreated(new Date());
789-
orderWithRevision.setDuration((double) 10);
790-
orderWithRevision.setAutoExpireDate(dateAfterDays(10));
791-
792-
Integer revisedOrderId = orderService.saveRevisedOrder(orderWithRevision).getOrderId();
782+
DrugOrder reviseOrder = (DrugOrder) order.cloneForRevision();
783+
reviseOrder.setDose((double) 200);
784+
reviseOrder.setDoseUnits(conceptService.getConcept(51));
785+
reviseOrder.setFrequency(orderService.getOrderFrequency(2));
786+
reviseOrder.setAsNeeded(false);
787+
reviseOrder.setDosingType(DrugOrder.DosingType.FREE_TEXT);
788+
reviseOrder.setDateCreated(new Date());
789+
reviseOrder.setDuration((double) 10);
790+
reviseOrder.setAutoExpireDate(dateAfterDays(10));
791+
792+
Integer revisedOrderId = orderService.saveRevisedOrder(reviseOrder).getOrderId();
793793
DrugOrder savedRevisedOrder = (DrugOrder) orderService.getOrder(revisedOrderId);
794794

795795
assertEquals(new Integer(16), savedRevisedOrder.getPreviousOrder().getOrderId());
@@ -811,11 +811,7 @@ public void saveOrder_shouldReviseDrugOrder() throws Exception {
811811
* @see OrderService#saveRevisedOrder(org.openmrs.Order)
812812
*/
813813
@Test
814-
public void saveOrder_shouldNotReviseAnInActiveOrder() throws Exception {
815-
816-
expectedEx.expect(APIException.class);
817-
expectedEx.expectMessage("Cannot revise an inactive order.");
818-
814+
public void saveRevisedOrder_shouldNotReviseAnInActiveOrder() throws Exception {
819815
executeDataSet("org/openmrs/api/include/OrderServiceTest-reviseInActiveOrders.xml");
820816
DrugOrder order = (DrugOrder) orderService.getOrder(6);
821817

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

829+
expectedEx.expect(APIException.class);
830+
expectedEx.expectMessage("Cannot revise an inactive order.");
833831
orderService.saveRevisedOrder(orderWithRevision);
834832
}
835833

@@ -838,20 +836,61 @@ public void saveOrder_shouldNotReviseAnInActiveOrder() throws Exception {
838836
* @see OrderService#saveRevisedOrder(org.openmrs.Order)
839837
*/
840838
@Test
841-
public void saveOrder_shouldNotReviseOrderWithNoPreviousOrder() throws Exception {
839+
public void saveRevisedOrder_shouldNotReviseOrderWithNoPreviousOrder() throws Exception {
840+
executeDataSet("org/openmrs/api/include/OrderServiceTest-reviseActiveOrders.xml");
841+
842+
DrugOrder order = new DrugOrder();
843+
order.setAction(Action.REVISE);
844+
order.setDose((double) 200);
845+
order.setDateCreated(new Date());
846+
order.setDuration((double) 10);
847+
order.setAutoExpireDate(dateAfterDays(10));
848+
order.setConcept(conceptService.getConcept(88));
849+
order.setPatient(patientService.getPatient(2));
850+
842851
expectedEx.expect(APIException.class);
843852
expectedEx.expectMessage("Previous order cannot be null");
853+
orderService.saveRevisedOrder(order);
854+
}
855+
856+
/**
857+
* @verifies not allow revisions for a discontinued order
858+
* @see OrderService#saveRevisedOrder(org.openmrs.Order)
859+
*/
860+
@Test
861+
public void saveRevisedOrder_shouldNotReviseAPreviouslyDiscontinuedOrder() throws Exception {
862+
executeDataSet("org/openmrs/api/include/OrderServiceTest-reviseDiscontinuedOrders.xml");
844863

845-
executeDataSet("org/openmrs/api/include/OrderServiceTest-reviseActiveOrders.xml");
846-
DrugOrder order = (DrugOrder) orderService.getOrder(16);
864+
Order previousOrder = orderService.getOrder(16);
865+
866+
DrugOrder order = (DrugOrder) previousOrder.cloneForRevision();
847867
order.setDose((double) 200);
848868
order.setDateCreated(new Date());
849-
order.setDuration((double) 10);
850869
order.setAutoExpireDate(dateAfterDays(10));
870+
order.setPreviousOrder(previousOrder);
851871

872+
expectedEx.expect(APIException.class);
873+
expectedEx.expectMessage("Cannot revise a discontinued order");
852874
orderService.saveRevisedOrder(order);
853875
}
854876

877+
/**
878+
* @verifies not allow revisions only for a REVISE Order
879+
* @see OrderService#saveRevisedOrder(org.openmrs.Order)
880+
*/
881+
@Test
882+
public void saveRevisedOrder_shouldReviseOnlyWhenActionIsRevise() throws Exception {
883+
executeDataSet("org/openmrs/api/include/OrderServiceTest-reviseActiveOrders.xml");
884+
Order order = orderService.getOrder(16);
885+
886+
DrugOrder revisionOrder = (DrugOrder) order.cloneForRevision();
887+
revisionOrder.setAction(Action.DISCONTINUE);
888+
889+
expectedEx.expect(APIException.class);
890+
expectedEx.expectMessage("Action has to be 'REVISE'");
891+
orderService.saveRevisedOrder(revisionOrder).getOrderId();
892+
}
893+
855894
private Date dateAfterDays(int days) {
856895
Calendar c = Calendar.getInstance();
857896
c.setTime(new Date());
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<?xml version='1.0' encoding='UTF-8'?>
22
<dataset>
3-
<global_property property="order.nextOrderNumberSeed" property_value="1" uuid="1d55827e-26fe-102b-80cb-0017a47879y5"/>
43
<orders order_id="16" order_number="6" urgency="ROUTINE" order_action="NEW" concept_id="88" orderer="1" instructions=""
54
creator="1" date_created="2012-01-19 12:24:10.0"
65
voided="false" patient_id="2"
7-
uuid="0c96f25c-4949-4f72-9931-d808fbcdb611" care_setting="1" />
6+
uuid="0c96f25c-4949-4f72-9931-d808fbcdb611"
7+
care_setting="1" />
88
<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"/>
99
</dataset>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version='1.0' encoding='UTF-8'?>
2+
<dataset>
3+
<orders order_id="16" order_number="6" urgency="ROUTINE" order_action="DISCONTINUE" concept_id="88" orderer="1" instructions=""
4+
creator="1" date_created="2012-01-19 12:24:10.0"
5+
voided="false" patient_id="2"
6+
uuid="0c96f25c-4949-4f72-9931-d808fbcdb611" care_setting="1" />
7+
<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"/>
8+
</dataset>

‎api/src/test/resources/org/openmrs/api/include/OrderServiceTest-reviseInActiveOrders.xml

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
<?xml version='1.0' encoding='UTF-8'?>
22
<dataset>
3-
<global_property property="order.nextOrderNumberSeed" property_value="1" uuid="1d55827e-26fe-102b-80cb-0017a47879y5"/>
43
<orders order_id="6" order_number="6" urgency="ROUTINE" order_action="NEW" concept_id="88" orderer="1" instructions=""
54
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"
65
voided="false" patient_id="2"

0 commit comments

Comments
 (0)
Please sign in to comment.