-
-
+
+
+
-
diff --git a/app/templates/stiftung/veranstaltung/detail.html b/app/templates/stiftung/veranstaltung/detail.html
new file mode 100644
index 0000000..911aac9
--- /dev/null
+++ b/app/templates/stiftung/veranstaltung/detail.html
@@ -0,0 +1,199 @@
+{% extends "base.html" %}
+
+{% block title %}{{ veranstaltung.titel }} – Stiftungsverwaltung{% endblock %}
+
+{% block content %}
+
+
+
+
+
+
+ Veranstaltungen
+ {{ veranstaltung.titel }}
+
+
+
{{ veranstaltung.titel }}
+
+ {{ veranstaltung.datum|date:"l, d. F Y" }}{% if veranstaltung.uhrzeit %}, {{ veranstaltung.uhrzeit|time:"H:i" }} Uhr{% endif %}
+ · {{ veranstaltung.ort }}
+
+
+
+
+
+
+
+
+
+
+
+
+ Status
+
+ {% if veranstaltung.status == "geplant" %}
+ Geplant
+ {% elif veranstaltung.status == "einladungen_versendet" %}
+ Einladungen versendet
+ {% elif veranstaltung.status == "abgeschlossen" %}
+ Abgeschlossen
+ {% elif veranstaltung.status == "abgesagt" %}
+ Abgesagt
+ {% endif %}
+
+ Gasthaus
+ {{ veranstaltung.ort }}
+ {% if veranstaltung.adresse %}
+ Adresse
+ {{ veranstaltung.adresse }}
+ {% endif %}
+ {% if veranstaltung.budget_pro_person %}
+ Budget/Person
+ {{ veranstaltung.budget_pro_person }} €
+ {% endif %}
+ {% if veranstaltung.beschreibung %}
+ Beschreibung
+ {{ veranstaltung.beschreibung }}
+ {% endif %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ teilnehmer.count }}
+
Eingeladen gesamt
+
+
+
+
+
{{ zugesagte.count }}
+
Zugesagt
+
+
+
+
+
{{ abgesagte.count }}
+
Abgesagt
+
+
+
+
+
{{ keine_rueckmeldung.count }}
+
Keine Rückmeldung
+
+
+ {% if eingeladen.count %}
+
+
+
{{ eingeladen.count }}
+
Nur eingeladen (noch kein RSVP)
+
+
+ {% endif %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% if teilnehmer %}
+
+
+
+ Name
+ Adresse
+ E-Mail
+ RSVP
+ Bemerkungen
+
+
+
+ {% for t in teilnehmer %}
+
+
+ {{ t.anrede }} {{ t.vorname }} {{ t.nachname }}
+
+
+ {% if t.strasse %}{{ t.strasse }},{% endif %}
+ {% if t.plz %}{{ t.plz }}{% endif %}
+ {% if t.ort %}{{ t.ort }}{% endif %}
+
+ {% if t.email %}{{ t.email }} {% else %}–{% endif %}
+
+ {% if t.rsvp_status == "eingeladen" %}
+ Eingeladen
+ {% elif t.rsvp_status == "zugesagt" %}
+ Zugesagt
+ {% elif t.rsvp_status == "abgesagt" %}
+ Abgesagt
+ {% elif t.rsvp_status == "keine_rueckmeldung" %}
+ Keine Rückmeldung
+ {% endif %}
+
+ {{ t.bemerkungen|default:"–" }}
+
+ {% endfor %}
+
+
+ {% else %}
+
+
+
Noch keine Teilnehmer eingetragen.
+
+ Ersten Teilnehmer hinzufügen
+
+
+ {% endif %}
+
+
+
+{% endblock %}
diff --git a/app/templates/stiftung/veranstaltung/list.html b/app/templates/stiftung/veranstaltung/list.html
new file mode 100644
index 0000000..6c24fee
--- /dev/null
+++ b/app/templates/stiftung/veranstaltung/list.html
@@ -0,0 +1,75 @@
+{% extends "base.html" %}
+
+{% block title %}Veranstaltungen – Stiftungsverwaltung{% endblock %}
+
+{% block content %}
+
+
+
+ Veranstaltungen
+
+
+ Neue Veranstaltung
+
+
+
+ {% if veranstaltungen %}
+
+
+
+
+
+ Titel
+ Datum
+ Ort / Gasthaus
+ Status
+ Teilnehmer
+ Zugesagt
+ Aktionen
+
+
+
+ {% for v in veranstaltungen %}
+
+
+
+ {{ v.titel }}
+
+
+ {{ v.datum|date:"d.m.Y" }}{% if v.uhrzeit %}, {{ v.uhrzeit|time:"H:i" }} Uhr{% endif %}
+ {{ v.ort }}
+
+ {% if v.status == "geplant" %}
+ Geplant
+ {% elif v.status == "einladungen_versendet" %}
+ Einladungen versendet
+ {% elif v.status == "abgeschlossen" %}
+ Abgeschlossen
+ {% elif v.status == "abgesagt" %}
+ Abgesagt
+ {% endif %}
+
+ {{ v.get_teilnehmer_count }}
+ {{ v.get_zugesagte_count }}
+
+
+
+
+
+ Serienbrief
+
+
+
+ {% endfor %}
+
+
+
+
+ {% else %}
+
+ {% endif %}
+
+{% endblock %}
diff --git a/app/templates/stiftung/veranstaltung/serienbrief_pdf.html b/app/templates/stiftung/veranstaltung/serienbrief_pdf.html
new file mode 100644
index 0000000..2239146
--- /dev/null
+++ b/app/templates/stiftung/veranstaltung/serienbrief_pdf.html
@@ -0,0 +1,197 @@
+
+
+
+
+
Einladungen – {{ veranstaltung.titel }}
+
+
+
+
+{% for t in teilnehmer %}
+
+
+
+
+
+ Raesfelder Str. 3 · 46499 Hamminkeln
+
+
+
+
+
van Hees-Theyssen-Vogel'sche Stiftung · Raesfelder Str. 3 · 46499 Hamminkeln
+
{{ t.anrede }} {{ t.vorname }} {{ t.nachname }}
+ {% if t.strasse %}
{{ t.strasse }}
{% endif %}
+ {% if t.plz or t.ort %}
{{ t.plz }} {{ t.ort }}
{% endif %}
+
+
+
+
+ Hamminkeln, den {{ veranstaltung.datum|date:"j. F Y" }}
+
+
+
+
+ {% if veranstaltung.betreff %}{{ veranstaltung.betreff }}{% else %}Einladung zum {{ veranstaltung.titel }}{% endif %}
+
+
+
+
+
+ Sehr geehrte{% if t.anrede == "Herr" %}r Herr{% elif t.anrede == "Frau" %} Frau{% else %}
+ {{ t.anrede }}{% endif %} {{ t.nachname }},
+
+
+
+ {% if veranstaltung.briefvorlage %}
+ {{ veranstaltung.briefvorlage|safe }}
+ {% else %}
+
+ wir laden Sie herzlich ein, an der jährlichen Vorstellung der Rechnungslegung
+ der van Hees-Theyssen-Vogel'schen Stiftung teilzunehmen.
+
+
+
Die Veranstaltung findet statt am:
+
+
+ {{ veranstaltung.datum|date:"l, j. F Y" }}{% if veranstaltung.uhrzeit %}, {{ veranstaltung.uhrzeit|time:"H:i" }} Uhr{% endif %}
+ {{ veranstaltung.ort }}
+ {% if veranstaltung.adresse %}{{ veranstaltung.adresse }}{% endif %}
+
+
+
+ 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.
+
+
+
+ Bitte teilen Sie uns bis zum 4. April 2026 mit, ob Sie an der
+ Veranstaltung teilnehmen werden. Eine Rückmeldung per Post an die oben genannte
+ Adresse ist erbeten.
+
+
+
Wir freuen uns auf Ihr Kommen.
+ {% endif %}
+
+
Mit freundlichen Grüßen
+
+
+
+
+ {% if veranstaltung.unterschrift_1_name %}
+
+
+ {{ veranstaltung.unterschrift_1_name }}
+ {{ veranstaltung.unterschrift_1_titel }}
+ van Hees-Theyssen-Vogel'sche Stiftung
+
+ {% endif %}
+ {% if veranstaltung.unterschrift_2_name %}
+
+
+ {{ veranstaltung.unterschrift_2_name }}
+ {{ veranstaltung.unterschrift_2_titel }}
+ van Hees-Theyssen-Vogel'sche Stiftung
+
+ {% endif %}
+
+
+
+{% endfor %}
+
+
+
diff --git a/compose.dev.yml b/compose.dev.yml
index bb74843..df238b4 100644
--- a/compose.dev.yml
+++ b/compose.dev.yml
@@ -7,6 +7,7 @@ services:
POSTGRES_PASSWORD: postgres_dev
volumes:
- dbdata_dev:/var/lib/postgresql/data
+ - ./scripts/init-paperless-db.sh:/docker-entrypoint-initdb.d/init-paperless-db.sh
ports:
- "5433:5432"
healthcheck:
@@ -40,7 +41,7 @@ services:
- TIME_ZONE=Europe/Berlin
- REDIS_URL=redis://redis:6379/0
- PAPERLESS_API_URL=http://paperless:8000
- - PAPERLESS_API_TOKEN=d477152aca264ea00620910ac09a06f0a4faaecc
+ - PAPERLESS_API_TOKEN=1972509e25810d9ae7497c1c79ecfea9e942f18d
- PAPERLESS_REQUIRED_TAG=Stiftung_Destinatäre
- PAPERLESS_LAND_TAG=Stiftung_Land_und_Pächter
- PAPERLESS_ADMIN_TAG=Stiftung_Administration
@@ -64,12 +65,12 @@ services:
- PAPERLESS_REDIS=redis://redis:6379
- PAPERLESS_DBHOST=db
- PAPERLESS_DBPORT=5432
- - PAPERLESS_DBNAME=stiftung_dev
+ - PAPERLESS_DBNAME=paperless_dev
- PAPERLESS_DBUSER=postgres
- PAPERLESS_DBPASS=postgres_dev
- PAPERLESS_SECRET_KEY=dev-paperless-secret-key
- PAPERLESS_URL=http://localhost:8082
- - PAPERLESS_ALLOWED_HOSTS=localhost,127.0.0.1
+ - PAPERLESS_ALLOWED_HOSTS=localhost,127.0.0.1,paperless
- PAPERLESS_CORS_ALLOWED_HOSTS=http://localhost:8082,http://localhost:8081
- PAPERLESS_ADMIN_USER=admin
- PAPERLESS_ADMIN_PASSWORD=admin123
diff --git a/compose.yml b/compose.yml
index 2eb6c0b..4548e81 100644
--- a/compose.yml
+++ b/compose.yml
@@ -15,6 +15,7 @@ services:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- dbdata:/var/lib/postgresql/data
+ - ./scripts/init-paperless-db.sh:/docker-entrypoint-initdb.d/init-paperless-db.sh
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 10s
@@ -157,12 +158,12 @@ services:
- PAPERLESS_REDIS=redis://redis:6379
- PAPERLESS_DBHOST=db
- PAPERLESS_DBPORT=5432
- - PAPERLESS_DBNAME=${POSTGRES_DB}
+ - PAPERLESS_DBNAME=${PAPERLESS_DBNAME:-paperless}
- PAPERLESS_DBUSER=${POSTGRES_USER}
- PAPERLESS_DBPASS=${POSTGRES_PASSWORD}
- PAPERLESS_SECRET_KEY=${PAPERLESS_SECRET_KEY}
- PAPERLESS_URL=https://vhtv-stiftung.de
- - PAPERLESS_ALLOWED_HOSTS=vhtv-stiftung.de,localhost
+ - PAPERLESS_ALLOWED_HOSTS=vhtv-stiftung.de,localhost,paperless
- PAPERLESS_CORS_ALLOWED_HOSTS=https://vhtv-stiftung.de
- PAPERLESS_FORCE_SCRIPT_NAME=/paperless
- PAPERLESS_STATIC_URL=/paperless/static/
diff --git a/deploy-production/docker-compose.prod.yml b/deploy-production/docker-compose.prod.yml
index 7b4b4c5..70b4467 100644
--- a/deploy-production/docker-compose.prod.yml
+++ b/deploy-production/docker-compose.prod.yml
@@ -16,6 +16,7 @@ services:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- dbdata:/var/lib/postgresql/data
+ - ./scripts/init-paperless-db.sh:/docker-entrypoint-initdb.d/init-paperless-db.sh
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 10s
@@ -125,12 +126,12 @@ services:
- PAPERLESS_REDIS=redis://redis:6379
- PAPERLESS_DBHOST=db
- PAPERLESS_DBPORT=5432
- - PAPERLESS_DBNAME=${POSTGRES_DB}
+ - PAPERLESS_DBNAME=${PAPERLESS_DBNAME:-paperless}
- PAPERLESS_DBUSER=${POSTGRES_USER}
- PAPERLESS_DBPASS=${POSTGRES_PASSWORD}
- PAPERLESS_SECRET_KEY=${PAPERLESS_SECRET_KEY}
- PAPERLESS_URL=https://vhtv-stiftung.de
- - PAPERLESS_ALLOWED_HOSTS=vhtv-stiftung.de,localhost
+ - PAPERLESS_ALLOWED_HOSTS=vhtv-stiftung.de,localhost,paperless
- PAPERLESS_CORS_ALLOWED_HOSTS=https://vhtv-stiftung.de
- PAPERLESS_FORCE_SCRIPT_NAME=/paperless
- PAPERLESS_STATIC_URL=/paperless/static/
diff --git a/env-production.template b/env-production.template
index 5542d53..0b754dd 100644
--- a/env-production.template
+++ b/env-production.template
@@ -38,7 +38,7 @@ CSRF_COOKIE_NAME=stiftung_csrftoken
REDIS_URL=redis://redis:6379/0
# PAPERLESS CONFIGURATION
-PAPERLESS_API_URL=http://paperless:8000/api
+PAPERLESS_API_URL=http://paperless:8000
PAPERLESS_API_TOKEN=your_paperless_api_token_here
PAPERLESS_SECRET_KEY=your_paperless_secret_key_here
PAPERLESS_ADMIN_USER=admin
diff --git a/scripts/init-paperless-db.sh b/scripts/init-paperless-db.sh
new file mode 100755
index 0000000..d92f372
--- /dev/null
+++ b/scripts/init-paperless-db.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+set -e
+
+# Create separate database for Paperless-NGX if it doesn't exist
+psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
+ SELECT 'CREATE DATABASE paperless_dev'
+ WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'paperless_dev')\gexec
+
+ SELECT 'CREATE DATABASE paperless'
+ WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'paperless')\gexec
+EOSQL