snapshot: preserve account profile inline editing and avatar flow
This commit is contained in:
@@ -8,7 +8,7 @@ from django.utils.translation import get_language, gettext as _, gettext_lazy
|
||||
|
||||
from .branding import get_company_email_domain
|
||||
from .form_builder import apply_form_field_config
|
||||
from .models import EmployeeProfile, FormOption, OffboardingRequest, OnboardingRequest, PortalBranding, PortalCompanyConfig, PortalTrialConfig, WorkflowConfig
|
||||
from .models import EmployeeProfile, FormOption, OffboardingRequest, OnboardingRequest, PortalBranding, PortalCompanyConfig, PortalTrialConfig, UserProfile, 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
|
||||
|
||||
|
||||
@@ -142,6 +142,85 @@ class AppPasswordChangeForm(PasswordChangeForm):
|
||||
)
|
||||
|
||||
|
||||
class AccountAvatarForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = UserProfile
|
||||
fields = ['avatar_image']
|
||||
labels = {
|
||||
'avatar_image': gettext_lazy('Profilbild'),
|
||||
}
|
||||
widgets = {
|
||||
'avatar_image': forms.ClearableFileInput(
|
||||
attrs={
|
||||
'accept': '.png,.jpg,.jpeg,.webp,.svg',
|
||||
'onchange': 'this.form.submit()',
|
||||
}
|
||||
),
|
||||
}
|
||||
|
||||
def clean_avatar_image(self):
|
||||
avatar = self.cleaned_data.get('avatar_image')
|
||||
if not avatar:
|
||||
return avatar
|
||||
if getattr(avatar, 'size', 0) > 5 * 1024 * 1024:
|
||||
raise forms.ValidationError(_('Das Profilbild darf maximal 5 MB groß sein.'))
|
||||
return avatar
|
||||
|
||||
|
||||
class AccountDetailsForm(forms.Form):
|
||||
first_name = forms.CharField(label=gettext_lazy('Vorname'), max_length=150, required=False)
|
||||
last_name = forms.CharField(label=gettext_lazy('Nachname'), max_length=150, required=False)
|
||||
email = forms.EmailField(label=gettext_lazy('E-Mail-Adresse'), required=False)
|
||||
phone_number = forms.CharField(label=gettext_lazy('Telefon'), max_length=80, required=False)
|
||||
mobile_number = forms.CharField(label=gettext_lazy('Mobil'), max_length=80, required=False)
|
||||
job_title = forms.CharField(label=gettext_lazy('Position'), max_length=255, required=False)
|
||||
department = forms.CharField(label=gettext_lazy('Abteilung'), max_length=255, required=False)
|
||||
location = forms.CharField(label=gettext_lazy('Standort'), max_length=255, required=False)
|
||||
contact_notes = forms.CharField(
|
||||
label=gettext_lazy('Hinweise'),
|
||||
max_length=255,
|
||||
required=False,
|
||||
widget=forms.Textarea(attrs={'rows': 3}),
|
||||
)
|
||||
|
||||
def __init__(self, *args, user=None, profile=None, **kwargs):
|
||||
self.user = user
|
||||
self.profile = profile
|
||||
initial = kwargs.setdefault('initial', {})
|
||||
if user is not None and not args:
|
||||
initial.setdefault('first_name', user.first_name)
|
||||
initial.setdefault('last_name', user.last_name)
|
||||
initial.setdefault('email', user.email)
|
||||
if profile is not None and not args:
|
||||
initial.setdefault('phone_number', profile.phone_number)
|
||||
initial.setdefault('mobile_number', profile.mobile_number)
|
||||
initial.setdefault('job_title', profile.job_title)
|
||||
initial.setdefault('department', profile.department)
|
||||
initial.setdefault('location', profile.location)
|
||||
initial.setdefault('contact_notes', profile.contact_notes)
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def clean_email(self):
|
||||
return (self.cleaned_data.get('email') or '').strip().lower()
|
||||
|
||||
def save(self):
|
||||
self.user.first_name = self.cleaned_data.get('first_name', '').strip()
|
||||
self.user.last_name = self.cleaned_data.get('last_name', '').strip()
|
||||
self.user.email = self.cleaned_data.get('email', '').strip()
|
||||
self.user.save(update_fields=['first_name', 'last_name', 'email'])
|
||||
|
||||
self.profile.phone_number = self.cleaned_data.get('phone_number', '').strip()
|
||||
self.profile.mobile_number = self.cleaned_data.get('mobile_number', '').strip()
|
||||
self.profile.job_title = self.cleaned_data.get('job_title', '').strip()
|
||||
self.profile.department = self.cleaned_data.get('department', '').strip()
|
||||
self.profile.location = self.cleaned_data.get('location', '').strip()
|
||||
self.profile.contact_notes = self.cleaned_data.get('contact_notes', '').strip()
|
||||
self.profile.save(
|
||||
update_fields=['phone_number', 'mobile_number', 'job_title', 'department', 'location', 'contact_notes', 'updated_at']
|
||||
)
|
||||
return self.user, self.profile
|
||||
|
||||
|
||||
class UserManagementCreateForm(forms.Form):
|
||||
first_name = forms.CharField(label=_('Vorname'), max_length=150, required=False)
|
||||
last_name = forms.CharField(label=_('Nachname'), max_length=150, required=False)
|
||||
|
||||
Reference in New Issue
Block a user