snapshot: preserve branding foundation and platform owner split
This commit is contained in:
@@ -7,8 +7,8 @@ from django.utils import timezone
|
||||
from django.utils.translation import get_language, gettext as _, gettext_lazy
|
||||
|
||||
from .form_builder import apply_form_field_config
|
||||
from .models import EmployeeProfile, FormOption, OffboardingRequest, OnboardingRequest, WorkflowConfig
|
||||
from .roles import ROLE_ADMIN, ROLE_GROUP_NAMES, ROLE_IT_STAFF, ROLE_LABELS, ROLE_STAFF, ROLE_SUPER_ADMIN, assign_user_role
|
||||
from .models import EmployeeProfile, FormOption, OffboardingRequest, OnboardingRequest, PortalBranding, WorkflowConfig
|
||||
from .roles import ROLE_ADMIN, ROLE_GROUP_NAMES, ROLE_IT_STAFF, ROLE_LABELS, ROLE_PLATFORM_OWNER, ROLE_STAFF, ROLE_SUPER_ADMIN, assign_user_role
|
||||
|
||||
|
||||
YES_NO_CHOICES = [('', '--'), ('ja', 'Ja'), ('nein', 'Nein')]
|
||||
@@ -129,12 +129,13 @@ class UserManagementCreateForm(forms.Form):
|
||||
email = forms.EmailField(label=_('E-Mail-Adresse'))
|
||||
role_key = forms.ChoiceField(label=_('Rolle'))
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
def __init__(self, *args, include_product_owner: bool = False, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.fields['role_key'].choices = [
|
||||
(role_key, str(ROLE_LABELS[role_key]))
|
||||
for role_key in (ROLE_SUPER_ADMIN, ROLE_ADMIN, ROLE_IT_STAFF, ROLE_STAFF)
|
||||
]
|
||||
self.include_product_owner = include_product_owner
|
||||
role_order = [ROLE_SUPER_ADMIN, ROLE_ADMIN, ROLE_IT_STAFF, ROLE_STAFF]
|
||||
if include_product_owner:
|
||||
role_order = [ROLE_PLATFORM_OWNER] + role_order
|
||||
self.fields['role_key'].choices = [(role_key, str(ROLE_LABELS[role_key])) for role_key in role_order]
|
||||
|
||||
def clean_username(self):
|
||||
username = (self.cleaned_data.get('username') or '').strip()
|
||||
@@ -150,6 +151,8 @@ class UserManagementCreateForm(forms.Form):
|
||||
role_key = (self.cleaned_data.get('role_key') or '').strip()
|
||||
if role_key not in ROLE_GROUP_NAMES:
|
||||
raise forms.ValidationError(_('Ungültige Rolle.'))
|
||||
if role_key == ROLE_PLATFORM_OWNER and not self.include_product_owner:
|
||||
raise forms.ValidationError(_('Nur Platform Owner dürfen diese Rolle vergeben.'))
|
||||
return role_key
|
||||
|
||||
def save(self):
|
||||
@@ -166,6 +169,53 @@ class UserManagementCreateForm(forms.Form):
|
||||
return user
|
||||
|
||||
|
||||
class PortalBrandingForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = PortalBranding
|
||||
fields = [
|
||||
'portal_title',
|
||||
'company_name',
|
||||
'support_email',
|
||||
'default_language',
|
||||
'logo_image',
|
||||
'pdf_letterhead',
|
||||
'primary_color',
|
||||
'secondary_color',
|
||||
]
|
||||
labels = {
|
||||
'portal_title': gettext_lazy('Portal-Titel'),
|
||||
'company_name': gettext_lazy('Firmenname'),
|
||||
'support_email': gettext_lazy('Support-E-Mail'),
|
||||
'default_language': gettext_lazy('Standardsprache'),
|
||||
'logo_image': gettext_lazy('Logo'),
|
||||
'pdf_letterhead': gettext_lazy('PDF-Briefkopf'),
|
||||
'primary_color': gettext_lazy('Primärfarbe'),
|
||||
'secondary_color': gettext_lazy('Sekundärfarbe'),
|
||||
}
|
||||
widgets = {
|
||||
'primary_color': forms.TextInput(attrs={'type': 'color'}),
|
||||
'secondary_color': forms.TextInput(attrs={'type': 'color'}),
|
||||
'logo_image': forms.ClearableFileInput(attrs={'accept': '.svg,.png,.jpg,.jpeg,.webp'}),
|
||||
'pdf_letterhead': forms.ClearableFileInput(attrs={'accept': '.pdf'}),
|
||||
}
|
||||
|
||||
def clean_logo_image(self):
|
||||
logo = self.cleaned_data.get('logo_image')
|
||||
if not logo:
|
||||
return logo
|
||||
if getattr(logo, 'size', 0) > 5 * 1024 * 1024:
|
||||
raise forms.ValidationError(_('Das Logo darf maximal 5 MB groß sein.'))
|
||||
return logo
|
||||
|
||||
def clean_pdf_letterhead(self):
|
||||
letterhead = self.cleaned_data.get('pdf_letterhead')
|
||||
if not letterhead:
|
||||
return letterhead
|
||||
if getattr(letterhead, 'size', 0) > 10 * 1024 * 1024:
|
||||
raise forms.ValidationError(_('Der PDF-Briefkopf darf maximal 10 MB groß sein.'))
|
||||
return letterhead
|
||||
|
||||
|
||||
class OnboardingRequestForm(forms.ModelForm):
|
||||
first_name = forms.CharField(label='Vorname', required=False)
|
||||
last_name = forms.CharField(label='Nachname', required=False)
|
||||
|
||||
Reference in New Issue
Block a user