snapshot: modularize workflow helper and task orchestration layers
This commit is contained in:
82
backend/workflows/view_audit.py
Normal file
82
backend/workflows/view_audit.py
Normal file
@@ -0,0 +1,82 @@
|
||||
from django.utils.translation import gettext as _
|
||||
|
||||
from .models import AdminAuditLog
|
||||
|
||||
|
||||
def display_user_name(user) -> str:
|
||||
first_name = (getattr(user, 'first_name', '') or '').strip()
|
||||
last_name = (getattr(user, 'last_name', '') or '').strip()
|
||||
full_name = f'{first_name} {last_name}'.strip()
|
||||
if full_name:
|
||||
return full_name
|
||||
username = (getattr(user, 'username', '') or '').strip()
|
||||
if username:
|
||||
return username
|
||||
return (getattr(user, 'email', '') or '').strip()
|
||||
|
||||
|
||||
def audit(
|
||||
request,
|
||||
action: str,
|
||||
*,
|
||||
target_type: str = '',
|
||||
target_id: int | None = None,
|
||||
target_label: str = '',
|
||||
details: dict | None = None,
|
||||
) -> None:
|
||||
if not getattr(request, 'user', None) or not request.user.is_authenticated:
|
||||
return
|
||||
AdminAuditLog.objects.create(
|
||||
actor=request.user,
|
||||
actor_display=display_user_name(request.user),
|
||||
action=action,
|
||||
target_type=target_type,
|
||||
target_id=target_id,
|
||||
target_label=target_label,
|
||||
details=details or {},
|
||||
)
|
||||
|
||||
|
||||
def audit_action_label(action: str) -> str:
|
||||
labels = {
|
||||
'requests_deleted': _('Vorgänge gelöscht'),
|
||||
'request_deleted': _('Vorgang gelöscht'),
|
||||
'request_retried': _('Vorgang erneut angestoßen'),
|
||||
'intro_pdf_generated': _('Einweisungs-PDF erzeugt'),
|
||||
'intro_live_pdf_generated': _('Live-Protokoll erzeugt'),
|
||||
'intro_session_reset': _('Einweisung zurückgesetzt'),
|
||||
'intro_session_saved': _('Einweisung als Entwurf gespeichert'),
|
||||
'intro_session_completed': _('Einweisung abgeschlossen'),
|
||||
'form_option_deleted': _('Formularoption gelöscht'),
|
||||
'form_options_saved': _('Formularoptionen gespeichert'),
|
||||
'form_field_texts_saved': _('Feldtexte gespeichert'),
|
||||
'form_layout_saved': _('Formularlayout gespeichert'),
|
||||
'intro_checklist_item_deleted': _('Einweisungs-Checkpunkt gelöscht'),
|
||||
'intro_checklist_item_added': _('Einweisungs-Checkpunkt hinzugefügt'),
|
||||
'intro_checklist_saved': _('Einweisungs-Checkliste gespeichert'),
|
||||
'welcome_email_triggered_now': _('Welcome E-Mail sofort ausgelöst'),
|
||||
'welcome_email_settings_saved': _('Welcome E-Mail Einstellungen gespeichert'),
|
||||
'welcome_email_bulk_action': _('Welcome E-Mail Sammelaktion ausgeführt'),
|
||||
'welcome_email_paused': _('Welcome E-Mail pausiert'),
|
||||
'welcome_email_resumed': _('Welcome E-Mail fortgesetzt'),
|
||||
'welcome_email_cancelled': _('Welcome E-Mail abgebrochen'),
|
||||
'smtp_test_sent': _('SMTP-Test gesendet'),
|
||||
'nextcloud_test_upload': _('Nextcloud-Testupload ausgeführt'),
|
||||
'nextcloud_mode_toggled': _('Nextcloud-Modus umgeschaltet'),
|
||||
'email_mode_toggled': _('E-Mail-Modus umgeschaltet'),
|
||||
'integrations_saved': _('Integrationen gespeichert'),
|
||||
'nextcloud_settings_saved': _('Nextcloud-Einstellungen gespeichert'),
|
||||
'mail_settings_saved': _('Mail-Einstellungen gespeichert'),
|
||||
'email_routing_saved': _('E-Mail-Routing gespeichert'),
|
||||
'notification_rules_saved': _('Benachrichtigungsregeln gespeichert'),
|
||||
'user_created': _('Benutzer erstellt'),
|
||||
'user_updated': _('Benutzer aktualisiert'),
|
||||
'user_password_reset_sent': _('Passwort-Reset-Link versendet'),
|
||||
'user_deleted': _('Benutzer gelöscht'),
|
||||
'backup_created': _('Backup erstellt'),
|
||||
'backup_verified': _('Backup verifiziert'),
|
||||
'backup_deleted': _('Backup gelöscht'),
|
||||
'backup_settings_saved': _('Backup-Einstellungen gespeichert'),
|
||||
'portal_app_registry_saved': _('App-Registry gespeichert'),
|
||||
}
|
||||
return labels.get(action, action.replace('_', ' ').strip().capitalize())
|
||||
Reference in New Issue
Block a user