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( '{}', 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"