snapshot: preserve trial lifecycle and product-grade expiry UX
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, WorkflowConfig
|
||||
from .models import EmployeeProfile, FormOption, OffboardingRequest, OnboardingRequest, PortalBranding, PortalCompanyConfig, PortalTrialConfig, 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
|
||||
|
||||
|
||||
@@ -281,6 +281,51 @@ class PortalCompanyConfigForm(forms.ModelForm):
|
||||
}
|
||||
|
||||
|
||||
class PortalTrialConfigForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = PortalTrialConfig
|
||||
fields = [
|
||||
'is_trial_mode',
|
||||
'trial_started_at',
|
||||
'trial_expires_at',
|
||||
'restrict_production_integrations',
|
||||
'auto_cleanup_enabled',
|
||||
'trial_banner_text',
|
||||
'trial_banner_text_en',
|
||||
]
|
||||
labels = {
|
||||
'is_trial_mode': gettext_lazy('Trial-Modus aktiv'),
|
||||
'trial_started_at': gettext_lazy('Trial-Beginn'),
|
||||
'trial_expires_at': gettext_lazy('Trial-Ende'),
|
||||
'restrict_production_integrations': gettext_lazy('Produktive Integrationen begrenzen'),
|
||||
'auto_cleanup_enabled': gettext_lazy('Cleanup nach Ablauf zulassen'),
|
||||
'trial_banner_text': gettext_lazy('Banner-Text DE'),
|
||||
'trial_banner_text_en': gettext_lazy('Banner-Text EN'),
|
||||
}
|
||||
widgets = {
|
||||
'trial_started_at': forms.DateTimeInput(attrs={'type': 'datetime-local'}),
|
||||
'trial_expires_at': forms.DateTimeInput(attrs={'type': 'datetime-local'}),
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
for field_name in ('trial_started_at', 'trial_expires_at'):
|
||||
field = self.fields[field_name]
|
||||
if self.instance and getattr(self.instance, field_name):
|
||||
field.initial = timezone.localtime(getattr(self.instance, field_name)).strftime('%Y-%m-%dT%H:%M')
|
||||
field.input_formats = ['%Y-%m-%dT%H:%M']
|
||||
|
||||
def clean(self):
|
||||
cleaned = super().clean()
|
||||
started = cleaned.get('trial_started_at')
|
||||
expires = cleaned.get('trial_expires_at')
|
||||
if cleaned.get('is_trial_mode') and not expires:
|
||||
self.add_error('trial_expires_at', _('Bitte ein Trial-Ende festlegen.'))
|
||||
if started and expires and expires <= started:
|
||||
self.add_error('trial_expires_at', _('Das Trial-Ende muss nach dem Trial-Beginn liegen.'))
|
||||
return cleaned
|
||||
|
||||
|
||||
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