From 1e6c6c678f33c94a7ee05d9d13767369a81ecf69 Mon Sep 17 00:00:00 2001 From: eeintech Date: Tue, 13 Apr 2021 10:25:53 -0400 Subject: [PATCH] Split supplier part update migration and added reverse method for manufacturer data --- .../migrations/0035_supplierpart_update_1.py | 18 +++++++ ...pdate.py => 0036_supplierpart_update_2.py} | 49 ++++++++++++------- .../migrations/0037_supplierpart_update_3.py | 21 ++++++++ InvenTree/company/test_migrations.py | 4 +- 4 files changed, 73 insertions(+), 19 deletions(-) create mode 100644 InvenTree/company/migrations/0035_supplierpart_update_1.py rename InvenTree/company/migrations/{0035_supplierpart_update.py => 0036_supplierpart_update_2.py} (69%) create mode 100644 InvenTree/company/migrations/0037_supplierpart_update_3.py diff --git a/InvenTree/company/migrations/0035_supplierpart_update_1.py b/InvenTree/company/migrations/0035_supplierpart_update_1.py new file mode 100644 index 0000000000..657ae2464c --- /dev/null +++ b/InvenTree/company/migrations/0035_supplierpart_update_1.py @@ -0,0 +1,18 @@ +import InvenTree.fields +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('company', '0034_manufacturerpart'), + ] + + operations = [ + migrations.AddField( + model_name='supplierpart', + name='manufacturer_part', + field=models.ForeignKey(blank=True, help_text='Select manufacturer part', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='supplier_parts', to='company.ManufacturerPart', verbose_name='Manufacturer Part'), + ), + ] diff --git a/InvenTree/company/migrations/0035_supplierpart_update.py b/InvenTree/company/migrations/0036_supplierpart_update_2.py similarity index 69% rename from InvenTree/company/migrations/0035_supplierpart_update.py rename to InvenTree/company/migrations/0036_supplierpart_update_2.py index 1fc14abf1f..52a470be92 100644 --- a/InvenTree/company/migrations/0035_supplierpart_update.py +++ b/InvenTree/company/migrations/0036_supplierpart_update_2.py @@ -11,7 +11,7 @@ def supplierpart_make_manufacturer_parts(apps, schema_editor): supplier_parts = SupplierPart.objects.all() if supplier_parts: - print(f'\nCreating Manufacturer parts\n{"-"*10}') + print(f'\nCreating ManufacturerPart Objects\n{"-"*10}') for supplier_part in supplier_parts: print(f'{supplier_part.supplier.name[:15].ljust(15)} | {supplier_part.SKU[:15].ljust(15)}\t', end='') @@ -67,29 +67,44 @@ def supplierpart_make_manufacturer_parts(apps, schema_editor): print(f'{"-"*10}\nDone\n') +def supplierpart_populate_manufacturer_info(apps, schema_editor): + Part = apps.get_model('part', 'Part') + ManufacturerPart = apps.get_model('company', 'ManufacturerPart') + SupplierPart = apps.get_model('company', 'SupplierPart') + + supplier_parts = SupplierPart.objects.all() + + if supplier_parts: + print(f'\nSupplierPart: Populating Manufacturer Information\n{"-"*10}') + for supplier_part in supplier_parts: + print(f'{supplier_part.supplier.name[:15].ljust(15)} | {supplier_part.SKU[:15].ljust(15)}\t', end='') + + manufacturer_part = supplier_part.manufacturer_part + + if manufacturer_part: + if manufacturer_part.manufacturer: + supplier_part.manufacturer = manufacturer_part.manufacturer + + if manufacturer_part.MPN: + supplier_part.MPN = manufacturer_part.MPN + + supplier_part.save() + + print(f'[SUCCESS: UPDATED MANUFACTURER INFO]') + else: + print(f'[IGNORED: NO MANUFACTURER PART]') + + print(f'{"-"*10}\nDone\n') + class Migration(migrations.Migration): dependencies = [ - ('company', '0033_auto_20210410_1528'), - ('company', '0034_manufacturerpart'), + ('company', '0035_supplierpart_update_1'), ] operations = [ - migrations.AddField( - model_name='supplierpart', - name='manufacturer_part', - field=models.ForeignKey(blank=True, help_text='Select manufacturer part', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='supplier_parts', to='company.ManufacturerPart', verbose_name='Manufacturer Part'), - ), # Make new ManufacturerPart with SupplierPart "manufacturer" and "MPN" # fields, then link it to the new SupplierPart "manufacturer_part" field - migrations.RunPython(supplierpart_make_manufacturer_parts), - migrations.RemoveField( - model_name='supplierpart', - name='MPN', - ), - migrations.RemoveField( - model_name='supplierpart', - name='manufacturer', - ), + migrations.RunPython(supplierpart_make_manufacturer_parts, reverse_code=supplierpart_populate_manufacturer_info), ] diff --git a/InvenTree/company/migrations/0037_supplierpart_update_3.py b/InvenTree/company/migrations/0037_supplierpart_update_3.py new file mode 100644 index 0000000000..e3384be513 --- /dev/null +++ b/InvenTree/company/migrations/0037_supplierpart_update_3.py @@ -0,0 +1,21 @@ +import InvenTree.fields +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('company', '0036_supplierpart_update_2'), + ] + + operations = [ + migrations.RemoveField( + model_name='supplierpart', + name='MPN', + ), + migrations.RemoveField( + model_name='supplierpart', + name='manufacturer', + ), + ] diff --git a/InvenTree/company/test_migrations.py b/InvenTree/company/test_migrations.py index 5a90bef68e..bf6e212f7a 100644 --- a/InvenTree/company/test_migrations.py +++ b/InvenTree/company/test_migrations.py @@ -109,11 +109,11 @@ class TestManufacturerField(MigratorTestCase): class TestManufacturerPart(MigratorTestCase): """ - Tests for migration 0034 and 0035 which added and transitioned to the ManufacturerPart model + Tests for migration 0034-0037 which added and transitioned to the ManufacturerPart model """ migrate_from = ('company', '0033_auto_20210410_1528') - migrate_to = ('company', '0035_supplierpart_update') + migrate_to = ('company', '0037_supplierpart_update_3') def prepare(self): """