Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,12 @@
import org.apache.commons.logging.LogFactory;
import org.junit.Before;
import org.junit.Test;
import org.openmrs.Drug;
import org.openmrs.api.context.Context;
import org.openmrs.module.htmlformentry.BaseHtmlFormEntryTest;
import org.openmrs.module.htmlformentry.tester.FormSessionTester;
import org.openmrs.module.htmlformentry.tester.FormTester;
import org.openmrs.module.htmlformentry.util.JsonObject;

public class OrderWidgetTest extends BaseHtmlFormEntryTest {

Expand Down Expand Up @@ -77,4 +80,28 @@ public void shouldRenderTemplateWithWidgetsForTestOrder() {
fst.assertHtmlContains(propertyWidget.generateHtml(fst.getFormEntrySession().getContext()));
}
}

@Test
public void shouldIndicateWhenDrugOrderHistoryDrugIsRetired() {
FormTester formTester = FormTester.buildForm("orderTestForm.xml");

// Patient 2 has an existing, open order for drug 2, which is not retired
FormSessionTester fst = formTester.openNewForm(2);
OrderWidget widget = fst.getWidgets(OrderWidget.class).get(0);
JsonObject config = widget.constructJavascriptConfig(fst.getFormEntrySession().getContext());
JsonObject historyOrder = config.getObjectArray("history").get(0);
assertThat(historyOrder.getObject("drug").getString("retired"), is("false"));

// Once the drug is retired, the history entry for the existing order should reflect this
Drug drug = Context.getConceptService().getDrug(2);
drug.setRetired(true);
Context.getConceptService().saveDrug(drug);

FormSessionTester fstAfterRetiring = formTester.openNewForm(2);
OrderWidget widgetAfterRetiring = fstAfterRetiring.getWidgets(OrderWidget.class).get(0);
JsonObject configAfterRetiring = widgetAfterRetiring
.constructJavascriptConfig(fstAfterRetiring.getFormEntrySession().getContext());
JsonObject historyOrderAfterRetiring = configAfterRetiring.getObjectArray("history").get(0);
assertThat(historyOrderAfterRetiring.getObject("drug").getString("retired"), is("true"));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ public JsonObject constructJavascriptConfig(FormEntryContext context) {
String[] messageCodes = { "encounterDateChangeWarning", "delete", "editDeleteWarning", "editOrder", "deleteOrder",
"previousOrder", "orderReason", "starting", "until", "for", "discontinueReason", "asNeeded", "quantity",
"refills", "active", "cancelAction", "existingOrdersViewTitle", "existingOrdersEditTitle", "newOrdersTitle",
"noOrders" };
"noOrders", "drugRetired" };
for (String messageCode : messageCodes) {
translations.addTranslation(prefix, messageCode);
}
Expand Down Expand Up @@ -258,6 +258,7 @@ public JsonObject constructJavascriptConfig(FormEntryContext context) {
if (o instanceof DrugOrder) {
DrugOrder d = (DrugOrder) o;
addToJsonObject(jho, "drug", d.getDrug());
jho.getObject("drug").addString("retired", Boolean.toString(d.getDrug() != null && d.getDrug().getRetired()));
addToJsonObject(jho, "drugNonCoded", d.getDrugNonCoded());
addToJsonObject(jho, "dosingType", d.getDosingType());
addToJsonObject(jho, "dosingInstructions", d.getDosingInstructions());
Expand Down
1 change: 1 addition & 0 deletions api/src/main/resources/messages.properties
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@ htmlformentry.orders.laterality = Laterality
htmlformentry.orders.clinicalHistory = Clinical History
htmlformentry.orders.numberOfRepeats = Number of Repeats
htmlformentry.orders.location = Location
htmlformentry.orders.drugRetired = This drug is retired and is no longer orderable.

htmlformentry.orders.previousOrderRequired = You must specify an existing order in order to revise it
htmlformentry.orders.drugChangedForRevision = No drug changes are permitted when issuing a revise order
Expand Down
1 change: 1 addition & 0 deletions api/src/main/resources/messages_es.properties
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ htmlformentry.orders.deleteOrder = Eliminar
htmlformentry.orders.existingOrdersViewTitle = Solicitudes revisadas
htmlformentry.orders.existingOrdersEditTitle = Ordenes activas
htmlformentry.orders.newOrdersTitle = Nuevas órdenes
htmlformentry.orders.drugRetired = Este medicamento está retirado y ya no se puede solicitar.

htmlformentry.orders.previousOrderRequired = Debe especificar una orden existente para revisarla
htmlformentry.orders.drugChangedForRevision = No se permiten cambios de drogas al emitir una orden de revisión.
Expand Down
1 change: 1 addition & 0 deletions api/src/main/resources/messages_fr.properties
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ htmlformentry.orders.deleteOrder = Supprimer
htmlformentry.orders.existingOrdersViewTitle = Commandes révisées
htmlformentry.orders.existingOrdersEditTitle = Commandes actives
htmlformentry.orders.newOrdersTitle = Nouvelles commandes
htmlformentry.orders.drugRetired = Ce médicament est retiré et ne peut plus être commandé.

htmlformentry.orders.previousOrderRequired = Vous devez specifier une ordonnance existante afin de pouvoir la réviser
htmlformentry.orders.drugChangedForRevision = Aucun changement de médicaments n’est permis quand une revision d’ordonnance est émise
Expand Down
1 change: 1 addition & 0 deletions api/src/main/resources/messages_ht.properties
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ htmlformentry.orders.deleteOrder = Delete
htmlformentry.orders.existingOrdersViewTitle = Revised Orders
htmlformentry.orders.existingOrdersEditTitle = Active Orders
htmlformentry.orders.newOrdersTitle = New Orders
htmlformentry.orders.drugRetired = Medikaman sa a te retire e li pa kapab kòmande ankò.

htmlformentry.orders.previousOrderRequired = You must specify an existing order in order to revise it
htmlformentry.orders.drugChangedForRevision = No drug changes are permitted when issuing a revise order
Expand Down
12 changes: 12 additions & 0 deletions omod/src/main/webapp/resources/orderWidget.css
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,18 @@
box-shadow: 0 0 5px -1px rgba(0,0,0,0.6);
}

.order-action-button.orderwidget-disabled-action {
cursor: not-allowed;
opacity: 0.5;
}
.order-action-button.orderwidget-disabled-action:hover,
.order-action-button.orderwidget-disabled-action:active {
background: -webkit-linear-gradient(top, #ffffff, #dddddd);
border-color: #dddddd;
box-shadow: 0 0 5px -1px rgba(0,0,0,0.2);
font-weight: normal;
}

.orderwidget-autocomplete-textbox {
display: inline-block;
max-width: 600px;
Expand Down
47 changes: 29 additions & 18 deletions omod/src/main/webapp/resources/orderWidget.js
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,11 @@
return supportsAction && (inEncounter || notDiscontinued);
}

// True if the given order is a drug order whose drug has since been retired
orderWidget.isDrugRetired = function(order) {
return order.isDrugOrder === 'true' && order.drug && order.drug.retired === 'true';
}

orderWidget.getActionOption = function(config, action) {
var $orderTemplate = $('#' + config.fieldName + '_template');
var $actionSection = $orderTemplate.find('.order-field.order-action');
Expand Down Expand Up @@ -379,25 +384,31 @@
var actionLabel = isVoidAndEdit ? config.translations.editOrder : isVoid ? config.translations.deleteOrder : $actionOption.html();

var $actionButton = orderWidget.createActionButton(idSuffix, action, actionLabel);
$actionButton.click(function() {
var $orderForm = $orderActionForms.find('.orderwidget-order-form');
$orderActionSection.find(".order-action-button").removeClass('orderwidget-selected-action');
if ($orderForm.length > 0) {
$orderForm.remove();
}
$actionButton.addClass('orderwidget-selected-action');
$actionButton.show();
$orderForm = orderWidget.constructOrderForm($orderActionForms, idSuffix, config, action, $actionButton);
orderWidget.populateOrderForm(config, $orderForm, order);

if (isVoidAndEdit || isVoid) {
if (isVoid) {
$orderForm.find('.order-field').hide();

if ((action === 'RENEW' || action === 'REVISE') && orderWidget.isDrugRetired(order)) {
$actionButton.addClass('orderwidget-disabled-action');
$actionButton.attr('title', config.translations.drugRetired);
} else {
$actionButton.click(function() {
var $orderForm = $orderActionForms.find('.orderwidget-order-form');
$orderActionSection.find(".order-action-button").removeClass('orderwidget-selected-action');
if ($orderForm.length > 0) {
$orderForm.remove();
}
$orderForm.prepend("<div class='order-action-warnings'>" + config.translations.editDeleteWarning + "</div>");
$orderForm.show();
}
});
$actionButton.addClass('orderwidget-selected-action');
$actionButton.show();
$orderForm = orderWidget.constructOrderForm($orderActionForms, idSuffix, config, action, $actionButton);
orderWidget.populateOrderForm(config, $orderForm, order);

if (isVoidAndEdit || isVoid) {
if (isVoid) {
$orderForm.find('.order-field').hide();
}
$orderForm.prepend("<div class='order-action-warnings'>" + config.translations.editDeleteWarning + "</div>");
$orderForm.show();
}
});
}
$orderActionButtons.append($actionButton);
});

Expand Down