mirror of
https://github.com/inventree/InvenTree.git
synced 2025-11-30 09:20:03 +00:00
[bug] Serialize location (#10882)
* Properly set location id when serializing stock * Add correct tracking entries * Add unit test
This commit is contained in:
@@ -1907,7 +1907,12 @@ class StockItem(
|
|||||||
data = dict(StockItem.objects.filter(pk=self.pk).values()[0])
|
data = dict(StockItem.objects.filter(pk=self.pk).values()[0])
|
||||||
|
|
||||||
if location:
|
if location:
|
||||||
data['location'] = location
|
if location.structural:
|
||||||
|
raise ValidationError({
|
||||||
|
'location': _('Cannot assign stock to structural location')
|
||||||
|
})
|
||||||
|
|
||||||
|
data['location_id'] = location.pk
|
||||||
|
|
||||||
# Set the parent ID correctly
|
# Set the parent ID correctly
|
||||||
data['parent'] = self
|
data['parent'] = self
|
||||||
@@ -1920,7 +1925,17 @@ class StockItem(
|
|||||||
history_items = []
|
history_items = []
|
||||||
|
|
||||||
for item in items:
|
for item in items:
|
||||||
# Construct a tracking entry for the new StockItem
|
# Construct tracking entries for the new StockItem
|
||||||
|
if entry := item.add_tracking_entry(
|
||||||
|
StockHistoryCode.SPLIT_FROM_PARENT,
|
||||||
|
user,
|
||||||
|
quantity=1,
|
||||||
|
notes=notes,
|
||||||
|
location=location,
|
||||||
|
commit=False,
|
||||||
|
):
|
||||||
|
history_items.append(entry)
|
||||||
|
|
||||||
if entry := item.add_tracking_entry(
|
if entry := item.add_tracking_entry(
|
||||||
StockHistoryCode.ASSIGNED_SERIAL,
|
StockHistoryCode.ASSIGNED_SERIAL,
|
||||||
user,
|
user,
|
||||||
@@ -1937,7 +1952,9 @@ class StockItem(
|
|||||||
StockItemTracking.objects.bulk_create(history_items)
|
StockItemTracking.objects.bulk_create(history_items)
|
||||||
|
|
||||||
# Remove the equivalent number of items
|
# Remove the equivalent number of items
|
||||||
self.take_stock(quantity, user, notes=notes)
|
self.take_stock(
|
||||||
|
quantity, user, code=StockHistoryCode.STOCK_SERIZALIZED, notes=notes
|
||||||
|
)
|
||||||
|
|
||||||
return items
|
return items
|
||||||
|
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ class StockHistoryCode(StatusCode):
|
|||||||
STOCK_COUNT = 10, _('Stock counted')
|
STOCK_COUNT = 10, _('Stock counted')
|
||||||
STOCK_ADD = 11, _('Stock manually added')
|
STOCK_ADD = 11, _('Stock manually added')
|
||||||
STOCK_REMOVE = 12, _('Stock manually removed')
|
STOCK_REMOVE = 12, _('Stock manually removed')
|
||||||
|
STOCK_SERIZALIZED = 13, _('Serialized stock items')
|
||||||
|
|
||||||
RETURNED_TO_STOCK = 15, _('Returned to stock') # Stock item returned to stock
|
RETURNED_TO_STOCK = 15, _('Returned to stock') # Stock item returned to stock
|
||||||
|
|
||||||
|
|||||||
@@ -1271,9 +1271,11 @@ class StockTreeTest(StockTestBase):
|
|||||||
self.assertEqual(item_1.get_children().count(), 1)
|
self.assertEqual(item_1.get_children().count(), 1)
|
||||||
self.assertEqual(item_2.parent, item_1)
|
self.assertEqual(item_2.parent, item_1)
|
||||||
|
|
||||||
|
loc = StockLocation.objects.filter(structural=False).first()
|
||||||
|
|
||||||
# Serialize the secondary item
|
# Serialize the secondary item
|
||||||
serials = [str(i) for i in range(20)]
|
serials = [str(i) for i in range(20)]
|
||||||
items = item_2.serializeStock(20, serials)
|
items = item_2.serializeStock(20, serials, location=loc)
|
||||||
|
|
||||||
self.assertEqual(len(items), 20)
|
self.assertEqual(len(items), 20)
|
||||||
self.assertEqual(StockItem.objects.count(), N + 22)
|
self.assertEqual(StockItem.objects.count(), N + 22)
|
||||||
@@ -1290,6 +1292,9 @@ class StockTreeTest(StockTestBase):
|
|||||||
self.assertEqual(child.parent, item_2)
|
self.assertEqual(child.parent, item_2)
|
||||||
self.assertGreater(child.lft, item_2.lft)
|
self.assertGreater(child.lft, item_2.lft)
|
||||||
self.assertLess(child.rght, item_2.rght)
|
self.assertLess(child.rght, item_2.rght)
|
||||||
|
self.assertEqual(child.location, loc)
|
||||||
|
self.assertIsNotNone(child.location)
|
||||||
|
self.assertEqual(child.tracking_info.count(), 2)
|
||||||
|
|
||||||
# Delete item_2 : we expect that all children will be re-parented to item_1
|
# Delete item_2 : we expect that all children will be re-parented to item_1
|
||||||
item_2.delete()
|
item_2.delete()
|
||||||
|
|||||||
Reference in New Issue
Block a user