Skip to content

Commit 9793bba

Browse files
Fix stocktake bug for counting serialized items (#12280) (#12282)
* Fix stocktake bug for counting serialized items * Add unit test (cherry picked from commit 414aac0) Co-authored-by: Oliver <oliver.henry.walters@gmail.com>
1 parent ffc60cb commit 9793bba

2 files changed

Lines changed: 34 additions & 8 deletions

File tree

src/backend/InvenTree/stock/models.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2651,8 +2651,8 @@ def stocktake(self, count, user, **kwargs):
26512651
)
26522652
tracking_info['old_status_logical'] = old_status_logical
26532653

2654-
if self.updateQuantity(count):
2655-
tracking_info['quantity'] = float(count)
2654+
if self.serialized or self.updateQuantity(count):
2655+
tracking_info['quantity'] = 1 if self.serialized else float(count)
26562656

26572657
self.stocktake_date = InvenTree.helpers.current_date()
26582658
self.stocktake_user = user
@@ -2672,12 +2672,12 @@ def stocktake(self, count, user, **kwargs):
26722672
deltas=tracking_info,
26732673
)
26742674

2675-
trigger_event(
2676-
StockEvents.ITEM_COUNTED,
2677-
'stockitem.counted',
2678-
id=self.id,
2679-
quantity=float(self.quantity),
2680-
)
2675+
trigger_event(
2676+
StockEvents.ITEM_COUNTED,
2677+
'stockitem.counted',
2678+
id=self.id,
2679+
quantity=1 if self.serialized else float(self.quantity),
2680+
)
26812681

26822682
return True
26832683

src/backend/InvenTree/stock/test_api.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2289,6 +2289,32 @@ def test_action(self):
22892289
self.assertEqual(response.data['items'][0]['pk'], 1234)
22902290
self.assertEqual(response.data['items'][0]['quantity'], target[endpoint])
22912291

2292+
def test_count_serialized(self):
2293+
"""Test that counting a serialized stock item correctly updates stocktake_date."""
2294+
import datetime
2295+
2296+
# Fixture item pk=501 is a serialized item (serial=1)
2297+
item = StockItem.objects.get(pk=501)
2298+
self.assertTrue(item.serialized)
2299+
self.assertEqual(item.quantity, 1)
2300+
2301+
# Clear any existing stocktake date so we can verify it gets set
2302+
item.stocktake_date = None
2303+
item.save()
2304+
2305+
url = reverse('api-stock-count')
2306+
2307+
# Count the serialized item — quantity must be 1
2308+
data = {'items': [{'pk': item.pk, 'quantity': 1}]}
2309+
response = self.post(url, data, expected_code=201)
2310+
2311+
self.assertEqual(response.data['items'][0]['pk'], item.pk)
2312+
self.assertEqual(response.data['items'][0]['quantity'], '1.00000')
2313+
2314+
# stocktake_date must have been set to today
2315+
item.refresh_from_db()
2316+
self.assertEqual(item.stocktake_date, datetime.date.today())
2317+
22922318
def test_transfer(self):
22932319
"""Test stock transfers."""
22942320
stock_item = StockItem.objects.get(pk=1234)

0 commit comments

Comments
 (0)