diff --git a/InvenTree/order/templates/order/order_base.html b/InvenTree/order/templates/order/order_base.html
index 6a50497a94..8b98755900 100644
--- a/InvenTree/order/templates/order/order_base.html
+++ b/InvenTree/order/templates/order/order_base.html
@@ -39,6 +39,9 @@ src="{% static 'img/blank_image.png' %}"
+
{% if roles.purchase_order.change %}
{% endif %}
{% endif %}
-
{% endblock %}
@@ -224,7 +224,7 @@ $("#cancel-order").click(function() {
});
$("#export-order").click(function() {
- location.href = '{% url "po-export" order.id %}';
+ exportOrder('{% url "po-export" order.id %}');
});
diff --git a/InvenTree/order/templates/order/sales_order_base.html b/InvenTree/order/templates/order/sales_order_base.html
index 63f3b037ed..3fd34e42b9 100644
--- a/InvenTree/order/templates/order/sales_order_base.html
+++ b/InvenTree/order/templates/order/sales_order_base.html
@@ -202,7 +202,7 @@ $('#print-order-report').click(function() {
});
$('#export-order').click(function() {
- location.href = '{% url "so-export" order.id %}';
+ exportOrder('{% url "so-export" order.id %}');
});
{% endblock %}
\ No newline at end of file
diff --git a/InvenTree/templates/js/dynamic/inventree.js b/InvenTree/templates/js/dynamic/inventree.js
index 5cd7bfcb80..1821c5ef70 100644
--- a/InvenTree/templates/js/dynamic/inventree.js
+++ b/InvenTree/templates/js/dynamic/inventree.js
@@ -10,6 +10,7 @@
/* exported
attachClipboard,
enableDragAndDrop,
+ exportFormatOptions,
inventreeDocReady,
inventreeLoad,
inventreeSave,
@@ -46,6 +47,31 @@ function attachClipboard(selector, containerselector, textElement) {
}
+/**
+ * Return a standard list of export format options *
+ */
+function exportFormatOptions() {
+ return [
+ {
+ value: 'csv',
+ display_name: 'CSV',
+ },
+ {
+ value: 'tsv',
+ display_name: 'TSV',
+ },
+ {
+ value: 'xls',
+ display_name: 'XLS',
+ },
+ {
+ value: 'xlsx',
+ display_name: 'XLSX',
+ },
+ ];
+}
+
+
function inventreeDocReady() {
/* Run this function when the HTML document is loaded.
* This will be called for every page that extends "base.html"
diff --git a/InvenTree/templates/js/translated/order.js b/InvenTree/templates/js/translated/order.js
index f4b1d0b997..7cadfe453d 100644
--- a/InvenTree/templates/js/translated/order.js
+++ b/InvenTree/templates/js/translated/order.js
@@ -21,6 +21,7 @@
/* exported
createSalesOrder,
editPurchaseOrderLineItem,
+ exportOrder,
loadPurchaseOrderLineItemTable,
loadPurchaseOrderTable,
loadSalesOrderAllocationTable,
@@ -187,6 +188,49 @@ function newSupplierPartFromOrderWizard(e) {
});
}
+/**
+ * Export an order (PurchaseOrder or SalesOrder)
+ *
+ * - Display a simple form which presents the user with export options
+ *
+ */
+function exportOrder(redirect_url, options={}) {
+
+ var format = options.format;
+
+ // If default format is not provided, lookup
+ if (!format) {
+ format = inventreeLoad('order-export-format', 'csv');
+ }
+
+ constructFormBody({}, {
+ title: '{% trans "Export Order" %}',
+ fields: {
+ format: {
+ label: '{% trans "Format" %}',
+ help_text: '{% trans "Select file format" %}',
+ required: true,
+ type: 'choice',
+ value: format,
+ choices: exportFormatOptions(),
+ }
+ },
+ onSubmit: function(fields, opts) {
+
+ var format = getFormFieldValue('format', fields['format'], opts);
+
+ // Save the format for next time
+ inventreeSave('order-export-format', format);
+
+ // Hide the modal
+ $(opts.modal).modal('hide');
+
+ // Download the file!
+ location.href = `${redirect_url}?format=${format}`;
+ }
+ });
+}
+
function newPurchaseOrderFromOrderWizard(e) {
/* Create a new purchase order directly from an order form.
* Launches a secondary modal and (if successful),
diff --git a/InvenTree/templates/js/translated/stock.js b/InvenTree/templates/js/translated/stock.js
index b88f5f1862..67c50bffef 100644
--- a/InvenTree/templates/js/translated/stock.js
+++ b/InvenTree/templates/js/translated/stock.js
@@ -98,24 +98,7 @@ function exportStock(params={}) {
required: true,
type: 'choice',
value: 'csv',
- choices: [
- {
- value: 'csv',
- display_name: 'CSV',
- },
- {
- value: 'tsv',
- display_name: 'TSV',
- },
- {
- value: 'xls',
- display_name: 'XLS',
- },
- {
- value: 'xlsx',
- display_name: 'XLSX',
- },
- ],
+ choices: exportFormatOptions(),
},
sublocations: {
label: '{% trans "Include Sublocations" %}',