From 3226a1906fa437a98290d6096ee8101e83a42164 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 17 Feb 2022 17:17:09 +1100 Subject: [PATCH] Critical bug fix: Check if serial numbers already exist when creating new StockItem --- InvenTree/stock/api.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/InvenTree/stock/api.py b/InvenTree/stock/api.py index 7bcd89623c..9723e01c09 100644 --- a/InvenTree/stock/api.py +++ b/InvenTree/stock/api.py @@ -528,11 +528,34 @@ class StockList(generics.ListCreateAPIView): serial_numbers = data.get('serial_numbers', '') # Assign serial numbers for a trackable part - if serial_numbers and part.trackable: + if serial_numbers: + + if not part.trackable: + raise ValidationError({ + 'serial_numbers': [_("Serial numbers cannot be supplied for a non-trackable part")] + }) # If serial numbers are specified, check that they match! try: serials = extract_serial_numbers(serial_numbers, quantity, part.getLatestSerialNumberInt()) + + # Determine if any of the specified serial numbers already exist! + existing = [] + + for serial in serials: + if part.checkIfSerialNumberExists(serial): + existing.append(serial) + + if len(existing) > 0: + + msg = _("The following serial numbers already exist") + msg += " : " + msg += ",".join([str(e) for e in existing]) + + raise ValidationError({ + 'serial_numbers': [msg], + }) + except DjangoValidationError as e: raise ValidationError({ 'quantity': e.messages,