from django.utils.translation import gettext as _ def build_branding_sections(form, branding): sections = [ { 'key': 'identity', 'title': _('Identität'), 'subtitle': _('Titel, Firmenname und zentrale Spracheinstellungen.'), 'fields': ['portal_title', 'company_name', 'company_domain', 'default_language', 'login_subtitle'], 'field_full': {'login_subtitle'}, 'hint_map': { 'company_domain': _('Wird für E-Mail-Vorschläge und Domain-bezogene Standardtexte verwendet, z. B. workdock.de.'), }, }, { 'key': 'appearance', 'title': _('Farben & Erscheinungsbild'), 'subtitle': _('Zentrale visuelle Markenwerte und Browser-Icon.'), 'fields': ['primary_color', 'secondary_color', 'logo_image', 'favicon_image'], 'field_full': set(), 'hint_map': { 'logo_image': _('Erlaubte Formate: SVG, PNG, JPG, JPEG, WEBP. Maximal 5 MB.'), 'favicon_image': _('Erlaubte Formate: ICO, PNG, SVG, WEBP. Maximal 2 MB.'), }, }, { 'key': 'communication', 'title': _('Kommunikation'), 'subtitle': _('Absender, Support und PDF-Branding für ausgehende Kommunikation.'), 'fields': ['support_email', 'sender_display_name', 'pdf_letterhead'], 'field_full': {'pdf_letterhead'}, 'hint_map': { 'sender_display_name': _('Wird für ausgehende System-E-Mails als Anzeigename verwendet.'), 'pdf_letterhead': _('Erlaubtes Format: PDF. Maximal 10 MB.'), }, }, { 'key': 'legal', 'title': _('Footer & Rechtliches'), 'subtitle': _('Gemeinsame Footer-Texte und rechtliche Hinweise für die Shell.'), 'fields': ['footer_text', 'legal_notice', 'footer_text_en', 'legal_notice_en'], 'field_full': {'legal_notice', 'legal_notice_en'}, 'hint_map': {}, }, ] for section in sections: rows = [] for field_name in section['fields']: field = form[field_name] value = getattr(branding, field_name, '') or '' is_file = bool(getattr(field.field.widget, 'input_type', '') == 'file') rows.append( { 'name': field_name, 'bound_field': field, 'label': field.label, 'value': value, 'is_file': is_file, 'is_full': field_name in section.get('field_full', set()), 'hint': section.get('hint_map', {}).get(field_name, ''), } ) section['rows'] = rows return sections def build_company_config_sections(form, company_config): sections = [ { 'key': 'profile', 'title': _('Firmenprofil'), 'subtitle': _('Rechtlicher Name und zentrale Stammdaten der Firma.'), 'fields': ['legal_company_name', 'phone_number', 'website_url', 'country'], }, { 'key': 'address', 'title': _('Adresse & Register'), 'subtitle': _('Anschrift sowie optionale Register- und Steuerangaben.'), 'fields': ['street_address', 'postal_code', 'city', 'registration_number', 'vat_id'], }, { 'key': 'contacts', 'title': _('Kontaktpunkte'), 'subtitle': _('Zentrale Ansprechpartner für HR, IT und Operations.'), 'fields': ['hr_contact_email', 'it_contact_email', 'operations_contact_email'], }, { 'key': 'public', 'title': _('Recht & Öffentlichkeit'), 'subtitle': _('Öffentliche Links für Website, Impressum und Datenschutz.'), 'fields': ['imprint_url', 'privacy_url'], 'hint': _('Diese Links können später im Portal-Footer oder in öffentlichen Seiten verwendet werden.'), }, ] for section in sections: rows = [] for field_name in section['fields']: field = form[field_name] rows.append( { 'name': field_name, 'bound_field': field, 'label': field.label, 'value': getattr(company_config, field_name, '') or '', } ) section['rows'] = rows return sections