snapshot: preserve trial lifecycle and product-grade expiry UX
This commit is contained in:
@@ -26,8 +26,8 @@ from django.urls import reverse
|
||||
|
||||
from .app_registry import build_portal_app_sections, get_portal_app_registry_rows
|
||||
from .backup_ops import create_backup_bundle, delete_backup_bundle, list_backup_bundles, verify_backup_bundle
|
||||
from .branding import get_branding_email_copy, get_company_email_domain, get_default_notification_templates
|
||||
from .forms import OffboardingRequestForm, OnboardingRequestForm, PortalBrandingForm, PortalCompanyConfigForm, UserManagementCreateForm
|
||||
from .branding import get_branding_email_copy, get_company_email_domain, get_default_notification_templates, get_portal_trial_config, is_trial_expired
|
||||
from .forms import OffboardingRequestForm, OnboardingRequestForm, PortalBrandingForm, PortalCompanyConfigForm, PortalTrialConfigForm, UserManagementCreateForm
|
||||
from .form_builder import (
|
||||
DEFAULT_FIELD_ORDER,
|
||||
LOCKED_FIELD_RULES,
|
||||
@@ -36,7 +36,7 @@ from .form_builder import (
|
||||
ONBOARDING_PAGE_ORDER,
|
||||
ensure_form_field_configs,
|
||||
)
|
||||
from .models import AdminAuditLog, EmployeeProfile, FormFieldConfig, FormOption, IntroChecklistItem, NotificationRule, NotificationTemplate, OffboardingRequest, OnboardingIntroductionSession, OnboardingRequest, PortalAppConfig, PortalBranding, PortalCompanyConfig, ScheduledWelcomeEmail, SystemEmailConfig, WorkflowConfig
|
||||
from .models import AdminAuditLog, EmployeeProfile, FormFieldConfig, FormOption, IntroChecklistItem, NotificationRule, NotificationTemplate, OffboardingRequest, OnboardingIntroductionSession, OnboardingRequest, PortalAppConfig, PortalBranding, PortalCompanyConfig, PortalTrialConfig, ScheduledWelcomeEmail, SystemEmailConfig, WorkflowConfig
|
||||
from .emailing import send_system_email
|
||||
from .roles import ROLE_GROUP_NAMES, ROLE_LABELS, ROLE_PLATFORM_OWNER, ROLE_SUPER_ADMIN, assign_user_role, get_user_role_key, get_user_role_label, user_has_capability
|
||||
from .services import get_email_test_redirect, is_email_test_mode, is_nextcloud_enabled, upload_to_nextcloud
|
||||
@@ -645,6 +645,66 @@ def save_portal_company_config(request):
|
||||
)
|
||||
|
||||
|
||||
@_require_capability('manage_trial_lifecycle')
|
||||
def portal_trial_config_page(request):
|
||||
trial_config = get_portal_trial_config()
|
||||
form = PortalTrialConfigForm(instance=trial_config)
|
||||
return render(
|
||||
request,
|
||||
'workflows/trial_management.html',
|
||||
{
|
||||
'form': form,
|
||||
'trial_config': trial_config,
|
||||
'trial_is_expired': is_trial_expired(),
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@_require_capability('manage_trial_lifecycle')
|
||||
@require_POST
|
||||
def save_portal_trial_config(request):
|
||||
trial_config = get_portal_trial_config()
|
||||
form = PortalTrialConfigForm(request.POST, instance=trial_config)
|
||||
if not form.is_valid():
|
||||
messages.error(request, _('Trial-Konfiguration konnte nicht gespeichert werden. Bitte prüfen Sie die Eingaben.'))
|
||||
return render(
|
||||
request,
|
||||
'workflows/trial_management.html',
|
||||
{
|
||||
'form': form,
|
||||
'trial_config': trial_config,
|
||||
'trial_is_expired': is_trial_expired(),
|
||||
},
|
||||
status=400,
|
||||
)
|
||||
|
||||
trial_config = form.save()
|
||||
_audit(
|
||||
request,
|
||||
'portal_trial_config_saved',
|
||||
target_type='portal_trial_config',
|
||||
target_id=trial_config.id,
|
||||
target_label='Default',
|
||||
details={
|
||||
'is_trial_mode': trial_config.is_trial_mode,
|
||||
'trial_started_at': trial_config.trial_started_at.isoformat() if trial_config.trial_started_at else '',
|
||||
'trial_expires_at': trial_config.trial_expires_at.isoformat() if trial_config.trial_expires_at else '',
|
||||
'restrict_production_integrations': trial_config.restrict_production_integrations,
|
||||
'auto_cleanup_enabled': trial_config.auto_cleanup_enabled,
|
||||
},
|
||||
)
|
||||
messages.success(request, _('Trial-Konfiguration wurde gespeichert.'))
|
||||
return render(
|
||||
request,
|
||||
'workflows/trial_management.html',
|
||||
{
|
||||
'form': PortalTrialConfigForm(instance=trial_config),
|
||||
'trial_config': trial_config,
|
||||
'trial_is_expired': is_trial_expired(),
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@_require_capability('manage_users')
|
||||
@require_POST
|
||||
def create_user_from_admin(request):
|
||||
|
||||
Reference in New Issue
Block a user