diff --git a/InvenTree/order/migrations/0052_auto_20211014_0631.py b/InvenTree/order/migrations/0052_auto_20211014_0631.py index 94a591d3d6..36e2d882ac 100644 --- a/InvenTree/order/migrations/0052_auto_20211014_0631.py +++ b/InvenTree/order/migrations/0052_auto_20211014_0631.py @@ -23,6 +23,10 @@ def build_refs(apps, schema_editor): except Exception: # pragma: no cover ref = 0 + # Clip integer value to ensure it does not overflow database field + if ref > 0x7fffffff: + ref = 0x7fffffff + order.reference_int = ref order.save() @@ -40,6 +44,10 @@ def build_refs(apps, schema_editor): except Exception: # pragma: no cover ref = 0 + # Clip integer value to ensure it does not overflow database field + if ref > 0x7fffffff: + ref = 0x7fffffff + order.reference_int = ref order.save() diff --git a/InvenTree/order/test_migrations.py b/InvenTree/order/test_migrations.py index 1734501a9c..a45f09fc48 100644 --- a/InvenTree/order/test_migrations.py +++ b/InvenTree/order/test_migrations.py @@ -49,6 +49,19 @@ class TestRefIntMigrations(MigratorTestCase): with self.assertRaises(AttributeError): print(sales_order.reference_int) + # Create orders with very large reference values + self.po_pk = PurchaseOrder.objects.create( + supplier=supplier, + reference='999999999999999999999999999999999', + description='Big reference field', + ).pk + + self.so_pk = SalesOrder.objects.create( + customer=supplier, + reference='999999999999999999999999999999999', + description='Big reference field', + ).pk + def test_ref_field(self): """Test that the 'reference_int' field has been created and is filled out correctly.""" PurchaseOrder = self.new_state.apps.get_model('order', 'purchaseorder') @@ -63,6 +76,15 @@ class TestRefIntMigrations(MigratorTestCase): self.assertEqual(po.reference_int, ii) self.assertEqual(so.reference_int, ii) + # Tests for orders with overly large reference values + po = PurchaseOrder.objects.get(pk=self.po_pk) + self.assertEqual(po.reference, '999999999999999999999999999999999') + self.assertEqual(po.reference_int, 0x7fffffff) + + so = SalesOrder.objects.get(pk=self.so_pk) + self.assertEqual(so.reference, '999999999999999999999999999999999') + self.assertEqual(so.reference_int, 0x7fffffff) + class TestShipmentMigration(MigratorTestCase): """Test data migration for the "SalesOrderShipment" model."""