snapshot: preserve state before onboarding field parity and refactor slice
This commit is contained in:
@@ -963,73 +963,112 @@ def _generate_onboarding_pdf(request_obj: OnboardingRequest) -> Path:
|
||||
phone_number = (request_obj.phone_number or '').strip()
|
||||
display_name = f"{gender} {first_name} {last_name}".strip() if gender and gender != '-' else f"{first_name} {last_name}".strip()
|
||||
|
||||
pdf_sections = build_pdf_sections('onboarding', request_obj, lang)
|
||||
pdf_section_map = {section['key']: section for section in pdf_sections if section.get('has_content')}
|
||||
pdf_field_map = {}
|
||||
for section in pdf_sections:
|
||||
for field in section.get('render_fields', []):
|
||||
pdf_field_map[field['name']] = field
|
||||
|
||||
def _field_text(name: str, fallback):
|
||||
field = pdf_field_map.get(name)
|
||||
if not field:
|
||||
return fallback
|
||||
value = field.get('display_value')
|
||||
if isinstance(value, list):
|
||||
return ' | '.join(value) if value else fallback
|
||||
return value or fallback
|
||||
|
||||
def _field_list(name: str) -> list[str]:
|
||||
field = pdf_field_map.get(name)
|
||||
if not field:
|
||||
return []
|
||||
value = field.get('display_value')
|
||||
if isinstance(value, list):
|
||||
return value
|
||||
text = str(value or '').strip()
|
||||
return [text] if text else []
|
||||
|
||||
devices_visible = _field_list('needed_devices_multi')
|
||||
groups_visible = _field_list('needed_workspace_groups_multi')
|
||||
software_visible = _field_list('needed_software_multi')
|
||||
accesses_visible = _field_list('needed_accesses_multi')
|
||||
resources_visible = _field_list('needed_resources_multi')
|
||||
group_mailboxes_visible = _field_list('group_mailboxes')
|
||||
additional_hardware_visible = _field_list('additional_hardware_multi')
|
||||
additional_software_visible = _field_list('additional_software_multi')
|
||||
additional_access_visible = _field_list('additional_access_text')
|
||||
job_title_visible = 'job_title' in pdf_field_map
|
||||
itsetup_visible = 'itsetup' in pdf_section_map
|
||||
|
||||
context = {
|
||||
'T': t,
|
||||
'PDF_LANG': lang,
|
||||
'PDF_SECTIONS': build_pdf_sections('onboarding', request_obj, lang),
|
||||
'PDF_SECTIONS': pdf_sections,
|
||||
'VORNAME': first_name,
|
||||
'NACHNAME': last_name,
|
||||
'DISPLAY_NAME': display_name or request_obj.full_name,
|
||||
'ANREDE': gender,
|
||||
'BERUFSBEZEICHNUNG': request_obj.job_title or t['not_available'],
|
||||
'ABTEILUNG': request_obj.department or t['not_available'],
|
||||
'EMAIL': request_obj.work_email or t['not_available'],
|
||||
'VERTRAGSBEGINN': request_obj.contract_start,
|
||||
'BESCHAEFTIGUNG': employment_type,
|
||||
'VERTRAGSENDE': employment_end,
|
||||
'UEBERGABEDATUM': request_obj.handover_date or t['not_available_short'],
|
||||
'ARBEITSGERAETE_TEXT': ' | '.join(devices) if devices else t['not_available'],
|
||||
'WORKSPACE_GROUPS_TEXT': ' | '.join(groups) if groups else t['not_available'],
|
||||
'SOFTWARE_TEXT': ' | '.join(software) if software else t['not_available'],
|
||||
'ZUGAENGE_TEXT': ' | '.join(accesses) if accesses else t['not_available'],
|
||||
'RESSOURCEN_TEXT': ' | '.join(resources) if resources else t['not_available'],
|
||||
'ANREDE': _field_text('gender', gender),
|
||||
'JOB_TITLE_VISIBLE': job_title_visible,
|
||||
'BERUFSBEZEICHNUNG': _field_text('job_title', t['not_available']),
|
||||
'ABTEILUNG': _field_text('department', t['not_available']),
|
||||
'EMAIL': _field_text('work_email', t['not_available']),
|
||||
'VERTRAGSBEGINN': _field_text('contract_start', request_obj.contract_start),
|
||||
'BESCHAEFTIGUNG': _field_text('employment_type', employment_type),
|
||||
'VERTRAGSENDE': _field_text('employment_end_date', employment_end),
|
||||
'UEBERGABEDATUM': _field_text('handover_date', request_obj.handover_date or t['not_available_short']),
|
||||
'ARBEITSGERAETE_TEXT': ' | '.join(devices_visible) if devices_visible else t['not_available'],
|
||||
'WORKSPACE_GROUPS_TEXT': ' | '.join(groups_visible) if groups_visible else t['not_available'],
|
||||
'SOFTWARE_TEXT': ' | '.join(software_visible) if software_visible else t['not_available'],
|
||||
'ZUGAENGE_TEXT': ' | '.join(accesses_visible) if accesses_visible else t['not_available'],
|
||||
'RESSOURCEN_TEXT': ' | '.join(resources_visible) if resources_visible else t['not_available'],
|
||||
'VISITENKARTE_BESTELLT': order_business_cards,
|
||||
'HAS_VISITENKARTE_DATEN': order_business_cards and any(
|
||||
'HAS_VISITENKARTE_DATEN': order_business_cards and ('business_card_name' in pdf_field_map or 'business_card_title' in pdf_field_map or 'business_card_email' in pdf_field_map or 'business_card_phone' in pdf_field_map) and any(
|
||||
[
|
||||
(request_obj.business_card_name or '').strip(),
|
||||
(request_obj.business_card_title or '').strip(),
|
||||
(request_obj.business_card_email or '').strip(),
|
||||
(request_obj.business_card_phone or '').strip(),
|
||||
_field_text('business_card_name', '').strip(),
|
||||
_field_text('business_card_title', '').strip(),
|
||||
_field_text('business_card_email', '').strip(),
|
||||
_field_text('business_card_phone', '').strip(),
|
||||
]
|
||||
),
|
||||
'VISITENKARTE_NAME': request_obj.business_card_name or t['not_available_short'],
|
||||
'VISITENKARTE_TITEL': request_obj.business_card_title or t['not_available_short'],
|
||||
'VISITENKARTE_EMAIL': request_obj.business_card_email or t['not_available_short'],
|
||||
'VISITENKARTE_TELEFON': request_obj.business_card_phone or t['not_available_short'],
|
||||
'GROUP_MAILBOXES': group_mailboxes or t['not_available'],
|
||||
'ADDITIONAL_HARDWARE_OTHER': additional_hardware_other or t['not_available'],
|
||||
'ADDITIONAL_HARDWARE': additional_hardware or t['not_available'],
|
||||
'ADDITIONAL_SOFTWARE': additional_software or t['not_available'],
|
||||
'ADDITIONAL_ACCESS_TEXT': additional_access_text or t['not_available'],
|
||||
'SUCCESSOR_NAME': successor_name or t['not_available'],
|
||||
'PHONE_NUMBER': phone_number or t['not_available_short'],
|
||||
'INHERIT_PHONE_NUMBER': t['yes'] if request_obj.inherit_phone_number else t['no'],
|
||||
'ADDITIONAL_NOTES': additional_notes or t['not_available'],
|
||||
'GROUP_MAILBOXES_REQUIRED': bool(request_obj.group_mailboxes_required),
|
||||
'ADDITIONAL_HARDWARE_NEEDED': bool(request_obj.additional_hardware_needed),
|
||||
'ADDITIONAL_SOFTWARE_NEEDED': bool(request_obj.additional_software_needed),
|
||||
'ADDITIONAL_ACCESS_NEEDED': bool(request_obj.additional_access_needed),
|
||||
'HAS_DEVICES': bool(devices),
|
||||
'HAS_GROUPS': bool(groups),
|
||||
'HAS_SOFTWARE': bool(software),
|
||||
'HAS_ACCESSES': bool(accesses),
|
||||
'HAS_RESOURCES': bool(resources),
|
||||
'HAS_GROUP_MAILBOXES': bool(group_mailboxes_list),
|
||||
'HAS_ADDITIONAL_HARDWARE': bool(additional_hardware_list),
|
||||
'HAS_ADDITIONAL_SOFTWARE': bool(additional_software_list),
|
||||
'HAS_ADDITIONAL_ACCESS': bool(additional_access_list),
|
||||
'HAS_ADDITIONAL_HARDWARE_OTHER': bool(additional_hardware_other),
|
||||
'HAS_SUCCESSOR_INFO': bool(successor_name) or bool(request_obj.inherit_phone_number) or bool(phone_number),
|
||||
'HAS_ADDITIONAL_NOTES': bool(additional_notes),
|
||||
'GROUP_MAILBOXES_LIST': _chunk_list(group_mailboxes_list),
|
||||
'ADDITIONAL_HARDWARE_LIST': _chunk_list(additional_hardware_list),
|
||||
'ADDITIONAL_SOFTWARE_LIST': _chunk_list(additional_software_list),
|
||||
'ADDITIONAL_ACCESS_LIST': _chunk_list(additional_access_list),
|
||||
'ZUGAENGE_LIST': _chunk_list(groups),
|
||||
'ARBEITSGERÄTE_LIST': _chunk_list(devices),
|
||||
'SOFTWARE_LIST': _chunk_list(software),
|
||||
'ACCOUNT_LIST': _chunk_list(accesses),
|
||||
'STANDARD_RESSOURCEN': _chunk_list(resources),
|
||||
'VISITENKARTE_NAME': _field_text('business_card_name', t['not_available_short']),
|
||||
'VISITENKARTE_TITEL': _field_text('business_card_title', t['not_available_short']),
|
||||
'VISITENKARTE_EMAIL': _field_text('business_card_email', t['not_available_short']),
|
||||
'VISITENKARTE_TELEFON': _field_text('business_card_phone', t['not_available_short']),
|
||||
'GROUP_MAILBOXES': _field_text('group_mailboxes', group_mailboxes or t['not_available']),
|
||||
'ADDITIONAL_HARDWARE_OTHER': _field_text('additional_hardware_other', additional_hardware_other or t['not_available']),
|
||||
'ADDITIONAL_HARDWARE': _field_text('additional_hardware_other', additional_hardware or t['not_available']),
|
||||
'ADDITIONAL_SOFTWARE': _field_text('additional_software', additional_software or t['not_available']),
|
||||
'ADDITIONAL_ACCESS_TEXT': _field_text('additional_access_text', additional_access_text or t['not_available']),
|
||||
'SUCCESSOR_NAME': _field_text('successor_name', successor_name or t['not_available']),
|
||||
'PHONE_NUMBER': _field_text('phone_number_choice', phone_number or t['not_available_short']),
|
||||
'INHERIT_PHONE_NUMBER': _field_text('inherit_phone_number_choice', t['yes'] if request_obj.inherit_phone_number else t['no']),
|
||||
'ADDITIONAL_NOTES': _field_text('additional_notes', additional_notes or t['not_available']),
|
||||
'GROUP_MAILBOXES_REQUIRED': 'group_mailboxes_required_choice' in pdf_field_map and bool(group_mailboxes_visible),
|
||||
'ADDITIONAL_HARDWARE_NEEDED': 'additional_hardware_needed_choice' in pdf_field_map and bool(additional_hardware_visible),
|
||||
'ADDITIONAL_SOFTWARE_NEEDED': 'additional_software_needed_choice' in pdf_field_map and bool(additional_software_visible),
|
||||
'ADDITIONAL_ACCESS_NEEDED': 'additional_access_needed_choice' in pdf_field_map and bool(additional_access_visible),
|
||||
'HAS_DEVICES': itsetup_visible and bool(devices_visible),
|
||||
'HAS_GROUPS': itsetup_visible and bool(groups_visible),
|
||||
'HAS_SOFTWARE': itsetup_visible and bool(software_visible),
|
||||
'HAS_ACCESSES': itsetup_visible and bool(accesses_visible),
|
||||
'HAS_RESOURCES': itsetup_visible and bool(resources_visible),
|
||||
'HAS_GROUP_MAILBOXES': bool(group_mailboxes_visible),
|
||||
'HAS_ADDITIONAL_HARDWARE': bool(additional_hardware_visible),
|
||||
'HAS_ADDITIONAL_SOFTWARE': bool(additional_software_visible),
|
||||
'HAS_ADDITIONAL_ACCESS': bool(additional_access_visible),
|
||||
'HAS_ADDITIONAL_HARDWARE_OTHER': bool(_field_text('additional_hardware_other', '').strip()),
|
||||
'HAS_SUCCESSOR_INFO': bool(_field_text('successor_name', '').strip()) or 'inherit_phone_number_choice' in pdf_field_map or bool(_field_text('phone_number_choice', '').strip()),
|
||||
'HAS_ADDITIONAL_NOTES': bool(_field_text('additional_notes', '').strip()),
|
||||
'GROUP_MAILBOXES_LIST': _chunk_list(group_mailboxes_visible),
|
||||
'ADDITIONAL_HARDWARE_LIST': _chunk_list(additional_hardware_visible),
|
||||
'ADDITIONAL_SOFTWARE_LIST': _chunk_list(additional_software_visible),
|
||||
'ADDITIONAL_ACCESS_LIST': _chunk_list(additional_access_visible),
|
||||
'ZUGAENGE_LIST': _chunk_list(groups_visible),
|
||||
'ARBEITSGERÄTE_LIST': _chunk_list(devices_visible),
|
||||
'SOFTWARE_LIST': _chunk_list(software_visible),
|
||||
'ACCOUNT_LIST': _chunk_list(accesses_visible),
|
||||
'STANDARD_RESSOURCEN': _chunk_list(resources_visible),
|
||||
'UNTERSCHRIFT': signature_src,
|
||||
'UNTERSCHRIFT_HINWEIS': signature_note,
|
||||
'REQUESTED_BY_NAME': requester_name,
|
||||
|
||||
Reference in New Issue
Block a user