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