2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-04-30 12:36:45 +00:00

Make "shipment" field required for a SalesOrderAllocation

- Deleting a "Shipment" will delete any "Allocation" objects which reference it
- Improve existing data migration for new shipment model
This commit is contained in:
Oliver 2021-10-25 22:47:41 +11:00
parent ce5b47460a
commit d31f2be955
3 changed files with 41 additions and 4 deletions

View File

@ -0,0 +1,19 @@
# Generated by Django 3.2.5 on 2021-10-25 11:40
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('order', '0055_auto_20211025_0645'),
]
operations = [
migrations.AlterField(
model_name='salesorderallocation',
name='shipment',
field=models.ForeignKey(help_text='Sales order shipment reference', on_delete=django.db.models.deletion.CASCADE, to='order.salesordershipment', verbose_name='Shipment'),
),
]

View File

@ -1039,7 +1039,6 @@ class SalesOrderAllocation(models.Model):
shipment = models.ForeignKey( shipment = models.ForeignKey(
SalesOrderShipment, SalesOrderShipment,
on_delete=models.CASCADE, on_delete=models.CASCADE,
null=True, blank=True,
verbose_name=_('Shipment'), verbose_name=_('Shipment'),
help_text=_('Sales order shipment reference'), help_text=_('Sales order shipment reference'),
) )

View File

@ -27,10 +27,12 @@ class TestForwardMigrations(MigratorTestCase):
supplier = Company.objects.create( supplier = Company.objects.create(
name='Supplier A', name='Supplier A',
description='A great supplier!', description='A great supplier!',
is_supplier=True is_supplier=True,
is_customer=True,
) )
PurchaseOrder = self.old_state.apps.get_model('order', 'purchaseorder') PurchaseOrder = self.old_state.apps.get_model('order', 'purchaseorder')
SalesOrder = self.old_state.apps.get_model('order', 'salesorder')
# Create some orders # Create some orders
for ii in range(10): for ii in range(10):
@ -45,19 +47,32 @@ class TestForwardMigrations(MigratorTestCase):
with self.assertRaises(AttributeError): with self.assertRaises(AttributeError):
print(order.reference_int) print(order.reference_int)
sales_order = SalesOrder.objects.create(
customer=supplier,
reference=f"{ii}-xyz",
description="A test sales order",
)
# Initially, the 'reference_int' field is unavailable
with self.assertRaises(AttributeError):
print(sales_order.reference_int)
def test_ref_field(self): def test_ref_field(self):
""" """
Test that the 'reference_int' field has been created and is filled out correctly Test that the 'reference_int' field has been created and is filled out correctly
""" """
PurchaseOrder = self.new_state.apps.get_model('order', 'purchaseorder') PurchaseOrder = self.new_state.apps.get_model('order', 'purchaseorder')
SalesOrder = self.new_state.apps.get_model('order', 'salesorder')
for ii in range(10): for ii in range(10):
order = PurchaseOrder.objects.get(reference=f"{ii}-abcde") po = PurchaseOrder.objects.get(reference=f"{ii}-abcde")
so = SalesOrder.objects.get(reference=f"{ii}-xyz")
# The integer reference field must have been correctly updated # The integer reference field must have been correctly updated
self.assertEqual(order.reference_int, ii) self.assertEqual(po.reference_int, ii)
self.assertEqual(so.reference_int, ii)
class TestShipmentMigration(MigratorTestCase): class TestShipmentMigration(MigratorTestCase):
@ -93,6 +108,10 @@ class TestShipmentMigration(MigratorTestCase):
order.save() order.save()
# The "shipment" model does not exist yet
with self.assertRaises(LookupError):
self.old_state.apps.get_model('order', 'salesordershipment')
def test_shipment_creation(self): def test_shipment_creation(self):
""" """
Check that a SalesOrderShipment has been created Check that a SalesOrderShipment has been created