Files
stiftung-management-system/app/templates/stiftung/veranstaltung/serienbrief_pdf.html
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

198 lines
5.4 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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 &nbsp;·&nbsp; 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>