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 ''