diff --git a/backend/locale/en/LC_MESSAGES/django.mo b/backend/locale/en/LC_MESSAGES/django.mo index 163b675..48580ec 100644 Binary files a/backend/locale/en/LC_MESSAGES/django.mo and b/backend/locale/en/LC_MESSAGES/django.mo differ diff --git a/backend/locale/en/LC_MESSAGES/django.po b/backend/locale/en/LC_MESSAGES/django.po index eb6e042..a510bc3 100644 --- a/backend/locale/en/LC_MESSAGES/django.po +++ b/backend/locale/en/LC_MESSAGES/django.po @@ -2,187 +2,260 @@ msgid "" msgstr "" "Project-Id-Version: tubco-portal\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-03-24 15:40+0000\n" +"POT-Creation-Date: 2026-03-25 19:40+0000\n" "PO-Revision-Date: 2026-03-24 00:00+0000\n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: workflows/templates/registration/login.html:7 -#: workflows/templates/registration/login.html:28 +#: workflows/models.py:55 +msgid "Eingereicht" +msgstr "Submitted" + +#: workflows/models.py:56 +msgid "In Bearbeitung" +msgstr "Processing" + +#: workflows/models.py:57 +#, fuzzy +msgid "Abgeschlossen" +msgstr "Completed" + +#: workflows/models.py:58 workflows/templates/workflows/welcome_emails.html:112 +msgid "Fehlgeschlagen" +msgstr "Failed" + +#: workflows/templates/registration/login.html:4 +#: workflows/templates/registration/login.html:19 msgid "Anmeldung" msgstr "Sign in" -#: workflows/templates/registration/login.html:29 +#: workflows/templates/registration/login.html:20 msgid "Bitte melden Sie sich mit Ihrem Benutzerkonto an." msgstr "Please sign in with your user account." -#: workflows/templates/registration/login.html:34 +#: workflows/templates/registration/login.html:25 msgid "Anmeldung fehlgeschlagen. Bitte Zugangsdaten prüfen." msgstr "Login failed. Please check your credentials." -#: workflows/templates/registration/login.html:38 +#: workflows/templates/registration/login.html:29 msgid "Anmelden" msgstr "Sign in" -#: workflows/templates/workflows/form_builder.html:7 -#: workflows/templates/workflows/form_builder.html:19 -#: workflows/templates/workflows/home.html:553 +#: workflows/templates/workflows/audit_log.html:4 +#: workflows/templates/workflows/audit_log.html:15 +#: workflows/templates/workflows/home.html:134 +msgid "Audit Log" +msgstr "" + +#: workflows/templates/workflows/audit_log.html:16 +msgid "Nachvollziehbarkeit aller wichtigen Admin-Aktionen im Portal." +msgstr "" + +#: workflows/templates/workflows/audit_log.html:23 +#: workflows/templates/workflows/audit_log.html:54 +#: workflows/templates/workflows/requests_dashboard.html:163 +#: workflows/templates/workflows/welcome_emails.html:91 +msgid "Aktion" +msgstr "Action" + +#: workflows/templates/workflows/audit_log.html:25 +msgid "Alle" +msgstr "" + +#: workflows/templates/workflows/audit_log.html:32 +#: workflows/templates/workflows/audit_log.html:53 +msgid "Nutzer" +msgstr "" + +#: workflows/templates/workflows/audit_log.html:33 +#, fuzzy +#| msgid "Mitarbeitende suchen (Name oder E-Mail)" +msgid "Name, Benutzername oder E-Mail" +msgstr "Search employees (name or email)" + +#: workflows/templates/workflows/audit_log.html:36 +msgid "Von Datum" +msgstr "" + +#: workflows/templates/workflows/audit_log.html:40 +msgid "Bis Datum" +msgstr "" + +#: workflows/templates/workflows/audit_log.html:44 +msgid "Filtern" +msgstr "" + +#: workflows/templates/workflows/audit_log.html:45 +#: workflows/templates/workflows/requests_dashboard.html:133 +msgid "Zurücksetzen" +msgstr "Reset" + +#: workflows/templates/workflows/audit_log.html:52 +msgid "Zeit" +msgstr "" + +#: workflows/templates/workflows/audit_log.html:55 +#: workflows/templates/workflows/requests_dashboard.html:157 +msgid "Typ" +msgstr "Type" + +#: workflows/templates/workflows/audit_log.html:56 +msgid "Ziel" +msgstr "" + +#: workflows/templates/workflows/audit_log.html:57 +msgid "Details" +msgstr "" + +#: workflows/templates/workflows/audit_log.html:81 +#, fuzzy +#| msgid "Noch keine Vorgänge vorhanden." +msgid "Noch keine Audit-Einträge vorhanden." +msgstr "No requests available yet." + +#: workflows/templates/workflows/form_builder.html:4 +#: workflows/templates/workflows/form_builder.html:14 +#: workflows/templates/workflows/home.html:119 msgid "Form Builder" msgstr "Form Builder" #: workflows/templates/workflows/form_builder.html:15 -#: workflows/templates/workflows/integrations_setup.html:77 -#: workflows/templates/workflows/intro_builder.html:39 -#: workflows/templates/workflows/offboarding_form.html:30 -#: workflows/templates/workflows/onboarding_form.html:30 -#: workflows/templates/workflows/onboarding_intro_session.html:67 -#: workflows/templates/workflows/requests_dashboard.html:889 -#: workflows/templates/workflows/requests_dashboard.html:1119 -#: workflows/templates/workflows/welcome_emails.html:48 -msgid "Zur Startseite" -msgstr "Back to home" - -#: workflows/templates/workflows/form_builder.html:20 msgid "Felder per Drag-and-Drop sortieren und pro Schritt gruppieren." msgstr "Sort fields by drag and drop and group them by step." -#: workflows/templates/workflows/form_builder.html:38 +#: workflows/templates/workflows/form_builder.html:33 msgid "Reihenfolge speichern" msgstr "Save order" -#: workflows/templates/workflows/form_builder.html:55 +#: workflows/templates/workflows/form_builder.html:50 msgid "Fix" msgstr "Fixed" -#: workflows/templates/workflows/form_builder.html:56 +#: workflows/templates/workflows/form_builder.html:51 msgid "Ausgeblendet" msgstr "Hidden" -#: workflows/templates/workflows/form_builder.html:57 +#: workflows/templates/workflows/form_builder.html:52 msgid "Pflicht" msgstr "Required" -#: workflows/templates/workflows/form_builder.html:68 +#: workflows/templates/workflows/form_builder.html:63 msgid "Optionen verwalten" msgstr "Manage options" -#: workflows/templates/workflows/form_builder.html:71 +#: workflows/templates/workflows/form_builder.html:66 msgid "Kategorie" msgstr "Category" -#: workflows/templates/workflows/form_builder.html:84 -#: workflows/templates/workflows/form_builder.html:97 -#: workflows/templates/workflows/form_builder.html:142 +#: workflows/templates/workflows/form_builder.html:79 +#: workflows/templates/workflows/form_builder.html:92 +#: workflows/templates/workflows/form_builder.html:137 msgid "Label (DE)" msgstr "Label (DE)" -#: workflows/templates/workflows/form_builder.html:85 +#: workflows/templates/workflows/form_builder.html:80 msgid "Label (EN, optional)" msgstr "Label (EN, optional)" -#: workflows/templates/workflows/form_builder.html:86 +#: workflows/templates/workflows/form_builder.html:81 msgid "Technischer Wert (optional)" msgstr "Technical value (optional)" -#: workflows/templates/workflows/form_builder.html:87 +#: workflows/templates/workflows/form_builder.html:82 msgid "Option hinzufügen" msgstr "Add option" -#: workflows/templates/workflows/form_builder.html:96 -#: workflows/templates/workflows/intro_builder.html:90 +#: workflows/templates/workflows/form_builder.html:91 +#: workflows/templates/workflows/intro_builder.html:62 msgid "Sortierung" msgstr "Sort order" -#: workflows/templates/workflows/form_builder.html:98 -#: workflows/templates/workflows/form_builder.html:143 +#: workflows/templates/workflows/form_builder.html:93 +#: workflows/templates/workflows/form_builder.html:138 msgid "Label (EN)" msgstr "Label (EN)" -#: workflows/templates/workflows/form_builder.html:100 -#: workflows/templates/workflows/integrations_setup.html:290 -#: workflows/templates/workflows/intro_builder.html:97 +#: workflows/templates/workflows/form_builder.html:95 +#: workflows/templates/workflows/integrations_setup.html:225 +#: workflows/templates/workflows/intro_builder.html:69 msgid "Aktiv" msgstr "Active" -#: workflows/templates/workflows/form_builder.html:101 -#: workflows/templates/workflows/form_builder.html:116 -#: workflows/templates/workflows/integrations_setup.html:292 -#: workflows/templates/workflows/intro_builder.html:98 -#: workflows/templates/workflows/intro_builder.html:134 -#: workflows/templates/workflows/requests_dashboard.html:1102 -#: workflows/templates/workflows/welcome_emails.html:110 +#: workflows/templates/workflows/form_builder.html:96 +#: workflows/templates/workflows/form_builder.html:111 +#: workflows/templates/workflows/integrations_setup.html:227 +#: workflows/templates/workflows/intro_builder.html:70 +#: workflows/templates/workflows/intro_builder.html:106 +#: workflows/templates/workflows/requests_dashboard.html:247 +#: workflows/templates/workflows/welcome_emails.html:74 msgid "Löschen" msgstr "Delete" -#: workflows/templates/workflows/form_builder.html:109 +#: workflows/templates/workflows/form_builder.html:104 msgid "Ziehen zum Sortieren" msgstr "Drag to reorder" -#: workflows/templates/workflows/form_builder.html:116 +#: workflows/templates/workflows/form_builder.html:111 msgid "Option wirklich löschen?" msgstr "Delete this option?" -#: workflows/templates/workflows/form_builder.html:120 +#: workflows/templates/workflows/form_builder.html:115 msgid "Keine Optionen in dieser Kategorie." msgstr "No options in this category." -#: workflows/templates/workflows/form_builder.html:126 +#: workflows/templates/workflows/form_builder.html:121 msgid "Optionen speichern" msgstr "Save options" -#: workflows/templates/workflows/form_builder.html:133 +#: workflows/templates/workflows/form_builder.html:128 msgid "Feldtexte verwalten" msgstr "Manage field text" -#: workflows/templates/workflows/form_builder.html:141 +#: workflows/templates/workflows/form_builder.html:136 msgid "Feld" msgstr "Field" -#: workflows/templates/workflows/form_builder.html:144 +#: workflows/templates/workflows/form_builder.html:139 msgid "Hilfetext (DE)" msgstr "Help text (DE)" -#: workflows/templates/workflows/form_builder.html:145 +#: workflows/templates/workflows/form_builder.html:140 msgid "Hilfetext (EN)" msgstr "Help text (EN)" -#: workflows/templates/workflows/form_builder.html:155 +#: workflows/templates/workflows/form_builder.html:150 msgid "Fallback: Standardlabel" msgstr "Fallback: default label" -#: workflows/templates/workflows/form_builder.html:156 +#: workflows/templates/workflows/form_builder.html:151 msgid "English label" msgstr "English label" -#: workflows/templates/workflows/form_builder.html:157 +#: workflows/templates/workflows/form_builder.html:152 msgid "Optionaler Hilfetext" msgstr "Optional help text" -#: workflows/templates/workflows/form_builder.html:158 +#: workflows/templates/workflows/form_builder.html:153 msgid "Optional English help text" msgstr "Optional English help text" -#: workflows/templates/workflows/form_builder.html:161 +#: workflows/templates/workflows/form_builder.html:156 msgid "Keine Feldkonfigurationen verfügbar." msgstr "No field configurations available." -#: workflows/templates/workflows/form_builder.html:167 +#: workflows/templates/workflows/form_builder.html:162 msgid "Feldtexte speichern" msgstr "Save field text" -#: workflows/templates/workflows/handbook.html:7 -#: workflows/templates/workflows/handbook.html:31 -#: workflows/templates/workflows/home.html:563 +#: workflows/templates/workflows/handbook.html:4 +#: workflows/templates/workflows/handbook.html:15 +#: workflows/templates/workflows/home.html:129 msgid "Handbook" msgstr "Handbook" -#: workflows/templates/workflows/handbook.html:32 -msgid "Back to Home" -msgstr "Back to home" - -#: workflows/templates/workflows/handbook.html:34 +#: workflows/templates/workflows/handbook.html:17 msgid "" "Single documentation entry point for both operational knowledge and long-" "term engineering knowledge." @@ -190,15 +263,15 @@ msgstr "" "Single documentation entry point for both operational knowledge and long-" "term engineering knowledge." -#: workflows/templates/workflows/handbook.html:38 +#: workflows/templates/workflows/handbook.html:21 msgid "Operations" msgstr "Operations" -#: workflows/templates/workflows/handbook.html:39 +#: workflows/templates/workflows/handbook.html:22 msgid "Project Wiki" msgstr "Project Wiki" -#: workflows/templates/workflows/handbook.html:40 +#: workflows/templates/workflows/handbook.html:23 msgid "" "Operational and product-level documentation for onboarding, offboarding, " "PDFs, integrations, admin tools, and system behavior." @@ -206,35 +279,35 @@ msgstr "" "Operational and product-level documentation for onboarding, offboarding, " "PDFs, integrations, admin tools, and system behavior." -#: workflows/templates/workflows/handbook.html:42 +#: workflows/templates/workflows/handbook.html:25 msgid "workflow overview" msgstr "workflow overview" -#: workflows/templates/workflows/handbook.html:43 +#: workflows/templates/workflows/handbook.html:26 msgid "admin tools and system behavior" msgstr "admin tools and system behavior" -#: workflows/templates/workflows/handbook.html:44 +#: workflows/templates/workflows/handbook.html:27 msgid "integrations and operations" msgstr "integrations and operations" -#: workflows/templates/workflows/handbook.html:45 +#: workflows/templates/workflows/handbook.html:28 msgid "runbook and troubleshooting" msgstr "runbook and troubleshooting" -#: workflows/templates/workflows/handbook.html:48 +#: workflows/templates/workflows/handbook.html:31 msgid "Open Project Wiki" msgstr "Open Project Wiki" -#: workflows/templates/workflows/handbook.html:53 +#: workflows/templates/workflows/handbook.html:36 msgid "Engineering" msgstr "Engineering" -#: workflows/templates/workflows/handbook.html:54 +#: workflows/templates/workflows/handbook.html:37 msgid "Developer Handbook" msgstr "Developer Handbook" -#: workflows/templates/workflows/handbook.html:55 +#: workflows/templates/workflows/handbook.html:38 msgid "" "Engineering documentation for architecture, local setup, Docker, migrations, " "translations, deployment, testing, and long-term maintenance." @@ -242,79 +315,79 @@ msgstr "" "Engineering documentation for architecture, local setup, Docker, migrations, " "translations, deployment, testing, and long-term maintenance." -#: workflows/templates/workflows/handbook.html:57 +#: workflows/templates/workflows/handbook.html:40 msgid "repository and service structure" msgstr "repository and service structure" -#: workflows/templates/workflows/handbook.html:58 +#: workflows/templates/workflows/handbook.html:41 msgid "Docker and migration workflow" msgstr "Docker and migration workflow" -#: workflows/templates/workflows/handbook.html:59 +#: workflows/templates/workflows/handbook.html:42 msgid "translation and builder architecture" msgstr "translation and builder architecture" -#: workflows/templates/workflows/handbook.html:60 +#: workflows/templates/workflows/handbook.html:43 msgid "deployment, security, and maintenance notes" msgstr "deployment, security, and maintenance notes" -#: workflows/templates/workflows/handbook.html:63 +#: workflows/templates/workflows/handbook.html:46 msgid "Open Developer Handbook" msgstr "Open Developer Handbook" -#: workflows/templates/workflows/handbook.html:68 -#: workflows/templates/workflows/release_checklist.html:36 +#: workflows/templates/workflows/handbook.html:51 +#: workflows/templates/workflows/release_checklist.html:15 msgid "Release" msgstr "" -#: workflows/templates/workflows/handbook.html:69 -#: workflows/templates/workflows/release_checklist.html:7 -#: workflows/templates/workflows/release_checklist.html:38 +#: workflows/templates/workflows/handbook.html:52 +#: workflows/templates/workflows/release_checklist.html:4 +#: workflows/templates/workflows/release_checklist.html:17 msgid "Release Checklist" msgstr "" -#: workflows/templates/workflows/handbook.html:70 +#: workflows/templates/workflows/handbook.html:53 msgid "" "Step-by-step release runbook for rebuilds, migrations, translations, static " "assets, smoke checks, and rollout verification." msgstr "" -#: workflows/templates/workflows/handbook.html:72 +#: workflows/templates/workflows/handbook.html:55 msgid "pre-release validation commands" msgstr "" -#: workflows/templates/workflows/handbook.html:73 +#: workflows/templates/workflows/handbook.html:56 msgid "translation, static, and migration steps" msgstr "" -#: workflows/templates/workflows/handbook.html:74 +#: workflows/templates/workflows/handbook.html:57 msgid "post-release smoke checks" msgstr "" -#: workflows/templates/workflows/handbook.html:75 +#: workflows/templates/workflows/handbook.html:58 msgid "rollback and evidence checklist" msgstr "" -#: workflows/templates/workflows/handbook.html:78 +#: workflows/templates/workflows/handbook.html:61 msgid "Open Release Checklist" msgstr "" -#: workflows/templates/workflows/home.html:8 -#: workflows/templates/workflows/home.html:469 -#: workflows/templates/workflows/requests_dashboard.html:1118 +#: workflows/templates/workflows/home.html:4 +#: workflows/templates/workflows/home.html:35 +#: workflows/templates/workflows/requests_dashboard.html:263 msgid "TUBCO Onboarding & Offboarding Portal" msgstr "TUBCO Onboarding & Offboarding Portal" -#: workflows/templates/workflows/home.html:460 +#: workflows/templates/workflows/home.html:26 msgid "Abmelden" msgstr "Log out" -#: workflows/templates/workflows/home.html:468 -#: workflows/templates/workflows/requests_dashboard.html:897 +#: workflows/templates/workflows/home.html:34 +#: workflows/templates/workflows/requests_dashboard.html:32 msgid "Operations Console" msgstr "Operations Console" -#: workflows/templates/workflows/home.html:470 +#: workflows/templates/workflows/home.html:36 msgid "" "Zentrale Arbeitsfläche für Anfragen, PDF-Generierung, E-Mail-Workflows und " "Ablage in Nextcloud." @@ -322,61 +395,63 @@ msgstr "" "Central workspace for requests, PDF generation, email workflows, and storage " "in Nextcloud." -#: workflows/templates/workflows/home.html:472 +#: workflows/templates/workflows/home.html:38 msgid "Rolle:" msgstr "Role:" -#: workflows/templates/workflows/home.html:472 +#: workflows/templates/workflows/home.html:38 msgid "Admin" msgstr "Admin" -#: workflows/templates/workflows/home.html:472 +#: workflows/templates/workflows/home.html:38 msgid "Mitarbeiter" msgstr "Staff" -#: workflows/templates/workflows/home.html:474 +#: workflows/templates/workflows/home.html:40 msgid "Nextcloud:" msgstr "Nextcloud:" -#: workflows/templates/workflows/home.html:474 +#: workflows/templates/workflows/home.html:40 msgid "aktiv" msgstr "active" -#: workflows/templates/workflows/home.html:474 +#: workflows/templates/workflows/home.html:40 msgid "inaktiv" msgstr "inactive" -#: workflows/templates/workflows/home.html:477 +#: workflows/templates/workflows/home.html:43 +#: workflows/templates/workflows/offboarding_success.html:20 +#: workflows/templates/workflows/onboarding_success.html:20 msgid "E-Mail:" msgstr "Email:" -#: workflows/templates/workflows/home.html:477 +#: workflows/templates/workflows/home.html:43 msgid "Testmodus" msgstr "Test mode" -#: workflows/templates/workflows/home.html:477 +#: workflows/templates/workflows/home.html:43 msgid "Produktion" msgstr "Production" -#: workflows/templates/workflows/home.html:479 +#: workflows/templates/workflows/home.html:45 msgid "PDF + E-Mail Workflow bereit" msgstr "PDF + Email Workflow Ready" -#: workflows/templates/workflows/home.html:493 +#: workflows/templates/workflows/home.html:59 msgid "Apps" msgstr "Apps" -#: workflows/templates/workflows/home.html:494 +#: workflows/templates/workflows/home.html:60 msgid "Wählen Sie den gewünschten Prozess." msgstr "Choose the desired process." -#: workflows/templates/workflows/home.html:500 -#: workflows/templates/workflows/onboarding_form.html:36 -#: workflows/templates/workflows/requests_dashboard.html:933 +#: workflows/templates/workflows/home.html:66 +#: workflows/templates/workflows/onboarding_form.html:25 +#: workflows/templates/workflows/requests_dashboard.html:68 msgid "Onboarding" msgstr "Onboarding" -#: workflows/templates/workflows/home.html:501 +#: workflows/templates/workflows/home.html:67 msgid "" "Neue Mitarbeitende erfassen, PDF mit Briefkopf erstellen, Benachrichtigungen " "senden und in Nextcloud ablegen." @@ -384,24 +459,24 @@ msgstr "" "Capture new employees, generate a PDF with letterhead, send notifications, " "and store it in Nextcloud." -#: workflows/templates/workflows/home.html:503 +#: workflows/templates/workflows/home.html:69 msgid "Mehrschritt-Formular" msgstr "Multi-step form" -#: workflows/templates/workflows/home.html:505 +#: workflows/templates/workflows/home.html:71 msgid "E-Mail Routing" msgstr "Email routing" -#: workflows/templates/workflows/home.html:509 +#: workflows/templates/workflows/home.html:75 msgid "Onboarding starten" msgstr "Start onboarding" -#: workflows/templates/workflows/home.html:516 -#: workflows/templates/workflows/requests_dashboard.html:943 +#: workflows/templates/workflows/home.html:82 +#: workflows/templates/workflows/requests_dashboard.html:78 msgid "Offboarding" msgstr "Offboarding" -#: workflows/templates/workflows/home.html:517 +#: workflows/templates/workflows/home.html:83 msgid "" "Mitarbeitende suchen, Daten vorbefüllen, Offboarding-Dokumente erzeugen und " "Rückgabe-Prozess starten." @@ -409,29 +484,29 @@ msgstr "" "Search employees, prefill data, generate offboarding documents, and start " "the return process." -#: workflows/templates/workflows/home.html:519 +#: workflows/templates/workflows/home.html:85 msgid "Profile-Suche" msgstr "Profile search" -#: workflows/templates/workflows/home.html:520 +#: workflows/templates/workflows/home.html:86 msgid "Hardware-Liste" msgstr "Hardware list" -#: workflows/templates/workflows/home.html:521 +#: workflows/templates/workflows/home.html:87 msgid "IT-Rückgabe" msgstr "IT return" -#: workflows/templates/workflows/home.html:525 +#: workflows/templates/workflows/home.html:91 msgid "Offboarding starten" msgstr "Start offboarding" -#: workflows/templates/workflows/home.html:532 -#: workflows/templates/workflows/requests_dashboard.html:8 -#: workflows/templates/workflows/requests_dashboard.html:898 +#: workflows/templates/workflows/home.html:98 +#: workflows/templates/workflows/requests_dashboard.html:4 +#: workflows/templates/workflows/requests_dashboard.html:33 msgid "Anfragen Dashboard" msgstr "Requests Dashboard" -#: workflows/templates/workflows/home.html:533 +#: workflows/templates/workflows/home.html:99 msgid "" "Status, Suchfunktion, PDF-Links und Verlauf aller Onboarding-/Offboarding-" "Anfragen." @@ -439,308 +514,320 @@ msgstr "" "Status, search, PDF links, and history of all onboarding/offboarding " "requests." -#: workflows/templates/workflows/home.html:535 +#: workflows/templates/workflows/home.html:101 msgid "Suche" msgstr "Search" -#: workflows/templates/workflows/home.html:536 -#: workflows/templates/workflows/onboarding_intro_session.html:97 -#: workflows/templates/workflows/welcome_emails.html:125 +#: workflows/templates/workflows/home.html:102 +#: workflows/templates/workflows/onboarding_intro_session.html:41 +#: workflows/templates/workflows/welcome_emails.html:89 msgid "Status" msgstr "Status" -#: workflows/templates/workflows/home.html:537 +#: workflows/templates/workflows/home.html:103 msgid "PDF Zugriff" msgstr "PDF access" -#: workflows/templates/workflows/home.html:541 +#: workflows/templates/workflows/home.html:107 msgid "Dashboard öffnen" msgstr "Open dashboard" -#: workflows/templates/workflows/home.html:548 +#: workflows/templates/workflows/home.html:114 msgid "Admin Apps" msgstr "Admin Apps" -#: workflows/templates/workflows/home.html:549 +#: workflows/templates/workflows/home.html:115 msgid "Konfiguration, Tests und Steuerung." msgstr "Configuration, tests, and controls." -#: workflows/templates/workflows/home.html:554 +#: workflows/templates/workflows/home.html:120 msgid "Felder, Schritte und Optionen verwalten." msgstr "Manage fields, steps, and options." -#: workflows/templates/workflows/home.html:555 -#: workflows/templates/workflows/home.html:560 -#: workflows/templates/workflows/home.html:565 -#: workflows/templates/workflows/home.html:570 -#: workflows/templates/workflows/home.html:575 -#: workflows/templates/workflows/home.html:580 +#: workflows/templates/workflows/home.html:121 +#: workflows/templates/workflows/home.html:126 +#: workflows/templates/workflows/home.html:131 +#: workflows/templates/workflows/home.html:136 +#: workflows/templates/workflows/home.html:141 +#: workflows/templates/workflows/home.html:146 +#: workflows/templates/workflows/home.html:151 msgid "Öffnen" msgstr "Open" -#: workflows/templates/workflows/home.html:558 -#: workflows/templates/workflows/intro_builder.html:7 -#: workflows/templates/workflows/intro_builder.html:44 +#: workflows/templates/workflows/home.html:124 +#: workflows/templates/workflows/intro_builder.html:4 +#: workflows/templates/workflows/intro_builder.html:17 msgid "Einweisungs-Builder" msgstr "Introduction Builder" -#: workflows/templates/workflows/home.html:559 +#: workflows/templates/workflows/home.html:125 msgid "Checklistenpunkte für das Einweisungsprotokoll konfigurieren." msgstr "Configure checklist items for the introduction protocol." -#: workflows/templates/workflows/home.html:564 +#: workflows/templates/workflows/home.html:130 msgid "Project wiki and developer documentation in one place." msgstr "Project wiki and developer documentation in one place." -#: workflows/templates/workflows/home.html:568 +#: workflows/templates/workflows/home.html:135 +msgid "Wichtige Admin-Aktionen nachvollziehen und prüfen." +msgstr "" + +#: workflows/templates/workflows/home.html:139 msgid "Integrationen" msgstr "Integrations" -#: workflows/templates/workflows/home.html:569 +#: workflows/templates/workflows/home.html:140 msgid "Nextcloud- und E-Mail-Setup." msgstr "Nextcloud and email setup." -#: workflows/templates/workflows/home.html:573 -#: workflows/templates/workflows/welcome_emails.html:7 +#: workflows/templates/workflows/home.html:144 +#: workflows/templates/workflows/welcome_emails.html:4 msgid "Welcome E-Mails" msgstr "Welcome Emails" -#: workflows/templates/workflows/home.html:574 +#: workflows/templates/workflows/home.html:145 msgid "Geplante Welcome Mails verwalten." msgstr "Manage scheduled welcome emails." -#: workflows/templates/workflows/home.html:578 +#: workflows/templates/workflows/home.html:149 msgid "Django Admin" msgstr "Django Admin" -#: workflows/templates/workflows/home.html:579 +#: workflows/templates/workflows/home.html:150 msgid "Vollständige Datenverwaltung." msgstr "Full data management." -#: workflows/templates/workflows/home.html:625 +#: workflows/templates/workflows/home.html:196 msgid "Tipp: Die letzten Vorgänge sehen Sie jederzeit im Anfragen Dashboard." msgstr "Tip: You can always see the latest requests in the Requests Dashboard." -#: workflows/templates/workflows/integrations_setup.html:7 -#: workflows/templates/workflows/integrations_setup.html:79 +#: workflows/templates/workflows/includes/app_header.html:4 +#: workflows/templates/workflows/includes/app_header.html:20 +#: workflows/templates/workflows/requests_dashboard.html:24 +msgid "Zur Startseite" +msgstr "Back to home" + +#: workflows/templates/workflows/includes/app_header.html:17 +#: workflows/templates/workflows/offboarding_success.html:30 +#: workflows/templates/workflows/onboarding_success.html:29 +msgid "Zum Dashboard" +msgstr "Go to dashboard" + +#: workflows/templates/workflows/integrations_setup.html:4 +#: workflows/templates/workflows/integrations_setup.html:14 msgid "Integrationen Setup" msgstr "Integrations Setup" -#: workflows/templates/workflows/integrations_setup.html:80 +#: workflows/templates/workflows/integrations_setup.html:15 msgid "Verwalten Sie Nextcloud- und Mail-Konfiguration ohne Backend-Wechsel." msgstr "" "Manage Nextcloud and mail configuration without switching to the backend." -#: workflows/templates/workflows/integrations_setup.html:83 +#: workflows/templates/workflows/integrations_setup.html:18 msgid "Setup Nextcloud" msgstr "Setup Nextcloud" -#: workflows/templates/workflows/integrations_setup.html:84 +#: workflows/templates/workflows/integrations_setup.html:19 msgid "Setup Mail" msgstr "Setup Mail" -#: workflows/templates/workflows/integrations_setup.html:85 +#: workflows/templates/workflows/integrations_setup.html:20 msgid "E-Mail Routing & Vorlagen" msgstr "Email routing & templates" -#: workflows/templates/workflows/integrations_setup.html:120 +#: workflows/templates/workflows/integrations_setup.html:55 msgid "Nextcloud speichern" msgstr "Save Nextcloud" -#: workflows/templates/workflows/integrations_setup.html:122 -#: workflows/templates/workflows/integrations_setup.html:162 +#: workflows/templates/workflows/integrations_setup.html:57 +#: workflows/templates/workflows/integrations_setup.html:97 msgid "Leeres Passwortfeld lässt das bestehende Passwort unverändert." msgstr "Leaving the password field empty keeps the current password unchanged." -#: workflows/templates/workflows/integrations_setup.html:156 +#: workflows/templates/workflows/integrations_setup.html:91 msgid "SMTP SSL" msgstr "SMTP SSL" -#: workflows/templates/workflows/integrations_setup.html:157 +#: workflows/templates/workflows/integrations_setup.html:92 msgid "SMTP TLS" msgstr "SMTP TLS" -#: workflows/templates/workflows/integrations_setup.html:160 +#: workflows/templates/workflows/integrations_setup.html:95 msgid "Mail speichern" msgstr "Save mail settings" -#: workflows/templates/workflows/integrations_setup.html:171 +#: workflows/templates/workflows/integrations_setup.html:106 msgid "It onboarding email" msgstr "IT onboarding email" -#: workflows/templates/workflows/integrations_setup.html:175 +#: workflows/templates/workflows/integrations_setup.html:110 msgid "General info email" msgstr "General info email" -#: workflows/templates/workflows/integrations_setup.html:179 +#: workflows/templates/workflows/integrations_setup.html:114 msgid "Business card email" msgstr "Business card email" -#: workflows/templates/workflows/integrations_setup.html:183 +#: workflows/templates/workflows/integrations_setup.html:118 msgid "Hr works email" msgstr "HR Works email" -#: workflows/templates/workflows/integrations_setup.html:187 +#: workflows/templates/workflows/integrations_setup.html:122 msgid "Key notification email" msgstr "Key notification email" -#: workflows/templates/workflows/integrations_setup.html:191 +#: workflows/templates/workflows/integrations_setup.html:126 msgid "Diese Empfänger werden für condition-based E-Mail Routing genutzt." msgstr "These recipients are used for condition-based email routing." -#: workflows/templates/workflows/integrations_setup.html:218 +#: workflows/templates/workflows/integrations_setup.html:153 msgid "E-Mail Routing & Vorlagen speichern" msgstr "Save email routing & templates" -#: workflows/templates/workflows/integrations_setup.html:224 +#: workflows/templates/workflows/integrations_setup.html:159 msgid "Bedingungsregeln für zusätzliche E-Mails" msgstr "Conditional rules for additional emails" -#: workflows/templates/workflows/integrations_setup.html:225 +#: workflows/templates/workflows/integrations_setup.html:160 msgid "Zusätzliche Regeln laufen nach dem Standard-Routing." msgstr "Additional rules run after the standard routing flow." -#: workflows/templates/workflows/integrations_setup.html:232 -#: workflows/templates/workflows/integrations_setup.html:303 +#: workflows/templates/workflows/integrations_setup.html:167 +#: workflows/templates/workflows/integrations_setup.html:238 msgid "Regelname" msgstr "Rule name" -#: workflows/templates/workflows/integrations_setup.html:236 -#: workflows/templates/workflows/integrations_setup.html:307 +#: workflows/templates/workflows/integrations_setup.html:171 +#: workflows/templates/workflows/integrations_setup.html:242 msgid "Event" msgstr "Event" -#: workflows/templates/workflows/integrations_setup.html:244 -#: workflows/templates/workflows/integrations_setup.html:315 +#: workflows/templates/workflows/integrations_setup.html:179 +#: workflows/templates/workflows/integrations_setup.html:250 msgid "Feldname" msgstr "Field name" -#: workflows/templates/workflows/integrations_setup.html:248 -#: workflows/templates/workflows/integrations_setup.html:319 -#: workflows/templates/workflows/intro_builder.html:95 +#: workflows/templates/workflows/integrations_setup.html:183 +#: workflows/templates/workflows/integrations_setup.html:254 +#: workflows/templates/workflows/intro_builder.html:67 msgid "Operator" msgstr "Operator" -#: workflows/templates/workflows/integrations_setup.html:256 -#: workflows/templates/workflows/integrations_setup.html:327 +#: workflows/templates/workflows/integrations_setup.html:191 +#: workflows/templates/workflows/integrations_setup.html:262 msgid "Vergleichswert" msgstr "Comparison value" -#: workflows/templates/workflows/integrations_setup.html:260 -#: workflows/templates/workflows/integrations_setup.html:331 -#: workflows/templates/workflows/welcome_emails.html:123 +#: workflows/templates/workflows/integrations_setup.html:195 +#: workflows/templates/workflows/integrations_setup.html:266 +#: workflows/templates/workflows/welcome_emails.html:87 msgid "Empfänger" msgstr "Recipients" -#: workflows/templates/workflows/integrations_setup.html:264 -#: workflows/templates/workflows/integrations_setup.html:335 +#: workflows/templates/workflows/integrations_setup.html:199 +#: workflows/templates/workflows/integrations_setup.html:270 msgid "Template Key (optional)" msgstr "Template key (optional)" -#: workflows/templates/workflows/integrations_setup.html:266 -#: workflows/templates/workflows/integrations_setup.html:337 +#: workflows/templates/workflows/integrations_setup.html:201 +#: workflows/templates/workflows/integrations_setup.html:272 msgid "-- Custom Betreff/Body verwenden --" msgstr "-- Use custom subject/body --" -#: workflows/templates/workflows/integrations_setup.html:273 -#: workflows/templates/workflows/integrations_setup.html:344 +#: workflows/templates/workflows/integrations_setup.html:208 +#: workflows/templates/workflows/integrations_setup.html:279 msgid "Custom Subject (optional)" msgstr "Custom subject (optional)" -#: workflows/templates/workflows/integrations_setup.html:277 -#: workflows/templates/workflows/integrations_setup.html:348 +#: workflows/templates/workflows/integrations_setup.html:212 +#: workflows/templates/workflows/integrations_setup.html:283 msgid "Custom Body (optional)" msgstr "Custom body (optional)" -#: workflows/templates/workflows/integrations_setup.html:281 -#: workflows/templates/workflows/integrations_setup.html:352 +#: workflows/templates/workflows/integrations_setup.html:216 +#: workflows/templates/workflows/integrations_setup.html:287 msgid "Custom Subject (EN, optional)" msgstr "Custom subject (EN, optional)" -#: workflows/templates/workflows/integrations_setup.html:285 -#: workflows/templates/workflows/integrations_setup.html:356 +#: workflows/templates/workflows/integrations_setup.html:220 +#: workflows/templates/workflows/integrations_setup.html:291 msgid "Custom Body (EN, optional)" msgstr "Custom body (EN, optional)" -#: workflows/templates/workflows/integrations_setup.html:291 -#: workflows/templates/workflows/integrations_setup.html:361 +#: workflows/templates/workflows/integrations_setup.html:226 +#: workflows/templates/workflows/integrations_setup.html:296 msgid "PDF anhängen" msgstr "Attach PDF" -#: workflows/templates/workflows/integrations_setup.html:296 +#: workflows/templates/workflows/integrations_setup.html:231 msgid "Noch keine zusätzlichen Regeln vorhanden." msgstr "No additional rules configured yet." -#: workflows/templates/workflows/integrations_setup.html:300 +#: workflows/templates/workflows/integrations_setup.html:235 msgid "Neue Regel hinzufügen" msgstr "Add new rule" -#: workflows/templates/workflows/integrations_setup.html:366 +#: workflows/templates/workflows/integrations_setup.html:301 msgid "Regeln speichern" msgstr "Save rules" -#: workflows/templates/workflows/intro_builder.html:45 +#: workflows/templates/workflows/intro_builder.html:18 msgid "Checklistenpunkte für das Einweisungs- und Übergabeprotokoll verwalten." msgstr "Manage checklist items for the introduction and handover protocol." -#: workflows/templates/workflows/intro_builder.html:47 -#: workflows/templates/workflows/onboarding_intro_session.html:66 -msgid "Zum Dashboard" -msgstr "Go to dashboard" - -#: workflows/templates/workflows/intro_builder.html:61 -#: workflows/templates/workflows/intro_builder.html:91 +#: workflows/templates/workflows/intro_builder.html:33 +#: workflows/templates/workflows/intro_builder.html:63 msgid "Abschnitt" msgstr "Section" -#: workflows/templates/workflows/intro_builder.html:69 -#: workflows/templates/workflows/intro_builder.html:92 +#: workflows/templates/workflows/intro_builder.html:41 +#: workflows/templates/workflows/intro_builder.html:64 msgid "Checklistenpunkt (DE)" msgstr "Checklist item (DE)" -#: workflows/templates/workflows/intro_builder.html:70 +#: workflows/templates/workflows/intro_builder.html:42 msgid "z. B. Nextcloud Ordnerstruktur erklärt" msgstr "e.g. Nextcloud folder structure explained" -#: workflows/templates/workflows/intro_builder.html:73 +#: workflows/templates/workflows/intro_builder.html:45 msgid "Checklist item (EN)" msgstr "Checklist item (EN)" -#: workflows/templates/workflows/intro_builder.html:74 +#: workflows/templates/workflows/intro_builder.html:46 msgid "e.g. Nextcloud folder structure explained" msgstr "e.g. Nextcloud folder structure explained" -#: workflows/templates/workflows/intro_builder.html:77 +#: workflows/templates/workflows/intro_builder.html:49 msgid "Punkt hinzufügen" msgstr "Add item" -#: workflows/templates/workflows/intro_builder.html:80 +#: workflows/templates/workflows/intro_builder.html:52 msgid "" "Bedingungen und Sortierung können anschließend in der Tabelle bearbeitet " "werden." msgstr "Conditions and sort order can then be edited in the table." -#: workflows/templates/workflows/intro_builder.html:93 +#: workflows/templates/workflows/intro_builder.html:65 msgid "Checklistenpunkt (EN)" msgstr "Checklist item (EN)" -#: workflows/templates/workflows/intro_builder.html:94 +#: workflows/templates/workflows/intro_builder.html:66 msgid "Feld-Bedingung" msgstr "Field condition" -#: workflows/templates/workflows/intro_builder.html:96 +#: workflows/templates/workflows/intro_builder.html:68 msgid "Wert" msgstr "Value" -#: workflows/templates/workflows/intro_builder.html:131 +#: workflows/templates/workflows/intro_builder.html:103 msgid "z. B. HR Works" msgstr "e.g. HR Works" -#: workflows/templates/workflows/intro_builder.html:134 +#: workflows/templates/workflows/intro_builder.html:106 msgid "Checklistenpunkt wirklich löschen?" msgstr "Delete this checklist item?" -#: workflows/templates/workflows/intro_builder.html:138 +#: workflows/templates/workflows/intro_builder.html:110 msgid "" "Noch keine benutzerdefinierten Checklistenpunkte angelegt. Solange die Liste " "leer ist, nutzt das System die integrierten Standardpunkte." @@ -748,21 +835,21 @@ msgstr "" "No custom checklist items have been created yet. As long as the list is " "empty, the system uses the built-in default items." -#: workflows/templates/workflows/intro_builder.html:143 +#: workflows/templates/workflows/intro_builder.html:115 msgid "Reihenfolge folgt derzeit der Tabellenreihenfolge beim Speichern." msgstr "Order currently follows the table order when saving." -#: workflows/templates/workflows/intro_builder.html:145 +#: workflows/templates/workflows/intro_builder.html:117 msgid "Checkliste speichern" msgstr "Save checklist" -#: workflows/templates/workflows/offboarding_form.html:8 -#: workflows/templates/workflows/offboarding_form.html:32 +#: workflows/templates/workflows/offboarding_form.html:4 +#: workflows/templates/workflows/offboarding_form.html:27 msgid "Offboarding-Anfrage" msgstr "Offboarding request" #: workflows/templates/workflows/offboarding_form.html:15 -#: workflows/templates/workflows/onboarding_form.html:15 +#: workflows/templates/workflows/onboarding_form.html:13 msgid "Anfrage gespeichert" msgstr "Request saved" @@ -776,36 +863,86 @@ msgstr "" "generated in the background." #: workflows/templates/workflows/offboarding_form.html:17 -#: workflows/templates/workflows/onboarding_form.html:17 +#: workflows/templates/workflows/onboarding_form.html:15 msgid "Schließen" msgstr "Close" -#: workflows/templates/workflows/offboarding_form.html:35 +#: workflows/templates/workflows/offboarding_form.html:30 msgid "Mitarbeitende suchen (Name oder E-Mail)" msgstr "Search employees (name or email)" -#: workflows/templates/workflows/offboarding_form.html:36 +#: workflows/templates/workflows/offboarding_form.html:31 msgid "z. B. max.mustermann@tub.co" msgstr "e.g. john.doe@tub.co" -#: workflows/templates/workflows/offboarding_form.html:38 -#: workflows/templates/workflows/requests_dashboard.html:996 +#: workflows/templates/workflows/offboarding_form.html:33 +#: workflows/templates/workflows/requests_dashboard.html:131 msgid "Suchen" msgstr "Search" -#: workflows/templates/workflows/offboarding_form.html:50 +#: workflows/templates/workflows/offboarding_form.html:45 msgid "Vorbefüllt aus:" msgstr "Prefilled from:" -#: workflows/templates/workflows/offboarding_form.html:69 +#: workflows/templates/workflows/offboarding_form.html:64 msgid "Offboarding-Anfrage speichern" msgstr "Save offboarding request" -#: workflows/templates/workflows/onboarding_form.html:8 +#: workflows/templates/workflows/offboarding_success.html:4 +#: workflows/templates/workflows/offboarding_success.html:17 +#, fuzzy +#| msgid "Offboarding-Anfrage speichern" +msgid "Offboarding gespeichert" +msgstr "Save offboarding request" + +#: workflows/templates/workflows/offboarding_success.html:18 +#: workflows/templates/workflows/onboarding_success.html:18 +msgid "Vorgangs-ID:" +msgstr "" + +#: workflows/templates/workflows/offboarding_success.html:19 +#: workflows/templates/workflows/onboarding_success.html:19 +#, fuzzy +#| msgid "Name" +msgid "Name:" +msgstr "Name" + +#: workflows/templates/workflows/offboarding_success.html:21 +msgid "Letzter Arbeitstag:" +msgstr "" + +#: workflows/templates/workflows/offboarding_success.html:23 +#: workflows/templates/workflows/onboarding_success.html:22 +msgid "PDF:" +msgstr "" + +#: workflows/templates/workflows/offboarding_success.html:23 +#: workflows/templates/workflows/onboarding_success.html:22 +#: workflows/templates/workflows/requests_dashboard.html:188 +msgid "PDF öffnen" +msgstr "Open PDF" + +#: workflows/templates/workflows/offboarding_success.html:24 +#: workflows/templates/workflows/onboarding_success.html:23 +msgid "Datei:" +msgstr "" + +#: workflows/templates/workflows/offboarding_success.html:26 +#: workflows/templates/workflows/onboarding_success.html:25 +msgid "PDF wird im Hintergrund erstellt." +msgstr "" + +#: workflows/templates/workflows/offboarding_success.html:29 +#, fuzzy +#| msgid "Offboarding-Anfrage speichern" +msgid "Neue Offboarding-Anfrage erfassen" +msgstr "Save offboarding request" + +#: workflows/templates/workflows/onboarding_form.html:4 msgid "Onboarding-Anfrage" msgstr "Onboarding request" -#: workflows/templates/workflows/onboarding_form.html:16 +#: workflows/templates/workflows/onboarding_form.html:14 #, python-format msgid "" "Onboarding wurde erfolgreich gespeichert (ID: %(request_id)s). Das PDF wird " @@ -814,321 +951,341 @@ msgstr "" "Onboarding was saved successfully (ID: %(request_id)s). The PDF is being " "generated in the background." -#: workflows/templates/workflows/onboarding_form.html:37 +#: workflows/templates/workflows/onboarding_form.html:26 msgid "Mehrseitiges Formular mit konfigurierbaren Feldern aus dem Admin." msgstr "Multi-page form with configurable fields from the admin." -#: workflows/templates/workflows/onboarding_form.html:53 +#: workflows/templates/workflows/onboarding_form.html:42 msgid "" "Bitte prüfen Sie die markierten Felder. Ungültige Eingaben wurden erkannt." msgstr "Please check the highlighted fields. Invalid input was detected." -#: workflows/templates/workflows/onboarding_form.html:86 -#: workflows/templates/workflows/onboarding_form.html:88 -#: workflows/templates/workflows/onboarding_form.html:125 -#: workflows/templates/workflows/onboarding_form.html:127 -#: workflows/templates/workflows/welcome_emails.html:105 +#: workflows/templates/workflows/onboarding_form.html:75 +#: workflows/templates/workflows/onboarding_form.html:77 +#: workflows/templates/workflows/onboarding_form.html:114 +#: workflows/templates/workflows/onboarding_form.html:116 +#: workflows/templates/workflows/welcome_emails.html:69 msgid "Alle auswählen" msgstr "Select all" -#: workflows/templates/workflows/onboarding_form.html:87 -#: workflows/templates/workflows/onboarding_form.html:126 +#: workflows/templates/workflows/onboarding_form.html:76 +#: workflows/templates/workflows/onboarding_form.html:115 #, fuzzy #| msgid "Auswahl löschen" msgid "Auswahl aufheben" msgstr "Delete selection" -#: workflows/templates/workflows/onboarding_form.html:149 +#: workflows/templates/workflows/onboarding_form.html:138 msgid "Keine konfigurierten Felder in diesem Schritt." msgstr "No configured fields in this step." -#: workflows/templates/workflows/onboarding_form.html:154 +#: workflows/templates/workflows/onboarding_form.html:143 msgid "Fast geschafft. Bitte Abschlussdaten prüfen und die Anfrage absenden." msgstr "Almost done. Please review the final details and submit the request." -#: workflows/templates/workflows/onboarding_form.html:166 +#: workflows/templates/workflows/onboarding_form.html:155 msgid "Zurück" msgstr "Back" -#: workflows/templates/workflows/onboarding_form.html:167 +#: workflows/templates/workflows/onboarding_form.html:156 msgid "Weiter" msgstr "Next" -#: workflows/templates/workflows/onboarding_form.html:168 +#: workflows/templates/workflows/onboarding_form.html:157 +msgid "Wird gesendet..." +msgstr "" + +#: workflows/templates/workflows/onboarding_form.html:157 msgid "Onboarding-Anfrage absenden" msgstr "Submit onboarding request" -#: workflows/templates/workflows/onboarding_intro_session.html:7 -#: workflows/templates/workflows/onboarding_intro_session.html:72 +#: workflows/templates/workflows/onboarding_intro_session.html:4 +#: workflows/templates/workflows/onboarding_intro_session.html:16 msgid "Einweisung durchführen" msgstr "Run introduction" -#: workflows/templates/workflows/onboarding_intro_session.html:73 +#: workflows/templates/workflows/onboarding_intro_session.html:17 msgid "" "Einfache Live-Checkliste für das persönliche Onboarding-Gespräch. Punkte " "abhaken, Notizen ergänzen, als Entwurf speichern oder als abgeschlossen " "markieren." msgstr "" -#: workflows/templates/workflows/onboarding_intro_session.html:85 -#: workflows/templates/workflows/welcome_emails.html:122 +#: workflows/templates/workflows/onboarding_intro_session.html:29 +#: workflows/templates/workflows/welcome_emails.html:86 msgid "Mitarbeitende Person" msgstr "Employee" -#: workflows/templates/workflows/onboarding_intro_session.html:87 +#: workflows/templates/workflows/onboarding_intro_session.html:31 msgid "Name" msgstr "Name" -#: workflows/templates/workflows/onboarding_intro_session.html:88 +#: workflows/templates/workflows/onboarding_intro_session.html:32 msgid "Abteilung" msgstr "Department" -#: workflows/templates/workflows/onboarding_intro_session.html:89 +#: workflows/templates/workflows/onboarding_intro_session.html:33 msgid "Berufsbezeichnung" msgstr "Job title" -#: workflows/templates/workflows/onboarding_intro_session.html:90 +#: workflows/templates/workflows/onboarding_intro_session.html:34 msgid "Dienstliche E-Mail" msgstr "Work email" -#: workflows/templates/workflows/onboarding_intro_session.html:91 +#: workflows/templates/workflows/onboarding_intro_session.html:35 msgid "Vertragsbeginn" msgstr "Contract start" -#: workflows/templates/workflows/onboarding_intro_session.html:95 +#: workflows/templates/workflows/onboarding_intro_session.html:39 msgid "Sitzungsstatus" msgstr "Session status" -#: workflows/templates/workflows/onboarding_intro_session.html:99 +#: workflows/templates/workflows/onboarding_intro_session.html:43 msgid "Abgeschlossen von" msgstr "Completed by" -#: workflows/templates/workflows/onboarding_intro_session.html:100 +#: workflows/templates/workflows/onboarding_intro_session.html:44 msgid "Abgeschlossen am" msgstr "Completed at" -#: workflows/templates/workflows/onboarding_intro_session.html:101 +#: workflows/templates/workflows/onboarding_intro_session.html:45 msgid "Letzte Änderung" msgstr "Last updated" -#: workflows/templates/workflows/onboarding_intro_session.html:109 +#: workflows/templates/workflows/onboarding_intro_session.html:53 msgid "Fortschritt der Einweisung" msgstr "Introduction progress" -#: workflows/templates/workflows/onboarding_intro_session.html:110 +#: workflows/templates/workflows/onboarding_intro_session.html:54 #, python-format msgid "%(checked)s von %(total)s Punkten erledigt" msgstr "%(checked)s of %(total)s items completed" -#: workflows/templates/workflows/onboarding_intro_session.html:134 +#: workflows/templates/workflows/onboarding_intro_session.html:78 msgid "Notizen" msgstr "Notes" -#: workflows/templates/workflows/onboarding_intro_session.html:136 +#: workflows/templates/workflows/onboarding_intro_session.html:80 msgid "" "Diese Seite bleibt bewusst einfach: echte Web-Checkboxen, Notizen und ein " "klarer Entwurf/Abschluss-Status. Kein zusätzlicher komplexer PDF-Signatur-" "Workflow." msgstr "" -#: workflows/templates/workflows/onboarding_intro_session.html:138 +#: workflows/templates/workflows/onboarding_intro_session.html:82 msgid "Als Entwurf speichern" msgstr "Save as draft" -#: workflows/templates/workflows/onboarding_intro_session.html:139 +#: workflows/templates/workflows/onboarding_intro_session.html:83 msgid "Als abgeschlossen markieren" msgstr "Mark as completed" -#: workflows/templates/workflows/onboarding_intro_session.html:140 +#: workflows/templates/workflows/onboarding_intro_session.html:84 msgid "Einweisung wirklich zurücksetzen?" msgstr "Reset the introduction session?" -#: workflows/templates/workflows/onboarding_intro_session.html:140 +#: workflows/templates/workflows/onboarding_intro_session.html:84 msgid "Alles zurücksetzen" msgstr "Reset all" -#: workflows/templates/workflows/onboarding_intro_session.html:146 -#: workflows/templates/workflows/requests_dashboard.html:1065 +#: workflows/templates/workflows/onboarding_intro_session.html:90 +#: workflows/templates/workflows/requests_dashboard.html:204 msgid "Live-Protokoll" msgstr "Live protocol" -#: workflows/templates/workflows/onboarding_intro_session.html:147 +#: workflows/templates/workflows/onboarding_intro_session.html:91 msgid "" "Erzeugt das Live-Protokoll nur aus den aktuell gespeicherten Haken und " "Notizen." msgstr "" -#: workflows/templates/workflows/onboarding_intro_session.html:151 +#: workflows/templates/workflows/onboarding_intro_session.html:95 msgid "Live-Protokoll erzeugen" msgstr "Generate live protocol" -#: workflows/templates/workflows/onboarding_intro_session.html:154 -#: workflows/templates/workflows/requests_dashboard.html:1069 +#: workflows/templates/workflows/onboarding_intro_session.html:98 +#: workflows/templates/workflows/requests_dashboard.html:208 msgid "Live-Protokoll öffnen" msgstr "Open live protocol" -#: workflows/templates/workflows/release_checklist.html:39 +#: workflows/templates/workflows/onboarding_success.html:4 +#, fuzzy +#| msgid "Offboarding-Anfrage speichern" +msgid "Onboarding gespeichert" +msgstr "Save offboarding request" + +#: workflows/templates/workflows/onboarding_success.html:17 +#, fuzzy +#| msgid "Anfrage gespeichert" +msgid "Anfrage erfolgreich gespeichert" +msgstr "Request saved" + +#: workflows/templates/workflows/onboarding_success.html:28 +msgid "Neue Anfrage erfassen" +msgstr "" + +#: workflows/templates/workflows/release_checklist.html:18 #, fuzzy #| msgid "Back to Home" msgid "Back to Handbook" msgstr "Back to home" -#: workflows/templates/workflows/release_checklist.html:41 +#: workflows/templates/workflows/release_checklist.html:20 msgid "" "Single runbook for preparing, validating, and evidencing a safe application " "release. Use it for both local production-like rollouts and future CI/CD " "handoffs." msgstr "" -#: workflows/templates/workflows/release_checklist.html:46 +#: workflows/templates/workflows/release_checklist.html:25 msgid "1. Pre-release checks" msgstr "" -#: workflows/templates/workflows/release_checklist.html:48 +#: workflows/templates/workflows/release_checklist.html:27 msgid "Confirm git working tree is clean or intentionally scoped." msgstr "" -#: workflows/templates/workflows/release_checklist.html:49 +#: workflows/templates/workflows/release_checklist.html:28 msgid "" "Read the latest Project Wiki and Developer Handbook updates for architecture " "changes." msgstr "" -#: workflows/templates/workflows/release_checklist.html:50 +#: workflows/templates/workflows/release_checklist.html:29 msgid "" "Check environment changes in .env.example and deployment secrets if " "integrations changed." msgstr "" -#: workflows/templates/workflows/release_checklist.html:51 +#: workflows/templates/workflows/release_checklist.html:30 msgid "" "If dependencies changed, rebuild web and worker images before validation." msgstr "" -#: workflows/templates/workflows/release_checklist.html:58 +#: workflows/templates/workflows/release_checklist.html:37 msgid "2. Validation commands" msgstr "" -#: workflows/templates/workflows/release_checklist.html:60 +#: workflows/templates/workflows/release_checklist.html:39 msgid "Run Django system checks." msgstr "" -#: workflows/templates/workflows/release_checklist.html:61 +#: workflows/templates/workflows/release_checklist.html:40 msgid "Run tests or a targeted verification command for the changed area." msgstr "" -#: workflows/templates/workflows/release_checklist.html:62 +#: workflows/templates/workflows/release_checklist.html:41 msgid "Compile translations after UI/content changes." msgstr "" -#: workflows/templates/workflows/release_checklist.html:63 +#: workflows/templates/workflows/release_checklist.html:42 msgid "If dependencies changed, verify imports do not emit warnings." msgstr "" -#: workflows/templates/workflows/release_checklist.html:72 +#: workflows/templates/workflows/release_checklist.html:51 msgid "3. Data and asset steps" msgstr "" -#: workflows/templates/workflows/release_checklist.html:74 +#: workflows/templates/workflows/release_checklist.html:53 msgid "Create and apply migrations if models changed." msgstr "" -#: workflows/templates/workflows/release_checklist.html:75 +#: workflows/templates/workflows/release_checklist.html:54 msgid "Run collectstatic if UI assets changed." msgstr "" -#: workflows/templates/workflows/release_checklist.html:76 +#: workflows/templates/workflows/release_checklist.html:55 msgid "Generate fresh PDFs if PDF templates or document logic changed." msgstr "" -#: workflows/templates/workflows/release_checklist.html:77 +#: workflows/templates/workflows/release_checklist.html:56 msgid "Confirm file outputs appear under backend/media/pdfs/." msgstr "" -#: workflows/templates/workflows/release_checklist.html:85 +#: workflows/templates/workflows/release_checklist.html:64 #, fuzzy #| msgid "Integrationen" msgid "4. Integration checks" msgstr "Integrations" -#: workflows/templates/workflows/release_checklist.html:87 +#: workflows/templates/workflows/release_checklist.html:66 msgid "Verify the health endpoint returns status ok." msgstr "" -#: workflows/templates/workflows/release_checklist.html:88 +#: workflows/templates/workflows/release_checklist.html:67 msgid "Verify MailHog in test mode or SMTP in production mode." msgstr "" -#: workflows/templates/workflows/release_checklist.html:89 +#: workflows/templates/workflows/release_checklist.html:68 msgid "Verify Nextcloud upload if synchronization behavior changed." msgstr "" -#: workflows/templates/workflows/release_checklist.html:90 +#: workflows/templates/workflows/release_checklist.html:69 msgid "" "Verify welcome-email scheduling or notification rules if email routing " "changed." msgstr "" -#: workflows/templates/workflows/release_checklist.html:97 +#: workflows/templates/workflows/release_checklist.html:76 msgid "5. Release evidence" msgstr "" -#: workflows/templates/workflows/release_checklist.html:99 +#: workflows/templates/workflows/release_checklist.html:78 msgid "Record which checks were run and their result." msgstr "" -#: workflows/templates/workflows/release_checklist.html:100 +#: workflows/templates/workflows/release_checklist.html:79 msgid "Take a snapshot commit before moving to the next change phase." msgstr "" -#: workflows/templates/workflows/release_checklist.html:101 +#: workflows/templates/workflows/release_checklist.html:80 msgid "" "If a release introduces new operations or engineering behavior, update both " "handbooks." msgstr "" -#: workflows/templates/workflows/release_checklist.html:102 +#: workflows/templates/workflows/release_checklist.html:81 msgid "" "Keep at least one successful onboarding and one offboarding smoke example " "during major workflow changes." msgstr "" -#: workflows/templates/workflows/release_checklist.html:107 +#: workflows/templates/workflows/release_checklist.html:86 msgid "6. Rollback basics" msgstr "" -#: workflows/templates/workflows/release_checklist.html:109 +#: workflows/templates/workflows/release_checklist.html:88 msgid "" "If rollout fails after code-only changes, redeploy the previous snapshot " "commit." msgstr "" -#: workflows/templates/workflows/release_checklist.html:110 +#: workflows/templates/workflows/release_checklist.html:89 msgid "" "If rollout includes schema changes, verify backward compatibility before " "rollback." msgstr "" -#: workflows/templates/workflows/release_checklist.html:111 +#: workflows/templates/workflows/release_checklist.html:90 msgid "" "If integrations fail, switch email mode/test settings conservatively before " "wider retry." msgstr "" -#: workflows/templates/workflows/release_checklist.html:112 +#: workflows/templates/workflows/release_checklist.html:91 msgid "" "Use logs from web and worker containers to isolate whether the issue is " "request, task, or integration related." msgstr "" -#: workflows/templates/workflows/release_checklist.html:119 +#: workflows/templates/workflows/release_checklist.html:98 msgid "" "Project rule: German remains the primary/fallback language. English is " "secondary. If a release adds new dynamic text, add the German source first " "and then the English value." msgstr "" -#: workflows/templates/workflows/requests_dashboard.html:899 +#: workflows/templates/workflows/requests_dashboard.html:34 msgid "" "Steuert Onboarding- und Offboarding-Prozesse an einem Ort. Die Oberfläche " "priorisiert Kennzahlen, Aktivität und direkte Aktionen in der Vorgangsliste." @@ -1136,23 +1293,23 @@ msgstr "" "Controls onboarding and offboarding processes in one place. The interface " "prioritizes metrics, activity, and direct actions in the request list." -#: workflows/templates/workflows/requests_dashboard.html:901 +#: workflows/templates/workflows/requests_dashboard.html:36 msgid "Onboarding + Offboarding" msgstr "Onboarding + Offboarding" -#: workflows/templates/workflows/requests_dashboard.html:902 +#: workflows/templates/workflows/requests_dashboard.html:37 msgid "PDFs + Live-Protokolle" msgstr "PDFs + live protocols" -#: workflows/templates/workflows/requests_dashboard.html:903 +#: workflows/templates/workflows/requests_dashboard.html:38 msgid "Suche + Bulk-Aktionen" msgstr "Search + bulk actions" -#: workflows/templates/workflows/requests_dashboard.html:909 +#: workflows/templates/workflows/requests_dashboard.html:44 msgid "Aktivitätsverlauf" msgstr "Activity Timeline" -#: workflows/templates/workflows/requests_dashboard.html:910 +#: workflows/templates/workflows/requests_dashboard.html:45 msgid "" "Die letzten 14 Tage in einer kompakten Ansicht über alle Onboarding- und " "Offboarding-Vorgänge." @@ -1160,148 +1317,135 @@ msgstr "" "The last 14 days in a compact view across all onboarding and offboarding " "requests." -#: workflows/templates/workflows/requests_dashboard.html:912 +#: workflows/templates/workflows/requests_dashboard.html:47 msgid "14 Tage" msgstr "14 days" -#: workflows/templates/workflows/requests_dashboard.html:938 +#: workflows/templates/workflows/requests_dashboard.html:73 msgid "Alle erfassten Onboarding-Vorgänge im aktuellen System." msgstr "All onboarding requests captured in the current system." -#: workflows/templates/workflows/requests_dashboard.html:948 +#: workflows/templates/workflows/requests_dashboard.html:83 msgid "Austritte und Rückgaben in derselben Prozessübersicht." msgstr "Departures and returns in the same process overview." -#: workflows/templates/workflows/requests_dashboard.html:953 +#: workflows/templates/workflows/requests_dashboard.html:88 msgid "Gesamtbestand" msgstr "Total records" -#: workflows/templates/workflows/requests_dashboard.html:958 +#: workflows/templates/workflows/requests_dashboard.html:93 msgid "Alle Vorgänge, durchsuchbar und mit Dokumenten verknüpft." msgstr "All requests, searchable and linked with documents." -#: workflows/templates/workflows/requests_dashboard.html:963 +#: workflows/templates/workflows/requests_dashboard.html:98 msgid "Aktivität 14 Tage" msgstr "Activity 14 Days" -#: workflows/templates/workflows/requests_dashboard.html:968 +#: workflows/templates/workflows/requests_dashboard.html:103 msgid "Zeitraum des visuellen Aktivitätsverlaufs in dieser Übersicht." msgstr "Time span of the visual activity timeline in this overview." -#: workflows/templates/workflows/requests_dashboard.html:983 +#: workflows/templates/workflows/requests_dashboard.html:118 msgid "Vorgänge" msgstr "Requests" -#: workflows/templates/workflows/requests_dashboard.html:984 +#: workflows/templates/workflows/requests_dashboard.html:119 msgid "" "Dokumente, Status und Einweisungsaktionen in einer verdichteten " "Arbeitsansicht." msgstr "Documents, status, and introduction actions in a condensed work view." -#: workflows/templates/workflows/requests_dashboard.html:986 +#: workflows/templates/workflows/requests_dashboard.html:121 #, python-format msgid "%(count)s Einträge sichtbar" msgstr "%(count)s entries visible" -#: workflows/templates/workflows/requests_dashboard.html:993 +#: workflows/templates/workflows/requests_dashboard.html:128 msgid "Nach Name oder E-Mail suchen" msgstr "Search by name or email" -#: workflows/templates/workflows/requests_dashboard.html:998 -msgid "Zurücksetzen" -msgstr "Reset" - -#: workflows/templates/workflows/requests_dashboard.html:1002 +#: workflows/templates/workflows/requests_dashboard.html:137 msgid "" "Datensätze können direkt in der Tabelle gefiltert, geöffnet, geprüft oder " "gelöscht werden." msgstr "" "Records can be filtered, opened, checked, or deleted directly in the table." -#: workflows/templates/workflows/requests_dashboard.html:1009 -#: workflows/templates/workflows/welcome_emails.html:114 +#: workflows/templates/workflows/requests_dashboard.html:144 +#: workflows/templates/workflows/welcome_emails.html:78 msgid "ausgewählt" msgstr "selected" -#: workflows/templates/workflows/requests_dashboard.html:1010 +#: workflows/templates/workflows/requests_dashboard.html:145 msgid "Auswahl löschen" msgstr "Delete selection" -#: workflows/templates/workflows/requests_dashboard.html:1022 -msgid "Typ" -msgstr "Type" - -#: workflows/templates/workflows/requests_dashboard.html:1023 +#: workflows/templates/workflows/requests_dashboard.html:158 msgid "Person" msgstr "Person" -#: workflows/templates/workflows/requests_dashboard.html:1024 +#: workflows/templates/workflows/requests_dashboard.html:159 msgid "E-Mail" msgstr "Email" -#: workflows/templates/workflows/requests_dashboard.html:1025 +#: workflows/templates/workflows/requests_dashboard.html:160 msgid "Erstellt" msgstr "Created" -#: workflows/templates/workflows/requests_dashboard.html:1026 +#: workflows/templates/workflows/requests_dashboard.html:161 msgid "Dokument" msgstr "Document" -#: workflows/templates/workflows/requests_dashboard.html:1027 -#: workflows/templates/workflows/requests_dashboard.html:1062 +#: workflows/templates/workflows/requests_dashboard.html:162 +#: workflows/templates/workflows/requests_dashboard.html:201 msgid "Einweisung" msgstr "Introduction" -#: workflows/templates/workflows/requests_dashboard.html:1028 -#: workflows/templates/workflows/welcome_emails.html:127 -msgid "Aktion" -msgstr "Action" - -#: workflows/templates/workflows/requests_dashboard.html:1053 -msgid "PDF öffnen" -msgstr "Open PDF" - -#: workflows/templates/workflows/requests_dashboard.html:1055 +#: workflows/templates/workflows/requests_dashboard.html:190 msgid "Noch nicht verfügbar" msgstr "Not available yet" -#: workflows/templates/workflows/requests_dashboard.html:1067 +#: workflows/templates/workflows/requests_dashboard.html:206 msgid "Einweisung öffnen" msgstr "Open introduction" -#: workflows/templates/workflows/requests_dashboard.html:1074 +#: workflows/templates/workflows/requests_dashboard.html:213 msgid "Standard-Einweisungs-PDF" msgstr "Standard introduction PDF" -#: workflows/templates/workflows/requests_dashboard.html:1079 +#: workflows/templates/workflows/requests_dashboard.html:218 msgid "Neu erzeugen" msgstr "Regenerate" -#: workflows/templates/workflows/requests_dashboard.html:1081 +#: workflows/templates/workflows/requests_dashboard.html:220 msgid "Standard-PDF öffnen" msgstr "Open standard PDF" -#: workflows/templates/workflows/requests_dashboard.html:1085 +#: workflows/templates/workflows/requests_dashboard.html:224 msgid "PDF erzeugen" msgstr "Generate PDF" -#: workflows/templates/workflows/requests_dashboard.html:1092 +#: workflows/templates/workflows/requests_dashboard.html:231 msgid "Status:" msgstr "Status:" -#: workflows/templates/workflows/requests_dashboard.html:1096 +#: workflows/templates/workflows/requests_dashboard.html:235 msgid "Nicht relevant" msgstr "Not relevant" -#: workflows/templates/workflows/requests_dashboard.html:1109 +#: workflows/templates/workflows/requests_dashboard.html:242 +msgid "Erneut versuchen" +msgstr "" + +#: workflows/templates/workflows/requests_dashboard.html:254 msgid "Noch keine Vorgänge vorhanden." msgstr "No requests available yet." -#: workflows/templates/workflows/welcome_emails.html:50 +#: workflows/templates/workflows/welcome_emails.html:14 msgid "Geplante Welcome E-Mails" msgstr "Scheduled welcome emails" -#: workflows/templates/workflows/welcome_emails.html:51 +#: workflows/templates/workflows/welcome_emails.html:15 msgid "" "Welcome-Mails konfigurieren und geplante Mails steuern (sofort senden, " "pausieren, fortsetzen, abbrechen)." @@ -1309,104 +1453,100 @@ msgstr "" "Configure welcome emails and control scheduled messages (send now, pause, " "resume, cancel)." -#: workflows/templates/workflows/welcome_emails.html:63 +#: workflows/templates/workflows/welcome_emails.html:27 msgid "Verzögerung in Tagen" msgstr "Delay in days" -#: workflows/templates/workflows/welcome_emails.html:67 +#: workflows/templates/workflows/welcome_emails.html:31 msgid "Absenderadresse (optional)" msgstr "Sender address (optional)" -#: workflows/templates/workflows/welcome_emails.html:68 +#: workflows/templates/workflows/welcome_emails.html:32 msgid "Leer = System-Absender" msgstr "Empty = system sender" -#: workflows/templates/workflows/welcome_emails.html:88 +#: workflows/templates/workflows/welcome_emails.html:52 msgid "Onboarding-PDF anhängen" msgstr "Attach onboarding PDF" -#: workflows/templates/workflows/welcome_emails.html:91 +#: workflows/templates/workflows/welcome_emails.html:55 msgid "Verfügbare Keywords:" msgstr "Available keywords:" -#: workflows/templates/workflows/welcome_emails.html:97 +#: workflows/templates/workflows/welcome_emails.html:61 msgid "Welcome-Einstellungen speichern" msgstr "Save welcome settings" -#: workflows/templates/workflows/welcome_emails.html:108 -#: workflows/templates/workflows/welcome_emails.html:163 -msgid "Pausieren" -msgstr "Pause" - -#: workflows/templates/workflows/welcome_emails.html:109 -#: workflows/templates/workflows/welcome_emails.html:157 -msgid "Sofort senden" -msgstr "Send now" - -#: workflows/templates/workflows/welcome_emails.html:113 -msgid "Bulk ausführen" -msgstr "Run bulk action" - -#: workflows/templates/workflows/welcome_emails.html:120 -msgid "Auswahl" -msgstr "Select" - -#: workflows/templates/workflows/welcome_emails.html:124 -msgid "Geplant für" -msgstr "Scheduled for" - -#: workflows/templates/workflows/welcome_emails.html:126 -msgid "Gesendet am" -msgstr "Sent at" - -#: workflows/templates/workflows/welcome_emails.html:140 -msgid "Geplant" -msgstr "Scheduled" - -#: workflows/templates/workflows/welcome_emails.html:142 -msgid "Pausiert" -msgstr "Paused" - -#: workflows/templates/workflows/welcome_emails.html:144 -msgid "Abgebrochen" -msgstr "Cancelled" - -#: workflows/templates/workflows/welcome_emails.html:146 -msgid "Gesendet" -msgstr "Sent" - -#: workflows/templates/workflows/welcome_emails.html:148 -msgid "Fehlgeschlagen" -msgstr "Failed" - -#: workflows/templates/workflows/welcome_emails.html:168 -msgid "Fortsetzen" -msgstr "Resume" - -#: workflows/templates/workflows/welcome_emails.html:174 -msgid "Abbrechen" -msgstr "Cancel" - -#: workflows/templates/workflows/welcome_emails.html:181 -msgid "Keine geplanten Welcome E-Mails vorhanden." -msgstr "No scheduled welcome emails available." - -#: workflows/templates/workflows/welcome_emails.html:224 +#: workflows/templates/workflows/welcome_emails.html:65 msgid "Bitte mindestens einen Welcome-Eintrag auswählen." msgstr "Please select at least one welcome entry." -#: workflows/templates/workflows/welcome_emails.html:229 +#: workflows/templates/workflows/welcome_emails.html:65 msgid "Ausgewählte Welcome-Einträge wirklich löschen?" msgstr "Delete the selected welcome entries?" -#: workflows/templates/workflows/welcome_emails.html:232 +#: workflows/templates/workflows/welcome_emails.html:65 msgid "Ausgewählte Welcome-Einträge pausieren?" msgstr "Pause the selected welcome entries?" -#: workflows/templates/workflows/welcome_emails.html:234 +#: workflows/templates/workflows/welcome_emails.html:65 msgid "Ausgewählte Welcome-Einträge sofort senden?" msgstr "Send the selected welcome entries now?" +#: workflows/templates/workflows/welcome_emails.html:72 +#: workflows/templates/workflows/welcome_emails.html:127 +msgid "Pausieren" +msgstr "Pause" + +#: workflows/templates/workflows/welcome_emails.html:73 +#: workflows/templates/workflows/welcome_emails.html:121 +msgid "Sofort senden" +msgstr "Send now" + +#: workflows/templates/workflows/welcome_emails.html:77 +msgid "Bulk ausführen" +msgstr "Run bulk action" + +#: workflows/templates/workflows/welcome_emails.html:84 +msgid "Auswahl" +msgstr "Select" + +#: workflows/templates/workflows/welcome_emails.html:88 +msgid "Geplant für" +msgstr "Scheduled for" + +#: workflows/templates/workflows/welcome_emails.html:90 +msgid "Gesendet am" +msgstr "Sent at" + +#: workflows/templates/workflows/welcome_emails.html:104 +msgid "Geplant" +msgstr "Scheduled" + +#: workflows/templates/workflows/welcome_emails.html:106 +msgid "Pausiert" +msgstr "Paused" + +#: workflows/templates/workflows/welcome_emails.html:108 +msgid "Abgebrochen" +msgstr "Cancelled" + +#: workflows/templates/workflows/welcome_emails.html:110 +msgid "Gesendet" +msgstr "Sent" + +#: workflows/templates/workflows/welcome_emails.html:132 +msgid "Fortsetzen" +msgstr "Resume" + +#: workflows/templates/workflows/welcome_emails.html:138 +msgid "Abbrechen" +msgstr "Cancel" + +#: workflows/templates/workflows/welcome_emails.html:145 +msgid "Keine geplanten Welcome E-Mails vorhanden." +msgstr "No scheduled welcome emails available." + #: workflows/views.py:76 msgid "Stammdaten" msgstr "Master data" @@ -1439,47 +1579,50 @@ msgstr "Finish" msgid "Notizen und Freigabe" msgstr "Notes and approval" -#: workflows/views.py:245 +#: workflows/views.py:308 msgid "Sie haben keine Berechtigung für diese Aktion." msgstr "You do not have permission for this action." -#: workflows/views.py:254 +#: workflows/views.py:317 msgid "Keine Einträge ausgewählt." msgstr "No entries selected." -#: workflows/views.py:283 +#: workflows/views.py:353 #, python-format msgid "%(count)s Eintrag/Einträge gelöscht." msgstr "%(count)s entry/entries deleted." -#: workflows/views.py:285 +#: workflows/views.py:355 #, python-format msgid "%(count)s Auswahl(en) konnten nicht verarbeitet werden." msgstr "%(count)s selection(s) could not be processed." -#: workflows/views.py:287 +#: workflows/views.py:357 msgid "Keine passenden Einträge gefunden." msgstr "No matching entries found." -#: workflows/views.py:446 +#: workflows/views.py:521 msgid "Einweisungs- und Übergabeprotokoll wurde erzeugt." msgstr "Introduction and handover protocol was generated." -#: workflows/views.py:463 +#: workflows/views.py:539 msgid "Einweisungsprotokoll aus Live-Status wurde erzeugt." msgstr "Introduction protocol from live status was generated." -#: workflows/views.py:492 +#: workflows/views.py:569 msgid "Einweisung wurde zurückgesetzt." msgstr "Introduction was reset." -#: workflows/views.py:498 +#: workflows/views.py:583 msgid "Einweisung wurde als abgeschlossen gespeichert." msgstr "Introduction was saved as completed." -#: workflows/views.py:503 +#: workflows/views.py:596 msgid "Einweisung wurde als Entwurf gespeichert." msgstr "Introduction was saved as draft." +#~ msgid "Back to Home" +#~ msgstr "Back to home" + #~ msgid "Dokumentation, Architektur und Runbook." #~ msgstr "Documentation, architecture, and runbook." diff --git a/backend/workflows/migrations/0033_offboardingrequest_last_error_and_more.py b/backend/workflows/migrations/0033_offboardingrequest_last_error_and_more.py new file mode 100644 index 0000000..d75f3bc --- /dev/null +++ b/backend/workflows/migrations/0033_offboardingrequest_last_error_and_more.py @@ -0,0 +1,33 @@ +# Generated by Django 5.1.5 on 2026-03-25 19:31 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('workflows', '0032_adminauditlog'), + ] + + operations = [ + migrations.AddField( + model_name='offboardingrequest', + name='last_error', + field=models.TextField(blank=True), + ), + migrations.AddField( + model_name='offboardingrequest', + name='processing_status', + field=models.CharField(choices=[('submitted', 'Eingereicht'), ('processing', 'In Bearbeitung'), ('completed', 'Abgeschlossen'), ('failed', 'Fehlgeschlagen')], default='submitted', max_length=20), + ), + migrations.AddField( + model_name='onboardingrequest', + name='last_error', + field=models.TextField(blank=True), + ), + migrations.AddField( + model_name='onboardingrequest', + name='processing_status', + field=models.CharField(choices=[('submitted', 'Eingereicht'), ('processing', 'In Bearbeitung'), ('completed', 'Abgeschlossen'), ('failed', 'Fehlgeschlagen')], default='submitted', max_length=20), + ), + ] diff --git a/backend/workflows/models.py b/backend/workflows/models.py index 66fc850..2d01754 100644 --- a/backend/workflows/models.py +++ b/backend/workflows/models.py @@ -1,6 +1,7 @@ from django.conf import settings from django.db import models from django.utils.translation import get_language +from django.utils.translation import gettext_lazy as _ def _normalized_language_code(value: str | None) -> str: @@ -50,6 +51,13 @@ class AdminAuditLog(models.Model): class OnboardingRequest(models.Model): + STATUS_CHOICES = [ + ('submitted', _('Eingereicht')), + ('processing', _('In Bearbeitung')), + ('completed', _('Abgeschlossen')), + ('failed', _('Fehlgeschlagen')), + ] + full_name = models.CharField(max_length=255, verbose_name='Vorname und Nachname') gender = models.CharField( max_length=20, @@ -112,6 +120,8 @@ class OnboardingRequest(models.Model): generated_pdf_path = models.CharField(max_length=500, blank=True) intro_pdf_path = models.CharField(max_length=500, blank=True) + processing_status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='submitted') + last_error = models.TextField(blank=True) preferred_language = models.CharField(max_length=10, blank=True, default='de', db_default='de') created_at = models.DateTimeField(auto_now_add=True) @@ -447,6 +457,8 @@ class SystemEmailConfig(models.Model): class OffboardingRequest(models.Model): + STATUS_CHOICES = OnboardingRequest.STATUS_CHOICES + employee_profile = models.ForeignKey(EmployeeProfile, null=True, blank=True, on_delete=models.SET_NULL) full_name = models.CharField(max_length=255, verbose_name='Vorname und Nachname') work_email = models.EmailField(verbose_name='Dienstliche E-Mail-Adresse') @@ -460,6 +472,8 @@ class OffboardingRequest(models.Model): requested_by_name = models.CharField(max_length=255, blank=True, verbose_name='Name der anfordernden Person') preferred_language = models.CharField(max_length=10, blank=True, default='de', db_default='de') generated_pdf_path = models.CharField(max_length=500, blank=True) + processing_status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='submitted') + last_error = models.TextField(blank=True) created_at = models.DateTimeField(auto_now_add=True) def __str__(self) -> str: diff --git a/backend/workflows/tasks.py b/backend/workflows/tasks.py index 22358f0..06355b6 100644 --- a/backend/workflows/tasks.py +++ b/backend/workflows/tasks.py @@ -1195,159 +1195,183 @@ def _generate_offboarding_pdf(request_obj: OffboardingRequest) -> Path: @shared_task def process_onboarding_request(onboarding_request_id: int) -> None: request_obj = OnboardingRequest.objects.get(id=onboarding_request_id) - it_email, general_info_email, business_card_email, hr_works_email, key_email = _resolve_workflow_emails() - salutation = (request_obj.get_gender_display() or '').strip() - display_name = f"{salutation} {request_obj.full_name}".strip() + request_obj.processing_status = 'processing' + request_obj.last_error = '' + request_obj.save(update_fields=['processing_status', 'last_error']) + try: + it_email, general_info_email, business_card_email, hr_works_email, key_email = _resolve_workflow_emails() + salutation = (request_obj.get_gender_display() or '').strip() + display_name = f"{salutation} {request_obj.full_name}".strip() - first_name, last_name = _split_name(request_obj.full_name) - EmployeeProfile.objects.update_or_create( - work_email=request_obj.work_email, - defaults={ - 'full_name': request_obj.full_name, - 'first_name': first_name, - 'last_name': last_name, - 'department': request_obj.department, - 'job_title': request_obj.job_title, - }, - ) - - pdf_path = _generate_onboarding_pdf(request_obj) - request_obj.generated_pdf_path = str(pdf_path) - request_obj.save(update_fields=['generated_pdf_path']) - - email_context = { - 'FULL_NAME': display_name, - 'VORNAME': first_name, - 'NACHNAME': last_name, - 'DEPARTMENT': request_obj.department or '-', - 'CONTRACT_START': request_obj.contract_start, - 'EMAIL': request_obj.work_email, - 'REQUESTED_BY': request_obj.onboarded_by_email or '-', - 'BUSINESS_CARD_NAME': request_obj.business_card_name or display_name, - 'BUSINESS_CARD_TITLE': request_obj.business_card_title or '-', - 'BUSINESS_CARD_EMAIL': request_obj.business_card_email or request_obj.work_email, - 'BUSINESS_CARD_PHONE': request_obj.business_card_phone or '-', - 'PDF_LINK': settings.ONBOARDING_SHARED_PDF_LINK, - } - - _send_templated_email( - template_key='onboarding_it', - context=email_context, - to=[it_email], - attachments=[pdf_path], - language_code=request_obj.preferred_language, - ) - _send_templated_email( - template_key='onboarding_general_info', - context=email_context, - to=[general_info_email], - language_code=request_obj.preferred_language, - ) - - if request_obj.order_business_cards: - _send_templated_email( - template_key='onboarding_business_card', - context=email_context, - to=[business_card_email], - language_code=request_obj.preferred_language, + first_name, last_name = _split_name(request_obj.full_name) + EmployeeProfile.objects.update_or_create( + work_email=request_obj.work_email, + defaults={ + 'full_name': request_obj.full_name, + 'first_name': first_name, + 'last_name': last_name, + 'department': request_obj.department, + 'job_title': request_obj.job_title, + }, ) - if 'HR Works' in request_obj.needed_accesses: - _send_templated_email( - template_key='onboarding_hr_works', - context=email_context, - to=[hr_works_email], - language_code=request_obj.preferred_language, - ) + pdf_path = _generate_onboarding_pdf(request_obj) + request_obj.generated_pdf_path = str(pdf_path) + request_obj.save(update_fields=['generated_pdf_path']) - if 'Schlüssel' in request_obj.needed_devices: - _send_templated_email( - template_key='onboarding_key', - context=email_context, - to=[key_email], - language_code=request_obj.preferred_language, - ) + email_context = { + 'FULL_NAME': display_name, + 'VORNAME': first_name, + 'NACHNAME': last_name, + 'DEPARTMENT': request_obj.department or '-', + 'CONTRACT_START': request_obj.contract_start, + 'EMAIL': request_obj.work_email, + 'REQUESTED_BY': request_obj.onboarded_by_email or '-', + 'BUSINESS_CARD_NAME': request_obj.business_card_name or display_name, + 'BUSINESS_CARD_TITLE': request_obj.business_card_title or '-', + 'BUSINESS_CARD_EMAIL': request_obj.business_card_email or request_obj.work_email, + 'BUSINESS_CARD_PHONE': request_obj.business_card_phone or '-', + 'PDF_LINK': settings.ONBOARDING_SHARED_PDF_LINK, + } - if request_obj.onboarded_by_email: _send_templated_email( - template_key='onboarding_reference', + template_key='onboarding_it', context=email_context, - to=[request_obj.onboarded_by_email], + to=[it_email], attachments=[pdf_path], language_code=request_obj.preferred_language, ) + _send_templated_email( + template_key='onboarding_general_info', + context=email_context, + to=[general_info_email], + language_code=request_obj.preferred_language, + ) - _apply_notification_rules( - event_type='onboarding', - request_obj=request_obj, - context=email_context, - pdf_path=pdf_path, - ) + if request_obj.order_business_cards: + _send_templated_email( + template_key='onboarding_business_card', + context=email_context, + to=[business_card_email], + language_code=request_obj.preferred_language, + ) - _schedule_welcome_email(request_obj) + if 'HR Works' in request_obj.needed_accesses: + _send_templated_email( + template_key='onboarding_hr_works', + context=email_context, + to=[hr_works_email], + language_code=request_obj.preferred_language, + ) - upload_to_nextcloud(pdf_path, Path(pdf_path).name) + if 'Schlüssel' in request_obj.needed_devices: + _send_templated_email( + template_key='onboarding_key', + context=email_context, + to=[key_email], + language_code=request_obj.preferred_language, + ) + + if request_obj.onboarded_by_email: + _send_templated_email( + template_key='onboarding_reference', + context=email_context, + to=[request_obj.onboarded_by_email], + attachments=[pdf_path], + language_code=request_obj.preferred_language, + ) + + _apply_notification_rules( + event_type='onboarding', + request_obj=request_obj, + context=email_context, + pdf_path=pdf_path, + ) + + _schedule_welcome_email(request_obj) + + upload_to_nextcloud(pdf_path, Path(pdf_path).name) + request_obj.processing_status = 'completed' + request_obj.last_error = '' + request_obj.save(update_fields=['processing_status', 'last_error']) + except Exception as exc: + request_obj.processing_status = 'failed' + request_obj.last_error = str(exc) + request_obj.save(update_fields=['processing_status', 'last_error']) + raise @shared_task def process_offboarding_request(offboarding_request_id: int) -> None: request_obj = OffboardingRequest.objects.get(id=offboarding_request_id) - it_email, general_info_email, _, hr_works_email, _ = _resolve_workflow_emails() + request_obj.processing_status = 'processing' + request_obj.last_error = '' + request_obj.save(update_fields=['processing_status', 'last_error']) + try: + it_email, general_info_email, _, hr_works_email, _ = _resolve_workflow_emails() - pdf_path = _generate_offboarding_pdf(request_obj) - request_obj.generated_pdf_path = str(pdf_path) - request_obj.save(update_fields=['generated_pdf_path']) + pdf_path = _generate_offboarding_pdf(request_obj) + request_obj.generated_pdf_path = str(pdf_path) + request_obj.save(update_fields=['generated_pdf_path']) - email_context = { - 'FULL_NAME': request_obj.full_name, - 'DEPARTMENT': request_obj.department or '-', - 'LAST_WORKING_DAY': request_obj.last_working_day, - 'REQUESTED_BY': request_obj.requested_by_email, - 'EMAIL': request_obj.work_email, - } + email_context = { + 'FULL_NAME': request_obj.full_name, + 'DEPARTMENT': request_obj.department or '-', + 'LAST_WORKING_DAY': request_obj.last_working_day, + 'REQUESTED_BY': request_obj.requested_by_email, + 'EMAIL': request_obj.work_email, + } - _send_templated_email( - template_key='offboarding_it', - context=email_context, - to=[it_email], - attachments=[pdf_path], - language_code=request_obj.preferred_language, - ) - _send_templated_email( - template_key='offboarding_general_info', - context=email_context, - to=[general_info_email], - language_code=request_obj.preferred_language, - ) - - had_hr_works = OnboardingRequest.objects.filter( - work_email=request_obj.work_email, - needed_accesses__icontains='HR Works', - ).exists() - if had_hr_works: _send_templated_email( - template_key='offboarding_hr_works_disable', + template_key='offboarding_it', context=email_context, - to=[hr_works_email], + to=[it_email], + attachments=[pdf_path], + language_code=request_obj.preferred_language, + ) + _send_templated_email( + template_key='offboarding_general_info', + context=email_context, + to=[general_info_email], language_code=request_obj.preferred_language, ) - _send_templated_email( - template_key='offboarding_reference', - context=email_context, - to=[request_obj.requested_by_email], - attachments=[pdf_path], - language_code=request_obj.preferred_language, - ) + had_hr_works = OnboardingRequest.objects.filter( + work_email=request_obj.work_email, + needed_accesses__icontains='HR Works', + ).exists() + if had_hr_works: + _send_templated_email( + template_key='offboarding_hr_works_disable', + context=email_context, + to=[hr_works_email], + language_code=request_obj.preferred_language, + ) - _apply_notification_rules( - event_type='offboarding', - request_obj=request_obj, - context=email_context, - pdf_path=pdf_path, - ) + _send_templated_email( + template_key='offboarding_reference', + context=email_context, + to=[request_obj.requested_by_email], + attachments=[pdf_path], + language_code=request_obj.preferred_language, + ) - upload_to_nextcloud(pdf_path, Path(pdf_path).name) + _apply_notification_rules( + event_type='offboarding', + request_obj=request_obj, + context=email_context, + pdf_path=pdf_path, + ) + + upload_to_nextcloud(pdf_path, Path(pdf_path).name) + request_obj.processing_status = 'completed' + request_obj.last_error = '' + request_obj.save(update_fields=['processing_status', 'last_error']) + except Exception as exc: + request_obj.processing_status = 'failed' + request_obj.last_error = str(exc) + request_obj.save(update_fields=['processing_status', 'last_error']) + raise @shared_task diff --git a/backend/workflows/templates/workflows/developer_handbook.html b/backend/workflows/templates/workflows/developer_handbook.html index ed13668..20269da 100644 --- a/backend/workflows/templates/workflows/developer_handbook.html +++ b/backend/workflows/templates/workflows/developer_handbook.html @@ -189,6 +189,8 @@ docker compose exec -T web python manage.py run_staging_e2e_check
  • Use real PDF generation tests when changing PDF templates or intro/offboarding document logic.
  • Use the dedicated Release Checklist page as the final go/no-go runbook before shipping changes.
  • The automated bilingual smoke tests now cover DE/EN request language capture and English email-template rendering.
  • +
  • Onboarding and offboarding request objects now expose explicit processing state and last-error fields. Async tasks are responsible for transitioning submitted → processing → completed/failed.
  • +
  • The Requests Dashboard includes a retry action for failed requests. Retries reset the error text, set the request back to submitted, and enqueue the appropriate Celery task again.
  • 12) Deployment and Release Checklist

    diff --git a/backend/workflows/templates/workflows/project_wiki.html b/backend/workflows/templates/workflows/project_wiki.html index 8337897..8cbdc07 100644 --- a/backend/workflows/templates/workflows/project_wiki.html +++ b/backend/workflows/templates/workflows/project_wiki.html @@ -178,6 +178,7 @@
  • Welcome Emails: scheduled jobs, pause/resume/cancel/trigger now.
  • Audit Log: staff-only trace of important admin changes such as builder edits, settings updates, PDF generation, welcome-email operations, and request deletions. Supports filtering by action, user, and date range.
  • Requests Dashboard: search records, open PDFs, delete records (single/bulk for staff).
  • +
  • Request Status & Retry: onboarding and offboarding requests now carry explicit processing state (submitted, processing, completed, failed). Failed requests expose the last error and can be retried from the dashboard.
  • Einweisungs- und Übergabeprotokoll: staff-only PDF erzeugen, Neu erzeugen, and PDF öffnen actions directly on onboarding rows in the Requests Dashboard.
  • Einweisung durchführen: staff-only live checklist page opened from onboarding rows, with draft/completed status, notes, progress tracking, and a separate live-status PDF export.
  • Project Wiki: this documentation page.
  • diff --git a/backend/workflows/templates/workflows/requests_dashboard.html b/backend/workflows/templates/workflows/requests_dashboard.html index a46f666..9561476 100644 --- a/backend/workflows/templates/workflows/requests_dashboard.html +++ b/backend/workflows/templates/workflows/requests_dashboard.html @@ -189,6 +189,10 @@ {% else %} {% trans "Noch nicht verfügbar" %} {% endif %} +
    {{ row.status }}
    + {% if row.status_key == 'failed' and row.last_error %} +
    {{ row.last_error|truncatechars:140 }}
    + {% endif %} {% if request.user.is_staff %} @@ -232,6 +236,12 @@ {% endif %} + {% if row.status_key == 'failed' %} +
    + {% csrf_token %} + +
    + {% endif %}
    {% csrf_token %} diff --git a/backend/workflows/urls.py b/backend/workflows/urls.py index 21436ab..2d5e292 100644 --- a/backend/workflows/urls.py +++ b/backend/workflows/urls.py @@ -39,4 +39,5 @@ urlpatterns = [ path('requests/onboarding//intro-session/pdf/', views.generate_onboarding_intro_session_pdf, name='generate_onboarding_intro_session_pdf'), path('requests/onboarding//intro-pdf/generate/', views.generate_onboarding_intro_pdf, name='generate_onboarding_intro_pdf'), path('requests/delete///', views.delete_request_from_dashboard, name='delete_request_from_dashboard'), + path('requests/retry///', views.retry_request_from_dashboard, name='retry_request_from_dashboard'), ] diff --git a/backend/workflows/views.py b/backend/workflows/views.py index a9a001e..e8263d1 100644 --- a/backend/workflows/views.py +++ b/backend/workflows/views.py @@ -147,6 +147,16 @@ def _form_field_labels(form_type: str) -> dict[str, str]: return {} +def _request_status_label(status_key: str) -> str: + labels = { + 'submitted': _('Eingereicht'), + 'processing': _('In Bearbeitung'), + 'completed': _('Abgeschlossen'), + 'failed': _('Fehlgeschlagen'), + } + return labels.get(status_key, status_key) + + def _translate_choice_list(choices): return [(value, str(label)) for value, label in choices] @@ -383,7 +393,9 @@ def requests_dashboard(request): 'pdf_url': f"/media/pdfs/{Path(obj.generated_pdf_path).name}" if obj.generated_pdf_path else None, 'intro_pdf_url': f"/media/pdfs/{Path(obj.intro_pdf_path).name}" if obj.intro_pdf_path else None, 'intro_session': intro_session, - 'status': 'PDF erstellt' if obj.generated_pdf_path else 'In Bearbeitung', + 'status': _request_status_label(obj.processing_status), + 'status_key': obj.processing_status, + 'last_error': obj.last_error, } ) for obj in offboarding_items: @@ -398,7 +410,9 @@ def requests_dashboard(request): 'pdf_url': f"/media/pdfs/{Path(obj.generated_pdf_path).name}" if obj.generated_pdf_path else None, 'intro_pdf_url': None, 'intro_session': None, - 'status': 'PDF erstellt' if obj.generated_pdf_path else 'In Bearbeitung', + 'status': _request_status_label(obj.processing_status), + 'status_key': obj.processing_status, + 'last_error': obj.last_error, } ) @@ -1682,3 +1696,29 @@ def delete_request_from_dashboard(request, kind: str, request_id: int): _audit(request, 'request_deleted', target_type=kind, target_id=request_id, target_label=str(obj)) messages.success(request, f'{kind.capitalize()}-Anfrage #{request_id} wurde gelöscht.') return redirect('requests_dashboard') + + +@login_required +@user_passes_test(_is_staff) +@require_POST +def retry_request_from_dashboard(request, kind: str, request_id: int): + if kind == 'onboarding': + obj = get_object_or_404(OnboardingRequest, id=request_id) + obj.processing_status = 'submitted' + obj.last_error = '' + obj.save(update_fields=['processing_status', 'last_error']) + process_onboarding_request.delay(obj.id) + _audit(request, 'request_retried', target_type='onboarding', target_id=obj.id, target_label=obj.full_name) + elif kind == 'offboarding': + obj = get_object_or_404(OffboardingRequest, id=request_id) + obj.processing_status = 'submitted' + obj.last_error = '' + obj.save(update_fields=['processing_status', 'last_error']) + process_offboarding_request.delay(obj.id) + _audit(request, 'request_retried', target_type='offboarding', target_id=obj.id, target_label=obj.full_name) + else: + messages.error(request, f'Unbekannter Typ: {kind}') + return redirect('requests_dashboard') + + messages.success(request, f'{kind.capitalize()}-Anfrage #{request_id} wurde erneut angestoßen.') + return redirect('requests_dashboard')