From 23559e07117b0fdd64ce828b450dd4425744ee9f Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Tue, 20 Jan 2026 12:23:09 +0100 Subject: [PATCH] Scheduled export: Move error message for missing permissions This error message mostly occurs when working in admin mode and this change allows our support team to still see what the form looks like to guide users through, even if they can't save. --- src/pretix/control/views/orders.py | 24 ++++++++++++------------ src/pretix/control/views/organizer.py | 24 ++++++++++++------------ 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/pretix/control/views/orders.py b/src/pretix/control/views/orders.py index 229b04780c..39e515d89e 100644 --- a/src/pretix/control/views/orders.py +++ b/src/pretix/control/views/orders.py @@ -2790,7 +2790,16 @@ class ExportView(EventPermissionRequiredMixin, ExportMixin, ListView): @transaction.atomic() def post(self, request, *args, **kwargs): if request.POST.get("schedule") == "save": - if self.exporter.form.is_valid() and self.rrule_form.is_valid() and self.schedule_form.is_valid(): + if not self.has_permission(): + messages.error( + self.request, + _( + "Your user account does not have sufficient permission to run this report, therefore " + "you cannot schedule it." + ) + ) + return super().get(request, *args, **kwargs) + elif self.exporter.form.is_valid() and self.rrule_form.is_valid() and self.schedule_form.is_valid(): self.schedule_form.instance.export_identifier = self.exporter.identifier self.schedule_form.instance.export_form_data = self.exporter.form.cleaned_data self.schedule_form.instance.schedule_rrule = str(self.rrule_form.to_rrule()) @@ -2869,17 +2878,8 @@ class ExportView(EventPermissionRequiredMixin, ExportMixin, ListView): def get_context_data(self, **kwargs): ctx = super().get_context_data(**kwargs) if "schedule" in self.request.POST or self.scheduled: - if "schedule" in self.request.POST and not self.has_permission(): - messages.error( - self.request, - _( - "Your user account does not have sufficient permission to run this report, therefore " - "you cannot schedule it." - ) - ) - else: - ctx['schedule_form'] = self.schedule_form - ctx['rrule_form'] = self.rrule_form + ctx['schedule_form'] = self.schedule_form + ctx['rrule_form'] = self.rrule_form elif not self.exporter: for s in ctx['scheduled']: try: diff --git a/src/pretix/control/views/organizer.py b/src/pretix/control/views/organizer.py index 3d84cb5687..3c3c72c753 100644 --- a/src/pretix/control/views/organizer.py +++ b/src/pretix/control/views/organizer.py @@ -2113,7 +2113,16 @@ class ExportView(OrganizerPermissionRequiredMixin, ExportMixin, ListView): @transaction.atomic() def post(self, request, *args, **kwargs): if request.POST.get("schedule") == "save": - if self.exporter.form.is_valid() and self.rrule_form.is_valid() and self.schedule_form.is_valid(): + if not self.has_permission(): + messages.error( + self.request, + _( + "Your user account does not have sufficient permission to run this report, therefore " + "you cannot schedule it." + ) + ) + return super().get(request, *args, **kwargs) + elif self.exporter.form.is_valid() and self.rrule_form.is_valid() and self.schedule_form.is_valid(): self.schedule_form.instance.export_identifier = self.exporter.identifier self.schedule_form.instance.export_form_data = self.exporter.form.cleaned_data self.schedule_form.instance.schedule_rrule = str(self.rrule_form.to_rrule()) @@ -2200,17 +2209,8 @@ class ExportView(OrganizerPermissionRequiredMixin, ExportMixin, ListView): def get_context_data(self, **kwargs): ctx = super().get_context_data(**kwargs) if "schedule" in self.request.POST or self.scheduled: - if "schedule" in self.request.POST and not self.has_permission(): - messages.error( - self.request, - _( - "Your user account does not have sufficient permission to run this report, therefore " - "you cannot schedule it." - ) - ) - else: - ctx['schedule_form'] = self.schedule_form - ctx['rrule_form'] = self.rrule_form + ctx['schedule_form'] = self.schedule_form + ctx['rrule_form'] = self.rrule_form elif not self.exporter: for s in ctx['scheduled']: try: