Files
stiftung-management-system/app/stiftung/api_serializers.py
SysAdmin Agent 28621d2774
Some checks failed
CI/CD Pipeline / test (push) Has been cancelled
CI/CD Pipeline / deploy (push) Has been cancelled
Code Quality / quality (push) Has been cancelled
feat: Veranstaltungsmodul + Serienbrief mit editierbaren Feldern (STI-35, STI-39)
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>
2026-03-10 22:36:58 +00:00

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__"