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" %}',