Add Vorlagen editor, upload portal, onboarding, and participant import command
- 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:
50
app/stiftung/management/commands/restore_vorlagen.py
Normal file
50
app/stiftung/management/commands/restore_vorlagen.py
Normal file
@@ -0,0 +1,50 @@
|
||||
"""Management-Command: Stellt alle DokumentVorlage-Einträge aus den Originaldateien wieder her."""
|
||||
|
||||
from django.core.management.base import BaseCommand
|
||||
|
||||
from stiftung.models import DokumentVorlage
|
||||
from stiftung.utils.vorlagen import get_vorlage_original
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = "Stellt alle DokumentVorlage-Einträge aus den Original-Dateien wieder her."
|
||||
|
||||
def add_arguments(self, parser):
|
||||
parser.add_argument(
|
||||
"--dry-run",
|
||||
action="store_true",
|
||||
help="Zeigt nur an, was geändert würde, ohne tatsächlich zu ändern.",
|
||||
)
|
||||
|
||||
def handle(self, *args, **options):
|
||||
dry_run = options["dry_run"]
|
||||
vorlagen = DokumentVorlage.objects.all()
|
||||
|
||||
if not vorlagen.exists():
|
||||
self.stdout.write(self.style.WARNING("Keine DokumentVorlage-Einträge gefunden."))
|
||||
return
|
||||
|
||||
restored = 0
|
||||
skipped = 0
|
||||
for vorlage in vorlagen:
|
||||
try:
|
||||
original = get_vorlage_original(vorlage.schluessel)
|
||||
except FileNotFoundError:
|
||||
self.stdout.write(
|
||||
self.style.WARNING(f" SKIP: {vorlage.schluessel} — Original-Datei nicht gefunden")
|
||||
)
|
||||
skipped += 1
|
||||
continue
|
||||
|
||||
if dry_run:
|
||||
self.stdout.write(f" WÜRDE WIEDERHERSTELLEN: {vorlage.schluessel}")
|
||||
else:
|
||||
vorlage.html_inhalt = original
|
||||
vorlage.save(update_fields=["html_inhalt", "zuletzt_bearbeitet_am"])
|
||||
self.stdout.write(self.style.SUCCESS(f" OK: {vorlage.schluessel}"))
|
||||
restored += 1
|
||||
|
||||
action = "würden wiederhergestellt" if dry_run else "wiederhergestellt"
|
||||
self.stdout.write(
|
||||
self.style.SUCCESS(f"\n{restored} Vorlagen {action}, {skipped} übersprungen.")
|
||||
)
|
||||
Reference in New Issue
Block a user