from django.contrib import admin from django.utils.html import format_html from ..models import Land, LandVerpachtung, Paechter @admin.register(Paechter) class PaechterAdmin(admin.ModelAdmin): list_display = [ "nachname", "vorname", "pachtnummer", "pachtzins_aktuell", "landwirtschaftliche_ausbildung", "aktiv", ] list_filter = ["landwirtschaftliche_ausbildung", "aktiv"] search_fields = ["nachname", "vorname", "email", "pachtnummer"] ordering = ["nachname", "vorname"] readonly_fields = ["id"] fieldsets = ( ( "Persönliche Daten", {"fields": ("vorname", "nachname", "geburtsdatum", "email", "telefon")}, ), ( "Pacht-Informationen", { "fields": ( "pachtnummer", "pachtbeginn_erste", "pachtende_letzte", "pachtzins_aktuell", ) }, ), ( "Landwirtschaftliche Qualifikation", { "fields": ( "landwirtschaftliche_ausbildung", "berufserfahrung_jahre", "spezialisierung", ) }, ), ("Kontaktdaten", {"fields": ("iban", "strasse", "plz", "ort")}), ("Pächter-Typ", {"fields": ("personentyp",)}), ("Zusätzlich", {"fields": ("notizen", "aktiv")}), ("System", {"fields": ("id",), "classes": ("collapse",)}), ) def iban_display(self, obj): if obj.iban: return format_html( '{}', obj.iban ) return "-" iban_display.short_description = "IBAN" @admin.register(Land) class LandAdmin(admin.ModelAdmin): list_display = [ "lfd_nr", "gemeinde", "gemarkung", "flur", "flurstueck", "groesse_qm", "verp_flaeche_aktuell", "verpachtungsgrad_display", "aktiv", ] list_filter = ["gemeinde", "gemarkung", "aktiv"] search_fields = ["lfd_nr", "gemeinde", "gemarkung", "flur", "flurstueck"] ordering = ["gemeinde", "gemarkung", "flur", "flurstueck"] readonly_fields = ["id", "gesamtflaeche_berechnet", "verpachtungsgrad_berechnet"] fieldsets = ( ("Identifikation", {"fields": ("lfd_nr", "ew_nummer")}), ("Gerichtliche Zuständigkeit", {"fields": ("amtsgericht",)}), ( "Verwaltungsstruktur", {"fields": ("gemeinde", "gemarkung", "flur", "flurstueck")}, ), ( "Flächenangaben", { "fields": ( "groesse_qm", "gruenland_qm", "acker_qm", "wald_qm", "sonstiges_qm", ) }, ), ( "Verpachtung", { "fields": ( "verpachtete_gesamtflaeche", "flaeche_alte_liste", "verp_flaeche_aktuell", ) }, ), ("Steuern und Abgaben", {"fields": ("anteil_grundsteuer", "anteil_lwk")}), ("Status", {"fields": ("aktiv", "notizen")}), ( "System", { "fields": ("id", "erstellt_am", "aktualisiert_am"), "classes": ("collapse",), }, ), ) def verpachtungsgrad_display(self, obj): grad = obj.get_verpachtungsgrad() if grad > 90: color = "green" elif grad > 70: color = "orange" else: color = "red" return format_html('{:.1f}%', color, grad) verpachtungsgrad_display.short_description = "Verpachtungsgrad" def gesamtflaeche_berechnet(self, obj): return f"{obj.get_gesamtflaeche():.2f} qm" gesamtflaeche_berechnet.short_description = "Berechnete Gesamtfläche" def verpachtungsgrad_berechnet(self, obj): return f"{obj.get_verpachtungsgrad():.1f}%" verpachtungsgrad_berechnet.short_description = "Verpachtungsgrad" @admin.register(LandVerpachtung) class LandVerpachtungAdmin(admin.ModelAdmin): list_display = [ "land", "paechter", "pachtzins_pauschal", "pachtbeginn", "pachtende", "status_display", "erstellt_am", ] list_filter = ["status", "pachtbeginn", "pachtende", "erstellt_am"] search_fields = ["land__lfd_nr", "land__gemeinde", "paechter__vorname", "paechter__nachname", "vertragsnummer"] ordering = ["-erstellt_am"] readonly_fields = ["id", "erstellt_am", "aktualisiert_am"] fieldsets = ( ("Verpachtungsdetails", { "fields": ("land", "paechter", "vertragsnummer", "status") }), ("Laufzeit", { "fields": ("pachtbeginn", "pachtende", "verlaengerung_klausel") }), ("Fläche", { "fields": ("verpachtete_flaeche",) }), ("Pachtzins", { "fields": ("pachtzins_pauschal", "pachtzins_pro_ha", "zahlungsweise") }), ("Umsatzsteuer", { "fields": ("ust_option", "ust_satz"), "classes": ("collapse",) }), ("Umlagen", { "fields": ("grundsteuer_umlage", "versicherungen_umlage", "verbandsbeitraege_umlage", "jagdpacht_anteil_umlage"), "classes": ("collapse",) }), ("Zusatzinformationen", { "fields": ("bemerkungen",), "classes": ("collapse",) }), ("System", { "fields": ("id", "erstellt_am", "aktualisiert_am"), "classes": ("collapse",) }), ) def status_display(self, obj): colors = { 'aktiv': 'green', 'beendet': 'red', 'geplant': 'orange', 'gekündigt': 'red' } color = colors.get(obj.status, 'black') return format_html( '{}', color, obj.get_status_display() ) status_display.short_description = "Status"