Add Vorlagen editor, upload portal, onboarding, and participant import command
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

- Dokument-Vorlagen-Editor: create/edit/reset document templates (admin)
- Upload-Portal: public portal for Nachweis uploads via token
- Onboarding: invite Destinatäre via email with multi-step wizard
- Bestätigungsschreiben: preview and send confirmation letters
- Email settings: SMTP configuration UI
- Management command: import_veranstaltung_teilnehmer for bulk participant import

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
SysAdmin Agent
2026-03-21 09:25:18 +00:00
parent fdf078fa10
commit aed540fe4b
51 changed files with 5335 additions and 33 deletions

View File

@@ -0,0 +1,254 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Bestätigung {{ destinataer.vorname }} {{ destinataer.nachname }}</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.4;
color: #000;
}
/* 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: 8mm;
}
.empfaenger p {
margin: 0;
line-height: 1.3;
}
/* Datum und Ort */
.datum-zeile {
text-align: right;
margin-bottom: 6mm;
}
/* Betreff */
.betreff {
font-weight: bold;
margin-bottom: 6mm;
}
/* Brieftext */
.brieftext p {
margin: 0 0 4mm 0;
text-align: justify;
}
/* Tabelle der Unterstützungen */
.unterstuetzungs-tabelle {
width: 100%;
border-collapse: collapse;
margin: 6mm 0;
font-size: 9.5pt;
}
.unterstuetzungs-tabelle th {
border-bottom: 1.5px solid #000;
padding: 2mm 3mm;
text-align: left;
font-weight: bold;
}
.unterstuetzungs-tabelle td {
border-bottom: 0.5px solid #ccc;
padding: 2mm 3mm;
}
.unterstuetzungs-tabelle tr:last-child td {
border-bottom: 1.5px solid #000;
}
.text-right { text-align: right; }
/* Gesamtsumme */
.summen-zeile td {
font-weight: bold;
padding-top: 3mm;
}
/* Unterschrift */
.unterschrift {
margin-top: 12mm;
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: 6mm;
}
.footer-hinweis {
margin-top: 14mm;
font-size: 8pt;
color: #555;
border-top: 0.5px solid #ccc;
padding-top: 3mm;
}
</style>
</head>
<body>
<!-- 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 (DIN 5008) -->
<div class="empfaenger">
<div class="absender-zeile">van Hees-Theyssen-Vogel'sche Stiftung · Raesfelder Str. 3 · 46499 Hamminkeln</div>
{% if destinataer.anrede %}<p>{{ destinataer.anrede }}</p>{% endif %}
<p>{{ destinataer.vorname }} {{ destinataer.nachname }}</p>
{% if destinataer.strasse %}<p>{{ destinataer.strasse }}</p>{% endif %}
{% if destinataer.plz or destinataer.ort %}<p>{{ destinataer.plz }} {{ destinataer.ort }}</p>{% endif %}
</div>
<!-- Datum -->
<div class="datum-zeile">
Hamminkeln, den {{ datum|date:"j. F Y" }}
</div>
<!-- Betreff -->
<div class="betreff">
Bestätigung über Förderleistungen der van Hees-Theyssen-Vogel'schen Stiftung
</div>
<!-- Brieftext -->
<div class="brieftext">
<p>
Sehr geehrte{% if destinataer.anrede == "Herr" %}r Herr{% elif destinataer.anrede == "Frau" %} Frau{% else %}
{{ destinataer.anrede }}{% endif %} {{ destinataer.nachname }},
</p>
<p>
wir freuen uns, Ihnen hiermit die durch die van Hees-Theyssen-Vogel'sche
Stiftung gewährte finanzielle Unterstützung zu bestätigen.
</p>
{% if betrag_quartal %}
<p>
Die Stiftung hat Ihnen{% if zeitraum %} im Förderzeitraum {{ zeitraum }}{% endif %}
{% if zweck %} für den Zweck „{{ zweck }}"{% endif %}
eine Förderung in Höhe von {{ betrag_quartal|floatformat:2 }} € je Quartal
(jährlich: {{ betrag_jaehrlich|floatformat:2 }} €) zuerkannt und ausgezahlt.
</p>
{% endif %}
<p>
Diese Bestätigung dient Ihnen als offizieller Nachweis der erhaltenen
Förderung gegenüber Behörden, Bildungseinrichtungen oder anderen
zuständigen Stellen.
</p>
<p>
Die van Hees-Theyssen-Vogel'sche Stiftung ist eine gemeinnützige Stiftung
des bürgerlichen Rechts mit Sitz in Hamminkeln und verfolgt ausschließlich
und unmittelbar gemeinnützige Zwecke im Sinne der §§ 51 ff. AO.
Die Förderung erfolgte satzungsgemäß und zweckentsprechend.
</p>
{% if unterstuetzungen %}
<p>Im {% if zeitraum %}Zeitraum {{ zeitraum }}{% else %}zurückliegenden Förderzeitraum{% endif %}
wurden Ihnen folgende Leistungen gewährt:</p>
<table class="unterstuetzungs-tabelle">
<thead>
<tr>
<th>Datum</th>
<th>Beschreibung / Zweck</th>
<th class="text-right">Betrag</th>
<th>Status</th>
</tr>
</thead>
<tbody>
{% for u in unterstuetzungen %}
<tr>
<td>{{ u.faellig_am|date:"d.m.Y" }}</td>
<td>{{ u.beschreibung|default:"Förderleistung" }}</td>
<td class="text-right">{{ u.betrag|floatformat:2 }} €</td>
<td>{{ u.get_status_display }}</td>
</tr>
{% endfor %}
</tbody>
<tfoot>
<tr class="summen-zeile">
<td colspan="2"><strong>Gesamtbetrag</strong></td>
<td class="text-right"><strong>{{ gesamtbetrag|floatformat:2 }} €</strong></td>
<td></td>
</tr>
</tfoot>
</table>
{% endif %}
<p>
Wir wünschen Ihnen weiterhin viel Erfolg bei Ihrem Vorhaben und freuen uns,
Sie durch unsere Stiftung unterstützen zu dürfen.
</p>
<p>Mit freundlichen Grüßen</p>
</div>
<!-- Unterschriften -->
<div class="unterschrift">
<div class="unterschrift-person">
<div class="unterschrift-linie"></div>
Jan Remmer Siebels<br>
Rentmeister<br>
van Hees-Theyssen-Vogel'sche Stiftung
</div>
<div class="unterschrift-person">
<div class="unterschrift-linie"></div>
Katrin Kleinpaß<br>
Rentmeisterin<br>
van Hees-Theyssen-Vogel'sche Stiftung
</div>
</div>
<div class="footer-hinweis">
van Hees-Theyssen-Vogel'sche Stiftung &nbsp;·&nbsp; Raesfelder Str. 3 &nbsp;·&nbsp; 46499 Hamminkeln
&nbsp;·&nbsp; Tel. 02858/836780 &nbsp;·&nbsp; buero@vhtv-stiftung.de<br>
Gemeinnützige Stiftung des bürgerlichen Rechts
</div>
</body>
</html>