- 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>
55 lines
1.8 KiB
Python
55 lines
1.8 KiB
Python
import uuid
|
|
|
|
from django.contrib.auth.models import User
|
|
from django.db import models
|
|
|
|
|
|
class DokumentVorlage(models.Model):
|
|
"""Web-editierbare Vorlagen für generierte Dokumente (PDF, E-Mail, Berichte)."""
|
|
|
|
KATEGORIE_CHOICES = [
|
|
("pdf", "PDF-Dokument"),
|
|
("email", "E-Mail"),
|
|
("bericht", "Bericht"),
|
|
("serienbrief", "Serienbrief"),
|
|
]
|
|
|
|
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
|
|
schluessel = models.CharField(
|
|
max_length=200,
|
|
unique=True,
|
|
verbose_name="Schlüssel",
|
|
help_text="Interner Template-Pfad, z.B. pdf/bestaetigung.html",
|
|
)
|
|
bezeichnung = models.CharField(max_length=200, verbose_name="Bezeichnung")
|
|
kategorie = models.CharField(
|
|
max_length=30,
|
|
choices=KATEGORIE_CHOICES,
|
|
verbose_name="Kategorie",
|
|
)
|
|
html_inhalt = models.TextField(verbose_name="HTML-Inhalt")
|
|
verfuegbare_variablen = models.JSONField(
|
|
default=dict,
|
|
blank=True,
|
|
verbose_name="Verfügbare Variablen",
|
|
help_text="JSON-Dokumentation der verfügbaren Template-Variablen",
|
|
)
|
|
zuletzt_bearbeitet_von = models.ForeignKey(
|
|
User,
|
|
null=True,
|
|
blank=True,
|
|
on_delete=models.SET_NULL,
|
|
related_name="bearbeitete_vorlagen",
|
|
verbose_name="Zuletzt bearbeitet von",
|
|
)
|
|
zuletzt_bearbeitet_am = models.DateTimeField(auto_now=True, verbose_name="Zuletzt bearbeitet")
|
|
erstellt_am = models.DateTimeField(auto_now_add=True, verbose_name="Erstellt am")
|
|
|
|
class Meta:
|
|
verbose_name = "Dokument-Vorlage"
|
|
verbose_name_plural = "Dokument-Vorlagen"
|
|
ordering = ["kategorie", "bezeichnung"]
|
|
|
|
def __str__(self):
|
|
return f"{self.bezeichnung} ({self.schluessel})"
|