From d8922aa9dbcda071e9ec50125be17a95bdbf8059 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sun, 6 May 2018 21:39:33 +1000 Subject: [PATCH] Implemented API to move multiple items at once - Added ability to override request method in inventreeUpdate - Added inventree/script/stock.js to handle stock API js - Added StockMove API endpoint --- InvenTree/static/script/inventree/api.js | 8 ++- InvenTree/static/script/inventree/stock.js | 72 +++++++++++++++++++ InvenTree/static/script/modal_form.js | 3 + InvenTree/stock/api.py | 56 +++++++++++++++ InvenTree/stock/models.py | 17 +++++ InvenTree/stock/templates/stock/location.html | 10 ++- 6 files changed, 162 insertions(+), 4 deletions(-) create mode 100644 InvenTree/static/script/inventree/stock.js diff --git a/InvenTree/static/script/inventree/api.js b/InvenTree/static/script/inventree/api.js index 7cd3c3d66c..a2f0e14814 100644 --- a/InvenTree/static/script/inventree/api.js +++ b/InvenTree/static/script/inventree/api.js @@ -46,6 +46,12 @@ function inventreeUpdate(url, data={}, options={}) { data["_is_final"] = true; } + var method = 'put'; + + if ('method' in options) { + method = options.method; + } + // Middleware token required for data update //var csrftoken = jQuery("[name=csrfmiddlewaretoken]").val(); var csrftoken = getCookie('csrftoken'); @@ -55,7 +61,7 @@ function inventreeUpdate(url, data={}, options={}) { xhr.setRequestHeader('X-CSRFToken', csrftoken); }, url: url, - type: 'put', + type: method, data: data, dataType: 'json', success: function(response, status) { diff --git a/InvenTree/static/script/inventree/stock.js b/InvenTree/static/script/inventree/stock.js new file mode 100644 index 0000000000..77341fe363 --- /dev/null +++ b/InvenTree/static/script/inventree/stock.js @@ -0,0 +1,72 @@ + +function moveStock(rows, options) { + + var modal = '#modal-form'; + + if ('modal' in options) { + modal = options.modal; + } + + if (rows.length == 0) { + alert('No stock items selected'); + return; + } + + function doMove(location, parts) { + inventreeUpdate("/api/stock/move/", + { + location: location, + parts: parts + }, + { + success: function(response) { + closeModal(modal); + if (options.success) { + options.success(); + } + }, + error: function(error) { + alert('error!:\n' + error); + }, + method: 'post' + }); + } + + getStockLocations({}, + { + success: function(response) { + openModal(modal); + modalSetTitle(modal, "Move " + rows.length + " stock items"); + modalSetButtonText(modal, "Move"); + + // Extact part row info + var parts = []; + + for (i = 0; i < rows.length; i++) { + parts.push(rows[i].pk); + } + + var form = "