Implementierung des Veranstaltungsmoduls inkl. Serienbrief-PDF-Generator mit dynamischen, editierbaren Feldern für Betreff und Unterschriften. ### Veranstaltungsmodul (STI-35) - Neues Veranstaltungs-Modell: Titel, Datum, Uhrzeit, Ort, Gasthaus-Adresse, Briefvorlage, Gästeliste (VerstaltungsGast mit freien/Destinatär-Feldern) - Views: Veranstaltungsliste, -detail, Serienbrief-PDF-Generator - Templates: list.html, detail.html, serienbrief_pdf.html (A4, einseitig) - API: Serializer + Endpunkte für Veranstaltungen - Admin: Inline-Bearbeitung der Gästeliste - Migration: 0044_veranstaltungsmodul ### Serienbrief editierbare Felder + PDF-Fix (STI-39) - Neue Felder an Veranstaltung: betreff, unterschrift_1_name/titel, unterschrift_2_name/titel (mit Defaults: Katrin Kleinpaß / Jan Remmer Siebels) - PDF-CSS: Margins, Font-Sizes und Line-Heights reduziert für einseitigen Druck - Migration: 0045_add_serienbrief_editable_fields ### Infrastruktur - scripts/init-paperless-db.sh: Erstellt separate Paperless-DB beim DB-Init - compose.yml: init-paperless-db.sh eingebunden, PAPERLESS_DBNAME-Fix - .gitignore: .claude/ ausgeschlossen Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
111 lines
2.8 KiB
Python
111 lines
2.8 KiB
Python
from rest_framework import serializers
|
|
|
|
from .models import (
|
|
BankTransaction,
|
|
Destinataer,
|
|
DestinataerUnterstuetzung,
|
|
Foerderung,
|
|
Land,
|
|
LandVerpachtung,
|
|
Paechter,
|
|
StiftungsKalenderEintrag,
|
|
StiftungsKonto,
|
|
Veranstaltung,
|
|
Veranstaltungsteilnehmer,
|
|
Verwaltungskosten,
|
|
)
|
|
|
|
|
|
class DestinataerUnterstuetzungSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = DestinataerUnterstuetzung
|
|
fields = "__all__"
|
|
|
|
|
|
class DestinataerSerializer(serializers.ModelSerializer):
|
|
unterstuetzungen = DestinataerUnterstuetzungSerializer(many=True, read_only=True)
|
|
|
|
class Meta:
|
|
model = Destinataer
|
|
fields = "__all__"
|
|
|
|
|
|
class LandVerpachtungSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = LandVerpachtung
|
|
fields = "__all__"
|
|
|
|
|
|
class LandSerializer(serializers.ModelSerializer):
|
|
aktive_verpachtungen = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = Land
|
|
fields = "__all__"
|
|
|
|
def get_aktive_verpachtungen(self, obj):
|
|
qs = obj.neue_verpachtungen.filter(status="aktiv")
|
|
return LandVerpachtungSerializer(qs, many=True).data
|
|
|
|
|
|
class PaechterSerializer(serializers.ModelSerializer):
|
|
aktive_verpachtungen = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = Paechter
|
|
fields = "__all__"
|
|
|
|
def get_aktive_verpachtungen(self, obj):
|
|
qs = obj.neue_verpachtungen.filter(status="aktiv")
|
|
return LandVerpachtungSerializer(qs, many=True).data
|
|
|
|
|
|
class FoerderungSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Foerderung
|
|
fields = "__all__"
|
|
|
|
|
|
class StiftungsKontoSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = StiftungsKonto
|
|
fields = "__all__"
|
|
|
|
|
|
class VerwaltungskostenSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Verwaltungskosten
|
|
fields = "__all__"
|
|
|
|
|
|
class StiftungsKalenderEintragSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = StiftungsKalenderEintrag
|
|
fields = "__all__"
|
|
|
|
|
|
class BankTransactionSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = BankTransaction
|
|
fields = "__all__"
|
|
|
|
|
|
class VeranstaltungsteilnehmerSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Veranstaltungsteilnehmer
|
|
fields = "__all__"
|
|
|
|
|
|
class VeranstaltungSerializer(serializers.ModelSerializer):
|
|
teilnehmer = VeranstaltungsteilnehmerSerializer(many=True, read_only=True)
|
|
teilnehmer_count = serializers.IntegerField(
|
|
source="get_teilnehmer_count", read_only=True
|
|
)
|
|
zugesagte_count = serializers.IntegerField(
|
|
source="get_zugesagte_count", read_only=True
|
|
)
|
|
|
|
class Meta:
|
|
model = Veranstaltung
|
|
fields = "__all__"
|