Skip to content

Commit f37e9a1

Browse files
committed
fix(migration): remove orgs dependency and preserve system rate sheet links
1 parent 620b677 commit f37e9a1

2 files changed

Lines changed: 40 additions & 2 deletions

File tree

modules/core/karrio/server/providers/migrations/0106_system_rate_sheet.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,9 @@ def migrate_system_rate_sheets(apps, schema_editor):
6464
if migrated_count:
6565
print(f"\n Migrated {migrated_count} system rate sheet(s) to SystemRateSheet table")
6666

67-
# Delete all migrated rows from the old RateSheet table
68-
RateSheet.objects.filter(id__in=all_ids).delete()
67+
# DO NOT delete here — deleting before the FK switch in 0107 triggers
68+
# on_delete=SET_NULL and nulls SystemConnection.rate_sheet_id. Cleanup
69+
# runs in 0109_cleanup_legacy_system_rate_sheets after the FK transition.
6970

7071

7172
class Migration(migrations.Migration):
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from django.db import migrations
2+
3+
4+
def cleanup_legacy_system_rate_sheets(apps, schema_editor):
5+
"""Delete legacy RateSheet rows that were migrated to SystemRateSheet.
6+
7+
Runs after providers.0107 switches SystemConnection.rate_sheet FK to
8+
SystemRateSheet, so deleting legacy rows cannot null SystemConnection FK.
9+
Also runs after providers.0108 (DHL Parcel DE credential cleanup).
10+
"""
11+
RateSheet = apps.get_model("providers", "RateSheet")
12+
SystemRateSheet = apps.get_model("providers", "SystemRateSheet")
13+
14+
system_ids = list(SystemRateSheet.objects.values_list("id", flat=True))
15+
if not system_ids:
16+
return
17+
18+
deleted, _ = RateSheet.objects.filter(id__in=system_ids).delete()
19+
if deleted:
20+
print(
21+
f"\n Cleanup: deleted {deleted} legacy RateSheet row(s) "
22+
f"migrated to SystemRateSheet"
23+
)
24+
25+
26+
class Migration(migrations.Migration):
27+
28+
dependencies = [
29+
("providers", "0108_clear_dhl_parcel_de_username_password"),
30+
]
31+
32+
operations = [
33+
migrations.RunPython(
34+
cleanup_legacy_system_rate_sheets,
35+
reverse_code=migrations.RunPython.noop,
36+
),
37+
]

0 commit comments

Comments
 (0)