diff --git a/src/pretix/control/templates/pretixcontrol/orders/export.html b/src/pretix/control/templates/pretixcontrol/orders/export.html index ca7ff51b8a..75eb961aae 100644 --- a/src/pretix/control/templates/pretixcontrol/orders/export.html +++ b/src/pretix/control/templates/pretixcontrol/orders/export.html @@ -11,7 +11,7 @@ {% endif %} {% for e in exporters %} -
+

{{ e.verbose_name }} diff --git a/src/pretix/control/templates/pretixcontrol/organizers/export.html b/src/pretix/control/templates/pretixcontrol/organizers/export.html index f02715dc6f..5e6e9520b9 100644 --- a/src/pretix/control/templates/pretixcontrol/organizers/export.html +++ b/src/pretix/control/templates/pretixcontrol/organizers/export.html @@ -11,7 +11,7 @@ {% endif %}

{% for e in exporters %} -
+

{{ e.verbose_name }} diff --git a/src/pretix/control/views/orders.py b/src/pretix/control/views/orders.py index 659e2327fc..fcd7971d37 100644 --- a/src/pretix/control/views/orders.py +++ b/src/pretix/control/views/orders.py @@ -2079,11 +2079,17 @@ class ExportMixin: exporters.append(ex) return exporters + def get_context_data(self, **kwargs): + ctx = super().get_context_data(**kwargs) + ctx['exporters'] = self.exporters + return ctx -class ExportDoView(EventPermissionRequiredMixin, ExportMixin, AsyncAction, View): + +class ExportDoView(EventPermissionRequiredMixin, ExportMixin, AsyncAction, TemplateView): permission = 'can_view_orders' known_errortypes = ['ExportError'] task = export + template_name = 'pretixcontrol/orders/export.html' def get_success_message(self, value): return None @@ -2103,6 +2109,11 @@ class ExportDoView(EventPermissionRequiredMixin, ExportMixin, AsyncAction, View) if ex.identifier == self.request.POST.get("exporter"): return ex + def get(self, request, *args, **kwargs): + if 'async_id' in request.GET and settings.HAS_CELERY: + return self.get_result(request) + return TemplateView.get(self, request, *args, **kwargs) + def post(self, request, *args, **kwargs): if not self.exporter: messages.error(self.request, _('The selected exporter was not found.')) @@ -2112,16 +2123,8 @@ class ExportDoView(EventPermissionRequiredMixin, ExportMixin, AsyncAction, View) })) if not self.exporter.form.is_valid(): - messages.error( - self.request, - str(_('There was a problem processing your input:')) + ' ' + ', '.join( - ', '.join(line) for line in self.exporter.form.errors.values() - ) - ) - return redirect(reverse('control:event.orders.export', kwargs={ - 'event': self.request.event.slug, - 'organizer': self.request.event.organizer.slug - }) + '?identifier=' + self.exporter.identifier) + messages.error(self.request, _('There was a problem processing your input. See below for error details.')) + return self.get(request, *args, **kwargs) cf = CachedFile(web_download=True, session_key=request.session.session_key) cf.date = now() @@ -2134,11 +2137,6 @@ class ExportView(EventPermissionRequiredMixin, ExportMixin, TemplateView): permission = 'can_view_orders' template_name = 'pretixcontrol/orders/export.html' - def get_context_data(self, **kwargs): - ctx = super().get_context_data(**kwargs) - ctx['exporters'] = self.exporters - return ctx - class RefundList(EventPermissionRequiredMixin, PaginationMixin, ListView): model = OrderRefund diff --git a/src/pretix/control/views/organizer.py b/src/pretix/control/views/organizer.py index b40344e97a..dd224f8f05 100644 --- a/src/pretix/control/views/organizer.py +++ b/src/pretix/control/views/organizer.py @@ -1147,8 +1147,9 @@ class ExportMixin: organizer=self.request.organizer ) responses = register_multievent_data_exporters.send(self.request.organizer) + id = self.request.GET.get("identifier") or self.request.POST.get("exporter") for ex in sorted([response(events) for r, response in responses if response], key=lambda ex: str(ex.verbose_name)): - if self.request.GET.get("identifier") and ex.identifier != self.request.GET.get("identifier"): + if id and ex.identifier != id: continue # Use form parse cycle to generate useful defaults @@ -1180,10 +1181,16 @@ class ExportMixin: exporters.append(ex) return exporters + def get_context_data(self, **kwargs): + ctx = super().get_context_data(**kwargs) + ctx['exporters'] = self.exporters + return ctx -class ExportDoView(OrganizerPermissionRequiredMixin, ExportMixin, AsyncAction, View): + +class ExportDoView(OrganizerPermissionRequiredMixin, ExportMixin, AsyncAction, TemplateView): known_errortypes = ['ExportError'] task = multiexport + template_name = 'pretixcontrol/organizers/export.html' def get_success_message(self, value): return None @@ -1202,6 +1209,11 @@ class ExportDoView(OrganizerPermissionRequiredMixin, ExportMixin, AsyncAction, V if ex.identifier == self.request.POST.get("exporter"): return ex + def get(self, request, *args, **kwargs): + if 'async_id' in request.GET and settings.HAS_CELERY: + return self.get_result(request) + return TemplateView.get(self, request, *args, **kwargs) + def post(self, request, *args, **kwargs): if not self.exporter: messages.error(self.request, _('The selected exporter was not found.')) @@ -1231,11 +1243,6 @@ class ExportDoView(OrganizerPermissionRequiredMixin, ExportMixin, AsyncAction, V class ExportView(OrganizerPermissionRequiredMixin, ExportMixin, TemplateView): template_name = 'pretixcontrol/organizers/export.html' - def get_context_data(self, **kwargs): - ctx = super().get_context_data(**kwargs) - ctx['exporters'] = self.exporters - return ctx - class GateListView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, ListView): model = Gate