""" Migriert Legacy-Pachtdaten von Land-Feldern zu LandVerpachtung-Einträgen. Die alte Struktur speichert Pachtdaten direkt auf dem Land-Model (aktueller_paechter, pachtbeginn, pachtende, etc.). Die neue Struktur nutzt das LandVerpachtung-Model (1:n). """ from decimal import Decimal from django.core.management.base import BaseCommand from django.db import transaction from stiftung.models import Land, LandVerpachtung class Command(BaseCommand): help = "Migriert Land-Pachtfelder zu LandVerpachtung-Einträgen" def add_arguments(self, parser): parser.add_argument( "--dry-run", action="store_true", help="Zeigt nur an, was gemacht würde", ) def handle(self, *args, **options): dry_run = options["dry_run"] lands = Land.objects.filter( aktueller_paechter__isnull=False, ).select_related("aktueller_paechter") self.stdout.write(f"Land-Einträge mit aktueller_paechter: {lands.count()}") created = 0 skipped = 0 with transaction.atomic(): for land in lands: # Skip if LandVerpachtung already exists for this land+paechter existing = LandVerpachtung.objects.filter( land=land, paechter=land.aktueller_paechter ).exists() if existing: self.stdout.write( self.style.WARNING(f" Übersprungen: {land} (bereits migriert)") ) skipped += 1 continue vertragsnummer = f"LEGACY-{land.lfd_nr}" verpachtete_flaeche = land.verp_flaeche_aktuell or land.groesse_qm or Decimal("1.00") pachtzins = land.pachtzins_pauschal or Decimal("0.00") self.stdout.write( f" Migriere: {land} -> {land.aktueller_paechter} " f"(Beginn={land.pachtbeginn}, Ende={land.pachtende}, " f"Fläche={verpachtete_flaeche}qm, Pachtzins={pachtzins}€)" ) if not dry_run: LandVerpachtung.objects.create( land=land, paechter=land.aktueller_paechter, vertragsnummer=vertragsnummer, pachtbeginn=land.pachtbeginn or land.erstellt_am.date(), pachtende=land.pachtende, verlaengerung_klausel=land.verlaengerung_klausel, verpachtete_flaeche=verpachtete_flaeche, pachtzins_pauschal=pachtzins, pachtzins_pro_ha=land.pachtzins_pro_ha, zahlungsweise=land.zahlungsweise or "jaehrlich", ust_option=land.ust_option, ust_satz=land.ust_satz or Decimal("19.00"), grundsteuer_umlage=land.grundsteuer_umlage, versicherungen_umlage=land.versicherungen_umlage, verbandsbeitraege_umlage=land.verbandsbeitraege_umlage, jagdpacht_anteil_umlage=land.jagdpacht_anteil_umlage, status="aktiv", bemerkungen=f"Automatisch migriert aus Land-Feldern (Lfd.Nr. {land.lfd_nr})", ) created += 1 action = "würden erstellt" if dry_run else "erstellt" self.stdout.write( self.style.SUCCESS( f"\n{created} LandVerpachtung-Einträge {action}, {skipped} übersprungen." ) )