- forms.py → forms/ Package (8 Domänen: destinataere, land, finanzen, foerderung, dokumente, veranstaltung, system, geschichte) - admin.py → admin/ Package (7 Domänen, alle 22 @admin.register dekoriert) - views.py (8845 Zeilen) → views/ Package (10 Domänen: dashboard, destinataere, land, paechter, finanzen, foerderung, dokumente, unterstuetzungen, veranstaltung, geschichte, system) - __init__.py in jedem Package re-exportiert alle Symbole für Rückwärtskompatibilität - urls.py bleibt unverändert (funktioniert durch Re-Exports) - Django system check: 0 Fehler, alle URL-Auflösungen funktionieren Keine funktionalen Änderungen – reine Strukturverbesserung für Vision 2026. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
70 lines
1.9 KiB
Python
70 lines
1.9 KiB
Python
from django.contrib import admin
|
|
from django.db.models import Sum
|
|
from django.urls import reverse
|
|
from django.utils.html import format_html
|
|
|
|
from ..models import Foerderung
|
|
|
|
|
|
@admin.register(Foerderung)
|
|
class FoerderungAdmin(admin.ModelAdmin):
|
|
list_display = [
|
|
"destinataer",
|
|
"jahr",
|
|
"betrag",
|
|
"verwendungsnachweis_link",
|
|
"total_for_destinataer",
|
|
]
|
|
list_filter = ["jahr", "destinataer__familienzweig"]
|
|
search_fields = [
|
|
"destinataer__nachname",
|
|
"destinataer__vorname",
|
|
"destinataer__familienzweig",
|
|
]
|
|
ordering = ["-jahr", "-betrag"]
|
|
readonly_fields = ["id"]
|
|
|
|
fieldsets = (
|
|
(
|
|
"Förderung",
|
|
{
|
|
"fields": (
|
|
"destinataer",
|
|
"person",
|
|
"jahr",
|
|
"betrag",
|
|
"kategorie",
|
|
"status",
|
|
)
|
|
},
|
|
),
|
|
("Dokumentation", {"fields": ("verwendungsnachweis", "bemerkungen")}),
|
|
("Daten", {"fields": ("antragsdatum", "entscheidungsdatum")}),
|
|
("System", {"fields": ("id",), "classes": ("collapse",)}),
|
|
)
|
|
|
|
def verwendungsnachweis_link(self, obj):
|
|
if obj.verwendungsnachweis:
|
|
return format_html(
|
|
'<a href="{}">{}</a>',
|
|
reverse(
|
|
"admin:stiftung_dokumentlink_change",
|
|
args=[obj.verwendungsnachweis.id],
|
|
),
|
|
obj.verwendungsnachweis.titel,
|
|
)
|
|
return "-"
|
|
|
|
verwendungsnachweis_link.short_description = "Verwendungsnachweis"
|
|
|
|
def total_for_destinataer(self, obj):
|
|
total = (
|
|
Foerderung.objects.filter(destinataer=obj.destinataer).aggregate(
|
|
Sum("betrag")
|
|
)["betrag__sum"]
|
|
or 0
|
|
)
|
|
return f"€{total:,.2f}"
|
|
|
|
total_for_destinataer.short_description = "Gesamt für Destinatär"
|