Files
stiftung-management-system/app/stiftung/management/commands/migrate_verpachtungen.py
2025-09-06 18:31:54 +02:00

93 lines
3.6 KiB
Python

from django.core.management.base import BaseCommand
from django.db import transaction
from stiftung.models import Land, Verpachtung, Paechter
import logging
logger = logging.getLogger(__name__)
class Command(BaseCommand):
help = 'Migriert bestehende Verpachtungen in die neue Land-Struktur'
def add_arguments(self, parser):
parser.add_argument(
'--dry-run',
action='store_true',
help='Zeigt nur an, was gemacht würde, ohne Änderungen zu speichern',
)
def handle(self, *args, **options):
dry_run = options['dry_run']
if dry_run:
self.stdout.write(self.style.WARNING('DRY RUN - Keine Änderungen werden gespeichert!'))
# Alle aktiven Verpachtungen finden
aktive_verpachtungen = Verpachtung.objects.filter(status='aktiv')
self.stdout.write(f'Gefunden: {aktive_verpachtungen.count()} aktive Verpachtungen')
migrated_count = 0
skipped_count = 0
with transaction.atomic():
for verpachtung in aktive_verpachtungen:
land = verpachtung.land
# Prüfen ob bereits migriert
if land.aktueller_paechter is not None:
self.stdout.write(
self.style.WARNING(
f'Übersprungen: {land} hat bereits einen aktuellen Pächter'
)
)
skipped_count += 1
continue
# Migration durchführen
self.stdout.write(f'Migriere: {land} -> {verpachtung.paechter}')
if not dry_run:
# Pächter-Daten ins Land übertragen
land.aktueller_paechter = verpachtung.paechter
land.paechter_name = verpachtung.paechter.get_full_name()
land.paechter_anschrift = self._get_paechter_anschrift(verpachtung.paechter)
land.pachtbeginn = verpachtung.pachtbeginn
land.pachtende = verpachtung.pachtende
land.verlaengerung_klausel = bool(verpachtung.verlaengerung)
# Pachtzins übertragen
land.pachtzins_pauschal = verpachtung.pachtzins_jaehrlich
# Verpachtete Fläche aktualisieren (falls nicht gesetzt)
if land.verp_flaeche_aktuell == 0:
land.verp_flaeche_aktuell = verpachtung.verpachtete_flaeche
land.save()
migrated_count += 1
if dry_run:
self.stdout.write(
self.style.SUCCESS(
f'DRY RUN abgeschlossen: {migrated_count} Verpachtungen würden migriert, {skipped_count} übersprungen'
)
)
else:
self.stdout.write(
self.style.SUCCESS(
f'Migration abgeschlossen: {migrated_count} Verpachtungen migriert, {skipped_count} übersprungen'
)
)
def _get_paechter_anschrift(self, paechter):
"""Erstellt eine Anschrift aus den Pächter-Daten"""
parts = []
if paechter.strasse:
parts.append(paechter.strasse)
if paechter.plz and paechter.ort:
parts.append(f"{paechter.plz} {paechter.ort}")
elif paechter.ort:
parts.append(paechter.ort)
return '\n'.join(parts) if parts else ''