Baseline für Vision 2026: Veranstaltungsmodul + ausstehende Änderungen
Alle bestehenden, nicht commiteten Änderungen als Ausgangsbasis für den vision-2026 Branch übernommen (Veranstaltungsmodul, Serienbrief, etc.). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
36
app/templates/stiftung/veranstaltung/delete.html
Normal file
36
app/templates/stiftung/veranstaltung/delete.html
Normal file
@@ -0,0 +1,36 @@
|
||||
{% extends 'base.html' %}
|
||||
|
||||
{% block title %}Veranstaltung löschen – Stiftungsverwaltung{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container-fluid py-4">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-lg-6">
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-header bg-danger text-white">
|
||||
<i class="fas fa-exclamation-triangle me-2"></i>Veranstaltung löschen
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p>Möchten Sie die folgende Veranstaltung wirklich löschen?</p>
|
||||
<div class="alert alert-warning">
|
||||
<strong>{{ veranstaltung.titel }}</strong><br>
|
||||
{{ veranstaltung.datum|date:"d.m.Y" }} – {{ veranstaltung.ort }}<br>
|
||||
<small class="text-muted">{{ veranstaltung.get_teilnehmer_count }} Teilnehmer werden ebenfalls entfernt.</small>
|
||||
</div>
|
||||
<form method="post">
|
||||
{% csrf_token %}
|
||||
<div class="d-flex justify-content-between">
|
||||
<a href="{% url 'stiftung:veranstaltung_detail' veranstaltung.pk %}" class="btn btn-secondary">
|
||||
<i class="fas fa-arrow-left me-2"></i>Abbrechen
|
||||
</a>
|
||||
<button type="submit" class="btn btn-danger">
|
||||
<i class="fas fa-trash me-2"></i>Endgültig löschen
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -20,7 +20,7 @@
|
||||
</p>
|
||||
</div>
|
||||
<div class="d-flex gap-2">
|
||||
<a href="{% url 'admin:stiftung_veranstaltung_change' veranstaltung.pk %}" class="btn btn-outline-secondary">
|
||||
<a href="{% url 'stiftung:veranstaltung_update' veranstaltung.pk %}" class="btn btn-outline-secondary">
|
||||
<i class="fas fa-edit me-1"></i>Bearbeiten
|
||||
</a>
|
||||
<a href="{% url 'stiftung:veranstaltung_serienbrief_pdf' veranstaltung.pk %}" class="btn btn-success">
|
||||
@@ -125,11 +125,15 @@
|
||||
class="btn btn-success w-100">
|
||||
<i class="fas fa-file-pdf me-2"></i>Serienbrief-PDF (alle Teilnehmer)
|
||||
</a>
|
||||
<a href="{% url 'admin:stiftung_veranstaltungsteilnehmer_add' %}?veranstaltung={{ veranstaltung.pk }}"
|
||||
<a href="{% url 'stiftung:veranstaltung_serienbrief_vorschau' veranstaltung.pk %}"
|
||||
class="btn btn-outline-primary w-100" target="_blank">
|
||||
<i class="fas fa-eye me-2"></i>Serienbrief-Vorschau
|
||||
</a>
|
||||
<a href="{% url 'stiftung:teilnehmer_create' veranstaltung.pk %}"
|
||||
class="btn btn-outline-primary w-100">
|
||||
<i class="fas fa-user-plus me-2"></i>Teilnehmer hinzufügen
|
||||
</a>
|
||||
<a href="{% url 'admin:stiftung_veranstaltung_change' veranstaltung.pk %}"
|
||||
<a href="{% url 'stiftung:veranstaltung_update' veranstaltung.pk %}"
|
||||
class="btn btn-outline-secondary w-100">
|
||||
<i class="fas fa-edit me-2"></i>Veranstaltung bearbeiten
|
||||
</a>
|
||||
@@ -142,6 +146,9 @@
|
||||
<div class="card shadow-sm mt-4">
|
||||
<div class="card-header bg-dark text-white d-flex justify-content-between align-items-center">
|
||||
<span><i class="fas fa-users me-2"></i>Teilnehmerliste ({{ teilnehmer.count }})</span>
|
||||
<a href="{% url 'stiftung:teilnehmer_create' veranstaltung.pk %}" class="btn btn-sm btn-outline-light">
|
||||
<i class="fas fa-user-plus me-1"></i>Hinzufügen
|
||||
</a>
|
||||
</div>
|
||||
<div class="card-body p-0">
|
||||
{% if teilnehmer %}
|
||||
@@ -153,6 +160,7 @@
|
||||
<th>E-Mail</th>
|
||||
<th>RSVP</th>
|
||||
<th>Bemerkungen</th>
|
||||
<th>Aktionen</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -179,6 +187,14 @@
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>{{ t.bemerkungen|default:"–" }}</td>
|
||||
<td>
|
||||
<a href="{% url 'stiftung:teilnehmer_update' veranstaltung.pk t.pk %}" class="btn btn-sm btn-outline-secondary me-1" title="Bearbeiten">
|
||||
<i class="fas fa-edit"></i>
|
||||
</a>
|
||||
<a href="{% url 'stiftung:teilnehmer_delete' veranstaltung.pk t.pk %}" class="btn btn-sm btn-outline-danger" title="Entfernen">
|
||||
<i class="fas fa-trash"></i>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
@@ -187,7 +203,7 @@
|
||||
<div class="p-4 text-center text-muted">
|
||||
<i class="fas fa-users fa-2x mb-2"></i>
|
||||
<p>Noch keine Teilnehmer eingetragen.</p>
|
||||
<a href="{% url 'admin:stiftung_veranstaltungsteilnehmer_add' %}?veranstaltung={{ veranstaltung.pk }}"
|
||||
<a href="{% url 'stiftung:teilnehmer_create' veranstaltung.pk %}"
|
||||
class="btn btn-primary">
|
||||
<i class="fas fa-user-plus me-1"></i>Ersten Teilnehmer hinzufügen
|
||||
</a>
|
||||
|
||||
200
app/templates/stiftung/veranstaltung/form.html
Normal file
200
app/templates/stiftung/veranstaltung/form.html
Normal file
@@ -0,0 +1,200 @@
|
||||
{% extends 'base.html' %}
|
||||
{% load static %}
|
||||
|
||||
{% block title %}{{ title }} - Stiftungsverwaltung{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container-fluid py-4">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="d-flex justify-content-between align-items-center mb-4">
|
||||
<h1 class="h3">
|
||||
<i class="fas fa-calendar-alt text-primary me-2"></i>
|
||||
{{ title }}
|
||||
</h1>
|
||||
<a href="{% url 'stiftung:veranstaltung_list' %}" class="btn btn-outline-secondary">
|
||||
<i class="fas fa-arrow-left me-2"></i>Zurück zur Liste
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form method="post" novalidate>
|
||||
{% csrf_token %}
|
||||
|
||||
{% if form.non_field_errors %}
|
||||
<div class="alert alert-danger">
|
||||
<ul class="mb-0">
|
||||
{% for error in form.non_field_errors %}
|
||||
<li>{{ error }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-8">
|
||||
<!-- Grunddaten -->
|
||||
<div class="card shadow-sm mb-4">
|
||||
<div class="card-header bg-dark text-white">
|
||||
<i class="fas fa-info-circle me-2"></i>Grunddaten
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-12 mb-3">
|
||||
<label for="{{ form.titel.id_for_label }}" class="form-label">{{ form.titel.label }} *</label>
|
||||
{{ form.titel }}
|
||||
{% if form.titel.errors %}<div class="invalid-feedback d-block">{{ form.titel.errors.0 }}</div>{% endif %}
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<label for="{{ form.datum.id_for_label }}" class="form-label">{{ form.datum.label }} *</label>
|
||||
{{ form.datum }}
|
||||
{% if form.datum.errors %}<div class="invalid-feedback d-block">{{ form.datum.errors.0 }}</div>{% endif %}
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<label for="{{ form.uhrzeit.id_for_label }}" class="form-label">{{ form.uhrzeit.label }}</label>
|
||||
{{ form.uhrzeit }}
|
||||
{% if form.uhrzeit.errors %}<div class="invalid-feedback d-block">{{ form.uhrzeit.errors.0 }}</div>{% endif %}
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<label for="{{ form.status.id_for_label }}" class="form-label">{{ form.status.label }}</label>
|
||||
{{ form.status }}
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label for="{{ form.ort.id_for_label }}" class="form-label">{{ form.ort.label }} *</label>
|
||||
{{ form.ort }}
|
||||
{% if form.ort.errors %}<div class="invalid-feedback d-block">{{ form.ort.errors.0 }}</div>{% endif %}
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label for="{{ form.budget_pro_person.id_for_label }}" class="form-label">{{ form.budget_pro_person.label }}</label>
|
||||
{{ form.budget_pro_person }}
|
||||
</div>
|
||||
<div class="col-12 mb-3">
|
||||
<label for="{{ form.adresse.id_for_label }}" class="form-label">{{ form.adresse.label }}</label>
|
||||
{{ form.adresse }}
|
||||
</div>
|
||||
<div class="col-12 mb-3">
|
||||
<label for="{{ form.beschreibung.id_for_label }}" class="form-label">{{ form.beschreibung.label }}</label>
|
||||
{{ form.beschreibung }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Serienbrief-Vorlage -->
|
||||
<div class="card shadow-sm mb-4">
|
||||
<div class="card-header bg-dark text-white">
|
||||
<i class="fas fa-envelope-open-text me-2"></i>Serienbrief – Vorlage
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="col-12 mb-3">
|
||||
<label for="{{ form.betreff.id_for_label }}" class="form-label">{{ form.betreff.label }}</label>
|
||||
{{ form.betreff }}
|
||||
<div class="form-text">{{ form.betreff.help_text }}</div>
|
||||
</div>
|
||||
<div class="col-12 mb-3">
|
||||
<label for="{{ form.briefvorlage.id_for_label }}" class="form-label">{{ form.briefvorlage.label }}</label>
|
||||
{{ form.briefvorlage }}
|
||||
{% if form.briefvorlage.errors %}<div class="invalid-feedback d-block">{{ form.briefvorlage.errors.0 }}</div>{% endif %}
|
||||
<div class="form-text">{{ form.briefvorlage.help_text }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Unterschriften -->
|
||||
<div class="card shadow-sm mb-4">
|
||||
<div class="card-header bg-dark text-white">
|
||||
<i class="fas fa-signature me-2"></i>Serienbrief – Unterschriften
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-3">
|
||||
<label for="{{ form.unterschrift_1_name.id_for_label }}" class="form-label">{{ form.unterschrift_1_name.label }}</label>
|
||||
{{ form.unterschrift_1_name }}
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label for="{{ form.unterschrift_1_titel.id_for_label }}" class="form-label">{{ form.unterschrift_1_titel.label }}</label>
|
||||
{{ form.unterschrift_1_titel }}
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label for="{{ form.unterschrift_2_name.id_for_label }}" class="form-label">{{ form.unterschrift_2_name.label }}</label>
|
||||
{{ form.unterschrift_2_name }}
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label for="{{ form.unterschrift_2_titel.id_for_label }}" class="form-label">{{ form.unterschrift_2_titel.label }}</label>
|
||||
{{ form.unterschrift_2_titel }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Sidebar -->
|
||||
<div class="col-lg-4">
|
||||
<div class="card shadow-sm mb-4">
|
||||
<div class="card-header bg-dark text-white">
|
||||
<i class="fas fa-question-circle me-2"></i>Platzhalter-Hilfe
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p class="small text-muted mb-2">Verfügbare Platzhalter für die Briefvorlage:</p>
|
||||
<table class="table table-sm small">
|
||||
<tbody>
|
||||
<tr><td class="font-monospace text-danger">{{ anrede }}</td><td>Herr / Frau</td></tr>
|
||||
<tr><td class="font-monospace text-danger">{{ vorname }}</td><td>Vorname</td></tr>
|
||||
<tr><td class="font-monospace text-danger">{{ nachname }}</td><td>Nachname</td></tr>
|
||||
<tr><td class="font-monospace text-danger">{{ strasse }}</td><td>Straße + Nr.</td></tr>
|
||||
<tr><td class="font-monospace text-danger">{{ plz }}</td><td>PLZ</td></tr>
|
||||
<tr><td class="font-monospace text-danger">{{ ort }}</td><td>Wohnort</td></tr>
|
||||
<tr><td class="font-monospace text-danger">{{ datum }}</td><td>Veranstaltungsdatum</td></tr>
|
||||
<tr><td class="font-monospace text-danger">{{ uhrzeit }}</td><td>Uhrzeit</td></tr>
|
||||
<tr><td class="font-monospace text-danger">{{ veranstaltungsort }}</td><td>Gasthaus / Ort</td></tr>
|
||||
<tr><td class="font-monospace text-danger">{{ gasthaus_adresse }}</td><td>Adresse Gasthaus</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p class="small text-muted mb-0">Platzhalter werden beim PDF-Export automatisch befüllt.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if veranstaltung %}
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-header bg-dark text-white">
|
||||
<i class="fas fa-tools me-2"></i>Aktionen
|
||||
</div>
|
||||
<div class="card-body d-flex flex-column gap-2">
|
||||
<a href="{% url 'stiftung:veranstaltung_serienbrief_vorschau' veranstaltung.pk %}"
|
||||
class="btn btn-outline-primary w-100" target="_blank">
|
||||
<i class="fas fa-eye me-2"></i>Serienbrief-Vorschau
|
||||
</a>
|
||||
<a href="{% url 'stiftung:veranstaltung_serienbrief_pdf' veranstaltung.pk %}"
|
||||
class="btn btn-outline-success w-100">
|
||||
<i class="fas fa-file-pdf me-2"></i>Serienbrief-PDF
|
||||
</a>
|
||||
<hr>
|
||||
<a href="{% url 'stiftung:veranstaltung_delete' veranstaltung.pk %}"
|
||||
class="btn btn-outline-danger w-100">
|
||||
<i class="fas fa-trash me-2"></i>Veranstaltung löschen
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Submit -->
|
||||
<div class="row mt-3">
|
||||
<div class="col-lg-8">
|
||||
<hr>
|
||||
<div class="d-flex justify-content-between">
|
||||
<a href="{% url 'stiftung:veranstaltung_list' %}" class="btn btn-secondary">
|
||||
<i class="fas fa-times me-2"></i>Abbrechen
|
||||
</a>
|
||||
<button type="submit" class="btn btn-success">
|
||||
<i class="fas fa-save me-2"></i>
|
||||
{% if veranstaltung %}Aktualisieren{% else %}Erstellen{% endif %}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -8,7 +8,7 @@
|
||||
<h1 class="h3 mb-0">
|
||||
<i class="fas fa-calendar-alt me-2"></i>Veranstaltungen
|
||||
</h1>
|
||||
<a href="{% url 'admin:stiftung_veranstaltung_add' %}" class="btn btn-primary">
|
||||
<a href="{% url 'stiftung:veranstaltung_create' %}" class="btn btn-primary">
|
||||
<i class="fas fa-plus me-1"></i>Neue Veranstaltung
|
||||
</a>
|
||||
</div>
|
||||
@@ -68,7 +68,7 @@
|
||||
{% else %}
|
||||
<div class="alert alert-info">
|
||||
<i class="fas fa-info-circle me-2"></i>Noch keine Veranstaltungen angelegt.
|
||||
<a href="{% url 'admin:stiftung_veranstaltung_add' %}">Jetzt erste Veranstaltung erstellen.</a>
|
||||
<a href="{% url 'stiftung:veranstaltung_create' %}">Jetzt erste Veranstaltung erstellen.</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
134
app/templates/stiftung/veranstaltung/serienbrief_vorschau.html
Normal file
134
app/templates/stiftung/veranstaltung/serienbrief_vorschau.html
Normal file
@@ -0,0 +1,134 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}Serienbrief-Vorschau – {{ veranstaltung.titel }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container-fluid mt-3">
|
||||
|
||||
<div class="d-flex justify-content-between align-items-center mb-3">
|
||||
<h2>
|
||||
Serienbrief-Vorschau
|
||||
<small class="text-muted fs-6">{{ veranstaltung.titel }} ({{ veranstaltung.datum|date:"j. F Y" }})</small>
|
||||
</h2>
|
||||
<div class="d-flex gap-2">
|
||||
<a href="{% url 'stiftung:veranstaltung_serienbrief_pdf' veranstaltung.pk %}"
|
||||
class="btn btn-primary">
|
||||
PDF generieren
|
||||
</a>
|
||||
<a href="{% url 'stiftung:veranstaltung_detail' veranstaltung.pk %}"
|
||||
class="btn btn-outline-secondary">
|
||||
Zurück zur Veranstaltung
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if not teilnehmer %}
|
||||
<div class="alert alert-warning">
|
||||
Diese Veranstaltung hat noch keine Teilnehmer. Bitte zuerst Teilnehmer anlegen.
|
||||
</div>
|
||||
{% else %}
|
||||
|
||||
<div class="alert alert-info d-flex align-items-start gap-2 mb-3">
|
||||
<span>ℹ️</span>
|
||||
<div>
|
||||
<strong>{{ teilnehmer.count }} Brief{% if teilnehmer.count != 1 %}e{% endif %}</strong> werden generiert.
|
||||
Die Vorschau zeigt jeden Brief auf einer separaten Seite.
|
||||
Platzhalter wie <code>{% verbatim %}{{ vorname }}{% endverbatim %}</code> sind hier bereits durch Beispieldaten ersetzt.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Navigation zwischen Briefen -->
|
||||
<div class="mb-3 d-flex gap-2 align-items-center flex-wrap">
|
||||
<strong>Empfänger:</strong>
|
||||
{% for t in teilnehmer %}
|
||||
<a href="#brief-{{ forloop.counter }}"
|
||||
class="btn btn-sm btn-outline-secondary">
|
||||
{{ t.nachname }}, {{ t.vorname }}
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<!-- Einzelne Briefe -->
|
||||
{% for t in teilnehmer %}
|
||||
<div id="brief-{{ forloop.counter }}"
|
||||
style="max-width:210mm;margin:0 auto 40px;padding:20mm 25mm;border:1px solid #dee2e6;background:#fff;box-shadow:0 2px 8px rgba(0,0,0,.1);font-family:'Times New Roman',Times,serif;font-size:11pt;line-height:1.4;">
|
||||
|
||||
<!-- Stiftungskopf -->
|
||||
<div style="font-size:12pt;font-weight:bold;margin-bottom:2mm;">van Hees-Theyssen-Vogel'sche Stiftung</div>
|
||||
<div style="font-size:8.5pt;color:#444;margin-bottom:5mm;">
|
||||
Raesfelder Str. 3 · 46499 Hamminkeln
|
||||
</div>
|
||||
|
||||
<!-- Empfänger -->
|
||||
<div style="min-height:35mm;margin-bottom:5mm;">
|
||||
<div style="font-size:7.5pt;border-bottom:1px solid #000;margin-bottom:3pt;padding-bottom:1pt;color:#444;">
|
||||
van Hees-Theyssen-Vogel'sche Stiftung · Raesfelder Str. 3 · 46499 Hamminkeln
|
||||
</div>
|
||||
<p style="margin:0;line-height:1.3;">{{ t.anrede }} {{ t.vorname }} {{ t.nachname }}</p>
|
||||
{% if t.strasse %}<p style="margin:0;line-height:1.3;">{{ t.strasse }}</p>{% endif %}
|
||||
{% if t.plz or t.ort %}<p style="margin:0;line-height:1.3;">{{ t.plz }} {{ t.ort }}</p>{% endif %}
|
||||
</div>
|
||||
|
||||
<!-- Datum -->
|
||||
<div style="text-align:right;margin-bottom:4mm;">
|
||||
Hamminkeln, den {{ veranstaltung.datum|date:"j. F Y" }}
|
||||
</div>
|
||||
|
||||
<!-- Betreff -->
|
||||
<div style="font-weight:bold;margin-bottom:4mm;">
|
||||
{% if veranstaltung.betreff %}{{ veranstaltung.betreff }}{% else %}Einladung zum {{ veranstaltung.titel }}{% endif %}
|
||||
</div>
|
||||
|
||||
<!-- Anrede -->
|
||||
<div style="margin-bottom:3mm;">
|
||||
Sehr geehrte{% if t.anrede == "Herr" %}r Herr{% elif t.anrede == "Frau" %} Frau{% else %}
|
||||
{{ t.anrede }}{% endif %} {{ t.nachname }},
|
||||
</div>
|
||||
|
||||
<!-- Brieftext -->
|
||||
<div class="brieftext">
|
||||
{% 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 style="margin:4mm 0 4mm 10mm;font-weight:bold;">
|
||||
{{ 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>Bitte teilen Sie uns Ihre Teilnahme bis zum <strong>4. April 2026</strong> mit.</p>
|
||||
<p>Wir freuen uns auf Ihr Kommen.</p>
|
||||
{% endif %}
|
||||
<p>Mit freundlichen Grüßen</p>
|
||||
</div>
|
||||
|
||||
<!-- Unterschriften -->
|
||||
<div style="margin-top:10mm;">
|
||||
<div style="display:inline-block;width:45%;vertical-align:top;">
|
||||
{% if veranstaltung.unterschrift_1_name %}
|
||||
<div style="border-top:1px solid #000;margin-bottom:2mm;width:80%;"></div>
|
||||
{{ veranstaltung.unterschrift_1_name }}<br>
|
||||
{{ veranstaltung.unterschrift_1_titel }}<br>
|
||||
van Hees-Theyssen-Vogel'sche Stiftung
|
||||
{% endif %}
|
||||
</div>
|
||||
<div style="display:inline-block;width:45%;vertical-align:top;">
|
||||
{% if veranstaltung.unterschrift_2_name %}
|
||||
<div style="border-top:1px solid #000;margin-bottom:2mm;width:80%;"></div>
|
||||
{{ veranstaltung.unterschrift_2_name }}<br>
|
||||
{{ veranstaltung.unterschrift_2_titel }}<br>
|
||||
van Hees-Theyssen-Vogel'sche Stiftung
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="text-align:right;margin-top:12mm;font-size:9pt;color:#999;">
|
||||
Brief {{ forloop.counter }} von {{ teilnehmer.count }}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
35
app/templates/stiftung/veranstaltung/teilnehmer_delete.html
Normal file
35
app/templates/stiftung/veranstaltung/teilnehmer_delete.html
Normal file
@@ -0,0 +1,35 @@
|
||||
{% extends 'base.html' %}
|
||||
|
||||
{% block title %}Teilnehmer entfernen – Stiftungsverwaltung{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container-fluid py-4">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-lg-6">
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-header bg-danger text-white">
|
||||
<i class="fas fa-exclamation-triangle me-2"></i>Teilnehmer entfernen
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p>Möchten Sie den folgenden Teilnehmer wirklich aus der Veranstaltung entfernen?</p>
|
||||
<div class="alert alert-warning">
|
||||
<strong>{{ teilnehmer.anrede }} {{ teilnehmer.vorname }} {{ teilnehmer.nachname }}</strong><br>
|
||||
<small class="text-muted">Veranstaltung: {{ veranstaltung.titel }}</small>
|
||||
</div>
|
||||
<form method="post">
|
||||
{% csrf_token %}
|
||||
<div class="d-flex justify-content-between">
|
||||
<a href="{% url 'stiftung:veranstaltung_detail' veranstaltung.pk %}" class="btn btn-secondary">
|
||||
<i class="fas fa-arrow-left me-2"></i>Abbrechen
|
||||
</a>
|
||||
<button type="submit" class="btn btn-danger">
|
||||
<i class="fas fa-trash me-2"></i>Entfernen
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
119
app/templates/stiftung/veranstaltung/teilnehmer_form.html
Normal file
119
app/templates/stiftung/veranstaltung/teilnehmer_form.html
Normal file
@@ -0,0 +1,119 @@
|
||||
{% extends 'base.html' %}
|
||||
|
||||
{% block title %}{{ title }} – Stiftungsverwaltung{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container-fluid py-4">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<nav aria-label="breadcrumb">
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="{% url 'stiftung:veranstaltung_list' %}">Veranstaltungen</a></li>
|
||||
<li class="breadcrumb-item"><a href="{% url 'stiftung:veranstaltung_detail' veranstaltung.pk %}">{{ veranstaltung.titel }}</a></li>
|
||||
<li class="breadcrumb-item active">{{ title }}</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<h1 class="h3 mb-4">
|
||||
<i class="fas fa-user-plus text-primary me-2"></i>{{ title }}
|
||||
</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-8">
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-header bg-dark text-white">
|
||||
<i class="fas fa-user me-2"></i>Teilnehmerdaten
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<form method="post" novalidate>
|
||||
{% csrf_token %}
|
||||
|
||||
{% if form.non_field_errors %}
|
||||
<div class="alert alert-danger">
|
||||
<ul class="mb-0">
|
||||
{% for error in form.non_field_errors %}
|
||||
<li>{{ error }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4 mb-3">
|
||||
<label for="{{ form.anrede.id_for_label }}" class="form-label">{{ form.anrede.label }}</label>
|
||||
{{ form.anrede }}
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<label for="{{ form.vorname.id_for_label }}" class="form-label">{{ form.vorname.label }} *</label>
|
||||
{{ form.vorname }}
|
||||
{% if form.vorname.errors %}<div class="invalid-feedback d-block">{{ form.vorname.errors.0 }}</div>{% endif %}
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<label for="{{ form.nachname.id_for_label }}" class="form-label">{{ form.nachname.label }} *</label>
|
||||
{{ form.nachname }}
|
||||
{% if form.nachname.errors %}<div class="invalid-feedback d-block">{{ form.nachname.errors.0 }}</div>{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-3">
|
||||
<label for="{{ form.strasse.id_for_label }}" class="form-label">{{ form.strasse.label }}</label>
|
||||
{{ form.strasse }}
|
||||
</div>
|
||||
<div class="col-md-2 mb-3">
|
||||
<label for="{{ form.plz.id_for_label }}" class="form-label">{{ form.plz.label }}</label>
|
||||
{{ form.plz }}
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<label for="{{ form.ort.id_for_label }}" class="form-label">{{ form.ort.label }}</label>
|
||||
{{ form.ort }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-3">
|
||||
<label for="{{ form.email.id_for_label }}" class="form-label">{{ form.email.label }}</label>
|
||||
{{ form.email }}
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label for="{{ form.rsvp_status.id_for_label }}" class="form-label">{{ form.rsvp_status.label }}</label>
|
||||
{{ form.rsvp_status }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-3">
|
||||
<label for="{{ form.paechter.id_for_label }}" class="form-label">{{ form.paechter.label }}</label>
|
||||
{{ form.paechter }}
|
||||
<div class="form-text">Optional: Verknüpfung mit bestehendem Pächter</div>
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label for="{{ form.destinataer.id_for_label }}" class="form-label">{{ form.destinataer.label }}</label>
|
||||
{{ form.destinataer }}
|
||||
<div class="form-text">Optional: Verknüpfung mit bestehendem Destinatär</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="{{ form.bemerkungen.id_for_label }}" class="form-label">{{ form.bemerkungen.label }}</label>
|
||||
{{ form.bemerkungen }}
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
<div class="d-flex justify-content-between">
|
||||
<a href="{% url 'stiftung:veranstaltung_detail' veranstaltung.pk %}" class="btn btn-secondary">
|
||||
<i class="fas fa-times me-2"></i>Abbrechen
|
||||
</a>
|
||||
<button type="submit" class="btn btn-success">
|
||||
<i class="fas fa-save me-2"></i>
|
||||
{% if teilnehmer %}Aktualisieren{% else %}Hinzufügen{% endif %}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user