snapshot: preserve bilingual core UI and gettext workflow state

This commit is contained in:
Md Bayazid Bostame
2026-03-24 11:27:49 +01:00
parent 396bb058ad
commit 0f285aa2cf
13 changed files with 650 additions and 156 deletions

View File

@@ -15,6 +15,7 @@ from django.http import JsonResponse
from django.views.decorators.http import require_POST
from django.views.decorators.csrf import ensure_csrf_cookie
from django.utils import timezone
from django.utils.translation import gettext as _, gettext_lazy
from .forms import OffboardingRequestForm, OnboardingRequestForm
from .form_builder import (
@@ -71,10 +72,10 @@ ONBOARDING_CHECKBOX_LISTS = {
}
ONBOARDING_SECTION_ORDER = ['stammdaten', 'vertrag', 'itsetup', 'abschluss']
ONBOARDING_SECTION_META = {
'stammdaten': {'title': 'Stammdaten', 'subtitle': 'Person, Rolle, Abteilung'},
'vertrag': {'title': 'Vertrag', 'subtitle': 'Beschäftigung und Termine'},
'itsetup': {'title': 'IT-Setup', 'subtitle': 'Geräte, Software und Zugänge'},
'abschluss': {'title': 'Abschluss', 'subtitle': 'Notizen und Freigabe'},
'stammdaten': {'title': gettext_lazy('Stammdaten'), 'subtitle': gettext_lazy('Person, Rolle, Abteilung')},
'vertrag': {'title': gettext_lazy('Vertrag'), 'subtitle': gettext_lazy('Beschäftigung und Termine')},
'itsetup': {'title': gettext_lazy('IT-Setup'), 'subtitle': gettext_lazy('Geräte, Software und Zugänge')},
'abschluss': {'title': gettext_lazy('Abschluss'), 'subtitle': gettext_lazy('Notizen und Freigabe')},
}
@@ -218,7 +219,7 @@ def project_wiki_page(request):
def requests_dashboard(request):
if request.method == 'POST':
if not request.user.is_staff:
messages.error(request, 'Sie haben keine Berechtigung für diese Aktion.')
messages.error(request, _('Sie haben keine Berechtigung für diese Aktion.'))
return redirect('requests_dashboard')
selected = request.POST.getlist('selected_requests')
@@ -227,7 +228,7 @@ def requests_dashboard(request):
selected = [single_delete]
if not selected:
messages.warning(request, 'Keine Einträge ausgewählt.')
messages.warning(request, _('Keine Einträge ausgewählt.'))
return redirect('requests_dashboard')
deleted_count = 0
@@ -256,11 +257,11 @@ def requests_dashboard(request):
deleted_count += 1
if deleted_count:
messages.success(request, f'{deleted_count} Eintrag/Einträge gelöscht.')
messages.success(request, _('%(count)s Eintrag/Einträge gelöscht.') % {'count': deleted_count})
if invalid_count:
messages.warning(request, f'{invalid_count} Auswahl(en) konnten nicht verarbeitet werden.')
messages.warning(request, _('%(count)s Auswahl(en) konnten nicht verarbeitet werden.') % {'count': invalid_count})
if not deleted_count and not invalid_count:
messages.info(request, 'Keine passenden Einträge gefunden.')
messages.info(request, _('Keine passenden Einträge gefunden.'))
return redirect('requests_dashboard')
search_query = request.GET.get('q', '').strip()
@@ -418,7 +419,7 @@ def generate_onboarding_intro_pdf(request, request_id: int):
pdf_path = _generate_onboarding_intro_pdf(obj)
obj.intro_pdf_path = str(pdf_path)
obj.save(update_fields=['intro_pdf_path'])
messages.success(request, 'Einweisungs- und Übergabeprotokoll wurde erzeugt.')
messages.success(request, _('Einweisungs- und Übergabeprotokoll wurde erzeugt.'))
return redirect('requests_dashboard')
@@ -431,7 +432,7 @@ def generate_onboarding_intro_session_pdf(request, request_id: int):
pdf_path = _generate_onboarding_intro_session_pdf(session, admin_signature_name=_display_user_name(request.user))
session.exported_pdf_path = str(pdf_path)
session.save(update_fields=['exported_pdf_path'])
messages.success(request, 'Einweisungsprotokoll aus Live-Status wurde erzeugt.')
messages.success(request, _('Einweisungsprotokoll aus Live-Status wurde erzeugt.'))
return redirect('onboarding_intro_session_page', request_id=request_id)
@@ -460,18 +461,18 @@ def onboarding_intro_session_page(request, request_id: int):
session.completed_by_name = ''
session.exported_pdf_path = ''
session.save(update_fields=['checklist_state', 'notes', 'status', 'completed_at', 'completed_by_name', 'exported_pdf_path'])
messages.success(request, 'Einweisung wurde zurückgesetzt.')
messages.success(request, _('Einweisung wurde zurückgesetzt.'))
return redirect('onboarding_intro_session_page', request_id=request_id)
if action == 'complete':
session.status = 'completed'
session.completed_at = timezone.now()
session.completed_by_name = _display_user_name(request.user)
messages.success(request, 'Einweisung wurde als abgeschlossen gespeichert.')
messages.success(request, _('Einweisung wurde als abgeschlossen gespeichert.'))
else:
session.status = 'draft'
session.completed_at = None
session.completed_by_name = ''
messages.success(request, 'Einweisung wurde als Entwurf gespeichert.')
messages.success(request, _('Einweisung wurde als Entwurf gespeichert.'))
session.save()
return redirect('onboarding_intro_session_page', request_id=request_id)