From d6aeefdf09368e01bb7e4f6997a87b048954555e Mon Sep 17 00:00:00 2001 From: Martin Gross Date: Tue, 16 Mar 2021 16:49:37 +0100 Subject: [PATCH] Add force-reactivate checkbox to order (#1997) --- src/pretix/control/forms/orders.py | 12 ++++++++++-- .../pretixcontrol/order/reactivate.html | 1 + src/pretix/control/views/orders.py | 18 ++++++++++++++++-- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/pretix/control/forms/orders.py b/src/pretix/control/forms/orders.py index 1d36944717..3ea707766a 100644 --- a/src/pretix/control/forms/orders.py +++ b/src/pretix/control/forms/orders.py @@ -75,7 +75,7 @@ class ExtendForm(I18nModelForm): return super().save(commit) -class ConfirmPaymentForm(forms.Form): +class ForceQuotaConfirmationForm(forms.Form): force = forms.BooleanField( label=_('Overbook quota and ignore late payment'), help_text=_('If you check this box, this operation will be performed even if it leads to an overbooked quota ' @@ -101,7 +101,15 @@ class ConfirmPaymentForm(forms.Form): del self.fields['force'] -class CancelForm(ConfirmPaymentForm): +class ConfirmPaymentForm(ForceQuotaConfirmationForm): + pass + + +class ReactivateOrderForm(ForceQuotaConfirmationForm): + pass + + +class CancelForm(ForceQuotaConfirmationForm): send_email = forms.BooleanField( required=False, label=_('Notify customer by email'), diff --git a/src/pretix/control/templates/pretixcontrol/order/reactivate.html b/src/pretix/control/templates/pretixcontrol/order/reactivate.html index bfedc21679..7b07fe077e 100644 --- a/src/pretix/control/templates/pretixcontrol/order/reactivate.html +++ b/src/pretix/control/templates/pretixcontrol/order/reactivate.html @@ -24,6 +24,7 @@
{% csrf_token %} + {% bootstrap_form form layout='horizontal' horizontal_label_class='sr-only' horizontal_field_class='col-md-12' %}
diff --git a/src/pretix/control/views/orders.py b/src/pretix/control/views/orders.py index 625d872d68..4082f306b9 100644 --- a/src/pretix/control/views/orders.py +++ b/src/pretix/control/views/orders.py @@ -83,7 +83,7 @@ from pretix.control.forms.orders import ( ExtendForm, MarkPaidForm, OrderContactForm, OrderFeeChangeForm, OrderLocaleForm, OrderMailForm, OrderPositionAddForm, OrderPositionAddFormset, OrderPositionChangeForm, OrderPositionMailForm, - OrderRefundForm, OtherOperationsForm, + OrderRefundForm, OtherOperationsForm, ReactivateOrderForm, ) from pretix.control.permissions import EventPermissionRequiredMixin from pretix.control.signals import order_search_forms @@ -1424,11 +1424,24 @@ class OrderExtend(OrderView): class OrderReactivate(OrderView): permission = 'can_change_orders' + @cached_property + def reactivate_form(self): + return ReactivateOrderForm( + instance=self.order, + data=self.request.POST if self.request.method == "POST" else None, + ) + def post(self, *args, **kwargs): + if not self.reactivate_form.is_valid(): + return render(self.request, 'pretixcontrol/order/reactivate.html', { + 'form': self.reactivate_form, + 'order': self.order, + }) try: reactivate_order( self.order, - user=self.request.user + user=self.request.user, + force=self.reactivate_form.cleaned_data.get('force', False) ) messages.success(self.request, _('The order has been reactivated.')) except OrderError as e: @@ -1453,6 +1466,7 @@ class OrderReactivate(OrderView): def get(self, *args, **kwargs): return render(self.request, 'pretixcontrol/order/reactivate.html', { + 'form': self.reactivate_form, 'order': self.order, })