Files
SysAdmin Agent aed540fe4b
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
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>
2026-03-21 09:25:18 +00:00

168 lines
6.0 KiB
Python

from django.core.management.base import BaseCommand
from stiftung.models import AppConfiguration
class Command(BaseCommand):
help = "Initialize default app configuration settings"
def handle(self, *args, **options):
# E-Mail / IMAP Settings
email_settings = [
{
"key": "imap_host",
"display_name": "IMAP Server",
"description": "Hostname oder IP-Adresse des IMAP-Servers (z.B. mail.example.com)",
"value": "",
"default_value": "",
"setting_type": "text",
"category": "email",
"order": 1,
},
{
"key": "imap_port",
"display_name": "IMAP Port",
"description": "Port des IMAP-Servers (Standard: 993 für SSL, 143 für unverschlüsselt)",
"value": "993",
"default_value": "993",
"setting_type": "number",
"category": "email",
"order": 2,
},
{
"key": "imap_user",
"display_name": "IMAP Benutzername",
"description": "Benutzername / E-Mail-Adresse für die IMAP-Anmeldung",
"value": "",
"default_value": "",
"setting_type": "text",
"category": "email",
"order": 3,
},
{
"key": "imap_password",
"display_name": "IMAP Passwort",
"description": "Passwort für die IMAP-Anmeldung",
"value": "",
"default_value": "",
"setting_type": "password",
"category": "email",
"order": 4,
},
{
"key": "imap_folder",
"display_name": "IMAP Ordner",
"description": "Name des zu überwachenden Postfach-Ordners (Standard: INBOX)",
"value": "INBOX",
"default_value": "INBOX",
"setting_type": "text",
"category": "email",
"order": 5,
},
{
"key": "imap_use_ssl",
"display_name": "SSL/TLS verwenden",
"description": "Sichere Verbindung zum IMAP-Server (empfohlen)",
"value": "True",
"default_value": "True",
"setting_type": "boolean",
"category": "email",
"order": 6,
},
# SMTP Settings
{
"key": "smtp_host",
"display_name": "SMTP Server",
"description": "Hostname des SMTP-Servers (z.B. smtp.ionos.de)",
"value": "smtp.ionos.de",
"default_value": "smtp.ionos.de",
"setting_type": "text",
"category": "email",
"order": 10,
},
{
"key": "smtp_port",
"display_name": "SMTP Port",
"description": "Port des SMTP-Servers (465 für SSL, 587 für STARTTLS)",
"value": "465",
"default_value": "465",
"setting_type": "number",
"category": "email",
"order": 11,
},
{
"key": "smtp_user",
"display_name": "SMTP Benutzername",
"description": "Benutzername / E-Mail-Adresse für die SMTP-Anmeldung",
"value": "",
"default_value": "",
"setting_type": "text",
"category": "email",
"order": 12,
},
{
"key": "smtp_password",
"display_name": "SMTP Passwort",
"description": "Passwort für die SMTP-Anmeldung",
"value": "",
"default_value": "",
"setting_type": "password",
"category": "email",
"order": 13,
},
{
"key": "smtp_use_ssl",
"display_name": "SSL/TLS verwenden (SMTP)",
"description": "Sichere Verbindung zum SMTP-Server (empfohlen für Port 465)",
"value": "True",
"default_value": "True",
"setting_type": "boolean",
"category": "email",
"order": 14,
},
{
"key": "smtp_from_email",
"display_name": "Absenderadresse (SMTP)",
"description": "Absenderadresse für ausgehende E-Mails (z.B. buero@vhtv-stiftung.de)",
"value": "buero@vhtv-stiftung.de",
"default_value": "buero@vhtv-stiftung.de",
"setting_type": "text",
"category": "email",
"order": 15,
},
]
all_settings = email_settings
created_count = 0
updated_count = 0
for setting_data in all_settings:
setting, created = AppConfiguration.objects.get_or_create(
key=setting_data["key"], defaults=setting_data
)
if created:
created_count += 1
self.stdout.write(
self.style.SUCCESS(f"Created setting: {setting.display_name}")
)
else:
# Update existing setting with new defaults if needed
if not setting.description:
setting.description = setting_data["description"]
setting.save()
updated_count += 1
self.stdout.write(
self.style.SUCCESS(
f"Configuration initialized successfully! "
f"Created {created_count} new settings, updated {updated_count} existing settings."
)
)
self.stdout.write(
self.style.WARNING(
'You can now manage these settings in the Django Admin under "App Configurations"'
)
)