Fix form validation of cancellation form

This commit is contained in:
Raphael Michel
2022-10-07 12:39:39 +02:00
parent 2409c513d6
commit 6f0fc9ed49
+30 -27
View File
@@ -1178,7 +1178,7 @@ class OrderTransition(OrderView):
} }
) )
def post(self, *args, **kwargs): def post(self, request, *args, **kwargs):
to = self.request.POST.get('status', '') to = self.request.POST.get('status', '')
if self.order.status in (Order.STATUS_PENDING, Order.STATUS_EXPIRED) and to == 'p' and self.mark_paid_form.is_valid(): if self.order.status in (Order.STATUS_PENDING, Order.STATUS_EXPIRED) and to == 'p' and self.mark_paid_form.is_valid():
ps = self.mark_paid_form.cleaned_data['amount'] ps = self.mark_paid_form.cleaned_data['amount']
@@ -1267,38 +1267,41 @@ class OrderTransition(OrderView):
'confirmation mail.')) 'confirmation mail.'))
else: else:
messages.success(self.request, _('The payment has been created successfully.')) messages.success(self.request, _('The payment has been created successfully.'))
elif self.order.cancel_allowed() and to == 'c' and self.mark_canceled_form.is_valid(): elif self.order.cancel_allowed() and to == 'c':
try: if self.mark_canceled_form.is_valid():
cancel_order(self.order.pk, user=self.request.user, try:
email_comment=self.mark_canceled_form.cleaned_data['comment'], cancel_order(self.order.pk, user=self.request.user,
send_mail=self.mark_canceled_form.cleaned_data['send_email'], email_comment=self.mark_canceled_form.cleaned_data['comment'],
cancel_invoice=self.mark_canceled_form.cleaned_data.get('cancel_invoice', True), send_mail=self.mark_canceled_form.cleaned_data['send_email'],
cancellation_fee=self.mark_canceled_form.cleaned_data.get('cancellation_fee')) cancel_invoice=self.mark_canceled_form.cleaned_data.get('cancel_invoice', True),
except OrderError as e: cancellation_fee=self.mark_canceled_form.cleaned_data.get('cancellation_fee'))
messages.error(self.request, str(e)) except OrderError as e:
else: messages.error(self.request, str(e))
self.order.refresh_from_db() else:
if self.order.pending_sum < 0: self.order.refresh_from_db()
messages.success(self.request, _('The order has been canceled. You can now select how you want to ' if self.order.pending_sum < 0:
'transfer the money back to the user.')) messages.success(self.request, _('The order has been canceled. You can now select how you want to '
with language(self.order.locale): 'transfer the money back to the user.'))
return redirect(reverse('control:event.order.refunds.start', kwargs={ with language(self.order.locale):
'event': self.request.event.slug, return redirect(reverse('control:event.order.refunds.start', kwargs={
'organizer': self.request.event.organizer.slug, 'event': self.request.event.slug,
'code': self.order.code 'organizer': self.request.event.organizer.slug,
}) + '?start-action=do_nothing&start-mode=partial&start-partial_amount={}&giftcard={}&comment={}'.format( 'code': self.order.code
round_decimal(self.order.pending_sum * -1), }) + '?start-action=do_nothing&start-mode=partial&start-partial_amount={}&giftcard={}&comment={}'.format(
'true' if self.req and self.req.refund_as_giftcard else 'false', round_decimal(self.order.pending_sum * -1),
quote(gettext('Order canceled')) 'true' if self.req and self.req.refund_as_giftcard else 'false',
)) quote(gettext('Order canceled'))
))
messages.success(self.request, _('The order has been canceled.')) messages.success(self.request, _('The order has been canceled.'))
else:
return self.get(self.request, *args, **kwargs)
elif self.order.status == Order.STATUS_PENDING and to == 'e': elif self.order.status == Order.STATUS_PENDING and to == 'e':
mark_order_expired(self.order, user=self.request.user) mark_order_expired(self.order, user=self.request.user)
messages.success(self.request, _('The order has been marked as expired.')) messages.success(self.request, _('The order has been marked as expired.'))
return redirect(self.get_order_url()) return redirect(self.get_order_url())
def get(self, *args, **kwargs): def get(self, request, *args, **kwargs):
to = self.request.GET.get('status', '') to = self.request.GET.get('status', '')
if self.order.status in (Order.STATUS_PENDING, Order.STATUS_EXPIRED) and to == 'p': if self.order.status in (Order.STATUS_PENDING, Order.STATUS_EXPIRED) and to == 'p':
return render(self.request, 'pretixcontrol/order/pay.html', { return render(self.request, 'pretixcontrol/order/pay.html', {