From 92568748cfadb317f52b2fc910eeb0d80365673e Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 20 Oct 2021 23:03:03 +1100 Subject: [PATCH] Further improvements - Add callback for when a select2 form field is updated - Adjust selected quantity based on returned data - auto_fill the stock_item field --- InvenTree/templates/js/translated/forms.js | 5 +++++ InvenTree/templates/js/translated/order.js | 20 ++++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/InvenTree/templates/js/translated/forms.js b/InvenTree/templates/js/translated/forms.js index 1bfe196286..db2c8e46cc 100644 --- a/InvenTree/templates/js/translated/forms.js +++ b/InvenTree/templates/js/translated/forms.js @@ -1426,6 +1426,11 @@ function initializeRelatedField(field, fields, options) { data = item.element.instance; } + // Run optional callback function + if (field.onSelect && data) { + field.onSelect(data, field, options); + } + if (!data.pk) { return field.placeholder || ''; } diff --git a/InvenTree/templates/js/translated/order.js b/InvenTree/templates/js/translated/order.js index 93445afea8..dfac640fee 100644 --- a/InvenTree/templates/js/translated/order.js +++ b/InvenTree/templates/js/translated/order.js @@ -1661,7 +1661,23 @@ function loadSalesOrderLineItemTable(table, options={}) { in_stock: true, part: line_item.part, exclude_so_allocation: options.order, - } + }, + auto_fill: true, + onSelect: function(data, field, opts) { + // Quantity available from this stock item + + if (!("quantity" in data)) { + return; + } + + // Calculate the available quantity + var available = Math.max((data.quantity || 0) - (data.allocated || 0), 0); + + // Maximum amount that we need + var desired = Math.min(available, remaining); + + updateFieldValue('quantity', desired, {}, opts); + } }, quantity: { value: remaining, @@ -1760,7 +1776,7 @@ function loadSalesOrderLineItemTable(table, options={}) { showFooter: true, uniqueId: 'pk', detailView: show_detail, - detailViewByClick: show_detail, + detailViewByClick: false, detailFilter: function(index, row) { if (pending) { // Order is pending