import logging from django.core.management.base import BaseCommand from django.db import transaction from stiftung.models import Land, Paechter, Verpachtung 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 ""