diff --git a/InvenTree/stock/serializers.py b/InvenTree/stock/serializers.py index a7228a81d9..fb78eaeaa0 100644 --- a/InvenTree/stock/serializers.py +++ b/InvenTree/stock/serializers.py @@ -568,6 +568,10 @@ class StockAssignmentItemSerializer(serializers.Serializer): if not item.in_stock: raise ValidationError(_("Item must be in stock")) + # The base part must be "salable" + if not item.part.salable: + raise ValidationError(_("Part must be salable")) + # The item must not be allocated to a sales order if item.sales_order_allocations.count() > 0: raise ValidationError(_("Item is allocated to a sales order")) @@ -655,6 +659,7 @@ class StockAssignmentSerializer(serializers.Serializer): notes=notes, ) + class StockAdjustmentItemSerializer(serializers.Serializer): """ Serializer for a single StockItem within a stock adjument request. diff --git a/InvenTree/stock/test_api.py b/InvenTree/stock/test_api.py index 56e6282297..ec5064f08b 100644 --- a/InvenTree/stock/test_api.py +++ b/InvenTree/stock/test_api.py @@ -818,7 +818,7 @@ class StockAssignTest(StockAPITestCase): stock_item = StockItem.objects.create( part=part.models.Part.objects.get(pk=1), - quantity=i+5, + quantity=i + 5, ) stock_items.append({ @@ -829,7 +829,7 @@ class StockAssignTest(StockAPITestCase): self.assertEqual(customer.assigned_stock.count(), 0) - response = self.post( + self.post( self.URL, data={ 'items': stock_items, diff --git a/InvenTree/templates/js/translated/stock.js b/InvenTree/templates/js/translated/stock.js index e9e97e3b87..8babcece69 100644 --- a/InvenTree/templates/js/translated/stock.js +++ b/InvenTree/templates/js/translated/stock.js @@ -651,7 +651,7 @@ function assignStockToCustomer(items, options={}) { // Does the row exist in the form? var row = $(opts.modal).find(`#stock_item_${pk}`); - if (row) { + if (row.exists()) { item_pk_values.push(pk); data.items.push({ @@ -931,7 +931,7 @@ function adjustStock(action, items, options={}) { // Does the row exist in the form? var row = $(opts.modal).find(`#stock_item_${pk}`); - if (row) { + if (row.exists()) { item_pk_values.push(pk); @@ -1875,6 +1875,17 @@ function loadStockTable(table, options) { stockAdjustment('move'); }); + $('#multi-item-assign').click(function() { + + var items = $(table).bootstrapTable('getSelections'); + + assignStockToCustomer(items, { + success: function() { + $(table).bootstrapTable('refresh'); + } + }); + }); + $('#multi-item-order').click(function() { var selections = $(table).bootstrapTable('getSelections'); diff --git a/InvenTree/templates/stock_table.html b/InvenTree/templates/stock_table.html index 71c6734818..1f873d7c58 100644 --- a/InvenTree/templates/stock_table.html +++ b/InvenTree/templates/stock_table.html @@ -50,6 +50,7 @@