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>
This commit is contained in:
197
app/templates/stiftung/veranstaltung/serienbrief_pdf.html
Normal file
197
app/templates/stiftung/veranstaltung/serienbrief_pdf.html
Normal file
@@ -0,0 +1,197 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Einladungen – {{ veranstaltung.titel }}</title>
|
||||
<style>
|
||||
@page {
|
||||
size: A4;
|
||||
margin: 2cm 2.5cm 2cm 2.5cm;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: "Times New Roman", Times, serif;
|
||||
font-size: 10pt;
|
||||
line-height: 1.35;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.letter {
|
||||
page-break-after: always;
|
||||
}
|
||||
|
||||
.letter:last-child {
|
||||
page-break-after: avoid;
|
||||
}
|
||||
|
||||
/* Absenderzeile (klein, über Adressfeld) */
|
||||
.absender-zeile {
|
||||
font-size: 7.5pt;
|
||||
border-bottom: 1px solid #000;
|
||||
margin-bottom: 3pt;
|
||||
padding-bottom: 1pt;
|
||||
color: #444;
|
||||
}
|
||||
|
||||
/* Empfängeradresse */
|
||||
.empfaenger {
|
||||
min-height: 35mm;
|
||||
margin-bottom: 5mm;
|
||||
}
|
||||
|
||||
.empfaenger p {
|
||||
margin: 0;
|
||||
line-height: 1.3;
|
||||
}
|
||||
|
||||
/* Datum und Ort */
|
||||
.datum-zeile {
|
||||
text-align: right;
|
||||
margin-bottom: 4mm;
|
||||
}
|
||||
|
||||
/* Betreff */
|
||||
.betreff {
|
||||
font-weight: bold;
|
||||
margin-bottom: 4mm;
|
||||
}
|
||||
|
||||
/* Brieftext */
|
||||
.brieftext p {
|
||||
margin: 0 0 3mm 0;
|
||||
}
|
||||
|
||||
/* Veranstaltungsblock (eingerückt) */
|
||||
.veranstaltungs-block {
|
||||
margin: 4mm 0 4mm 10mm;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Unterschrift */
|
||||
.unterschrift {
|
||||
margin-top: 10mm;
|
||||
display: table;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.unterschrift-person {
|
||||
display: inline-block;
|
||||
width: 45%;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.unterschrift-linie {
|
||||
border-top: 1px solid #000;
|
||||
margin-bottom: 2mm;
|
||||
width: 80%;
|
||||
}
|
||||
|
||||
.stiftungsname-header {
|
||||
font-size: 12pt;
|
||||
font-weight: bold;
|
||||
margin-bottom: 1mm;
|
||||
}
|
||||
|
||||
.stiftungsadresse {
|
||||
font-size: 8.5pt;
|
||||
color: #444;
|
||||
margin-bottom: 5mm;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
{% for t in teilnehmer %}
|
||||
<div class="letter">
|
||||
|
||||
<!-- Stiftungskopf -->
|
||||
<div class="stiftungsname-header">van Hees-Theyssen-Vogel'sche Stiftung</div>
|
||||
<div class="stiftungsadresse">
|
||||
Raesfelder Str. 3 · 46499 Hamminkeln
|
||||
</div>
|
||||
|
||||
<!-- Empfänger -->
|
||||
<div class="empfaenger">
|
||||
<div class="absender-zeile">van Hees-Theyssen-Vogel'sche Stiftung · Raesfelder Str. 3 · 46499 Hamminkeln</div>
|
||||
<p>{{ t.anrede }} {{ t.vorname }} {{ t.nachname }}</p>
|
||||
{% if t.strasse %}<p>{{ t.strasse }}</p>{% endif %}
|
||||
{% if t.plz or t.ort %}<p>{{ t.plz }} {{ t.ort }}</p>{% endif %}
|
||||
</div>
|
||||
|
||||
<!-- Datum -->
|
||||
<div class="datum-zeile">
|
||||
Hamminkeln, den {{ veranstaltung.datum|date:"j. F Y" }}
|
||||
</div>
|
||||
|
||||
<!-- Betreff -->
|
||||
<div class="betreff">
|
||||
{% if veranstaltung.betreff %}{{ veranstaltung.betreff }}{% else %}Einladung zum {{ veranstaltung.titel }}{% endif %}
|
||||
</div>
|
||||
|
||||
<!-- Anrede -->
|
||||
<div class="brieftext">
|
||||
<p>
|
||||
Sehr geehrte{% if t.anrede == "Herr" %}r Herr{% elif t.anrede == "Frau" %} Frau{% else %}
|
||||
{{ t.anrede }}{% endif %} {{ t.nachname }},
|
||||
</p>
|
||||
|
||||
<!-- Entweder freie Briefvorlage oder Standardtext -->
|
||||
{% if veranstaltung.briefvorlage %}
|
||||
{{ veranstaltung.briefvorlage|safe }}
|
||||
{% else %}
|
||||
<p>
|
||||
wir laden Sie herzlich ein, an der jährlichen Vorstellung der Rechnungslegung
|
||||
der van Hees-Theyssen-Vogel'schen Stiftung teilzunehmen.
|
||||
</p>
|
||||
|
||||
<p>Die Veranstaltung findet statt am:</p>
|
||||
|
||||
<div class="veranstaltungs-block">
|
||||
{{ veranstaltung.datum|date:"l, j. F Y" }}{% if veranstaltung.uhrzeit %}, {{ veranstaltung.uhrzeit|time:"H:i" }} Uhr{% endif %}<br>
|
||||
{{ veranstaltung.ort }}<br>
|
||||
{% if veranstaltung.adresse %}{{ veranstaltung.adresse }}{% endif %}
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Am Abend werden wir Ihnen einen Überblick über das abgelaufene Wirtschaftsjahr 2025
|
||||
der Stiftung geben und gemeinsam das Abendessen genießen. Es bietet sich die
|
||||
Gelegenheit zum persönlichen Austausch.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Bitte teilen Sie uns bis zum <strong>4. April 2026</strong> mit, ob Sie an der
|
||||
Veranstaltung teilnehmen werden. Eine Rückmeldung per Post an die oben genannte
|
||||
Adresse ist erbeten.
|
||||
</p>
|
||||
|
||||
<p>Wir freuen uns auf Ihr Kommen.</p>
|
||||
{% endif %}
|
||||
|
||||
<p>Mit freundlichen Grüßen</p>
|
||||
</div>
|
||||
|
||||
<!-- Unterschriften -->
|
||||
<div class="unterschrift">
|
||||
{% if veranstaltung.unterschrift_1_name %}
|
||||
<div class="unterschrift-person">
|
||||
<div class="unterschrift-linie"></div>
|
||||
{{ veranstaltung.unterschrift_1_name }}<br>
|
||||
{{ veranstaltung.unterschrift_1_titel }}<br>
|
||||
van Hees-Theyssen-Vogel'sche Stiftung
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if veranstaltung.unterschrift_2_name %}
|
||||
<div class="unterschrift-person">
|
||||
<div class="unterschrift-linie"></div>
|
||||
{{ veranstaltung.unterschrift_2_name }}<br>
|
||||
{{ veranstaltung.unterschrift_2_titel }}<br>
|
||||
van Hees-Theyssen-Vogel'sche Stiftung
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user