118 lines
4.3 KiB
Python
118 lines
4.3 KiB
Python
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
from django.conf import settings
|
|
from django.templatetags.static import static
|
|
|
|
from .models import PortalBranding
|
|
|
|
|
|
def get_portal_branding() -> PortalBranding:
|
|
branding, _ = PortalBranding.objects.get_or_create(
|
|
name='Default',
|
|
defaults={
|
|
'portal_title': 'TUBCO Onboarding & Offboarding Portal',
|
|
'company_name': 'TUBCO',
|
|
'company_domain': 'tub.co',
|
|
'support_email': 'info@tub.co',
|
|
'default_language': 'de',
|
|
'primary_color': '#000078',
|
|
'secondary_color': '#c0002b',
|
|
},
|
|
)
|
|
return branding
|
|
|
|
|
|
def get_company_email_domain() -> str:
|
|
branding = get_portal_branding()
|
|
domain = (branding.company_domain or '').strip().lower().lstrip('@')
|
|
return domain or 'tub.co'
|
|
|
|
|
|
def get_portal_logo_url() -> str:
|
|
branding = get_portal_branding()
|
|
if branding.logo_image:
|
|
try:
|
|
return branding.logo_image.url
|
|
except ValueError:
|
|
pass
|
|
return static('workflows/img/tubco-logo.svg')
|
|
|
|
|
|
def get_portal_letterhead_path() -> Path:
|
|
branding = get_portal_branding()
|
|
if branding.pdf_letterhead:
|
|
try:
|
|
candidate = Path(branding.pdf_letterhead.path)
|
|
if candidate.exists():
|
|
return candidate
|
|
except (ValueError, NotImplementedError):
|
|
pass
|
|
return settings.PDF_TEMPLATES_DIR / 'templates.pdf'
|
|
|
|
|
|
def get_branding_context() -> dict[str, object]:
|
|
branding = get_portal_branding()
|
|
return {
|
|
'portal_branding': branding,
|
|
'portal_title': branding.portal_title,
|
|
'portal_company_name': branding.company_name,
|
|
'portal_email_domain': get_company_email_domain(),
|
|
'portal_support_email': branding.support_email,
|
|
'portal_default_language': branding.default_language,
|
|
'portal_primary_color': branding.primary_color,
|
|
'portal_secondary_color': branding.secondary_color,
|
|
'portal_logo_url': get_portal_logo_url(),
|
|
'portal_has_custom_logo': bool(branding.logo_image),
|
|
'portal_has_custom_letterhead': bool(branding.pdf_letterhead),
|
|
}
|
|
|
|
|
|
def get_branding_email_copy() -> dict[str, str]:
|
|
branding = get_portal_branding()
|
|
company_name = (branding.company_name or 'TUBCO').strip()
|
|
portal_title = (branding.portal_title or f'{company_name} Portal').strip()
|
|
return {
|
|
'company_name': company_name,
|
|
'company_domain': get_company_email_domain(),
|
|
'portal_title': portal_title,
|
|
'support_email': (branding.support_email or '').strip(),
|
|
}
|
|
|
|
|
|
def get_default_notification_templates() -> dict[str, dict[str, str]]:
|
|
from copy import deepcopy
|
|
|
|
from .tasks import DEFAULT_NOTIFICATION_TEMPLATES
|
|
|
|
templates = deepcopy(DEFAULT_NOTIFICATION_TEMPLATES)
|
|
branding_copy = get_branding_email_copy()
|
|
company_name = branding_copy['company_name']
|
|
support_email = branding_copy['support_email'] or f"it@{branding_copy['company_domain']}"
|
|
welcome = templates.get('onboarding_welcome')
|
|
if welcome:
|
|
welcome['subject'] = f'Willkommen bei {company_name}, {{ VORNAME }}'
|
|
welcome['subject_en'] = f'Welcome to {company_name}, {{ VORNAME }}'
|
|
welcome['body'] = (
|
|
'Hallo {{ FULL_NAME }},\n\n'
|
|
f'herzlich willkommen bei {company_name}.\n'
|
|
'Wir freuen uns sehr, dass du ab dem {{ CONTRACT_START }} unser Team in der Abteilung {{ DEPARTMENT }} verstärkst.\n\n'
|
|
'Deine dienstliche E-Mail-Adresse lautet: {{ EMAIL }}.\n'
|
|
'Im Anhang findest du deine Onboarding-Unterlagen als PDF.\n\n'
|
|
f'Wenn du Fragen hast, melde dich gerne jederzeit unter {support_email}.\n\n'
|
|
'Viele Grüße\n'
|
|
f'{company_name} IT'
|
|
)
|
|
welcome['body_en'] = (
|
|
'Hello {{ FULL_NAME }},\n\n'
|
|
f'welcome to {company_name}.\n'
|
|
'We are very happy that you will join our {{ DEPARTMENT }} team starting on {{ CONTRACT_START }}.\n\n'
|
|
'Your work email address is: {{ EMAIL }}.\n'
|
|
'You will find your onboarding documents attached as a PDF.\n\n'
|
|
f'If you have any questions, feel free to contact {support_email}.\n\n'
|
|
'Best regards,\n'
|
|
f'{company_name} IT'
|
|
)
|
|
return templates
|