From e07cca9148e0d16b9ebdf954f73e9b40004b3c17 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Mon, 2 Nov 2020 17:08:53 +0100 Subject: [PATCH] External refunds: Processing should not affect order's state if order is canceled --- .../pretixcontrol/order/refund_process.html | 40 +++++++++++-------- src/pretix/control/views/orders.py | 21 +++++----- 2 files changed, 35 insertions(+), 26 deletions(-) diff --git a/src/pretix/control/templates/pretixcontrol/order/refund_process.html b/src/pretix/control/templates/pretixcontrol/order/refund_process.html index 2ad38c6d84..7f627637ff 100644 --- a/src/pretix/control/templates/pretixcontrol/order/refund_process.html +++ b/src/pretix/control/templates/pretixcontrol/order/refund_process.html @@ -25,22 +25,30 @@ {{ pending }}. The order total is {{ total }}. {% endblocktrans %}

-

- {% blocktrans trimmed with amount=refund.amount|money:request.event.currency method=refund.payment_provider.verbose_name %} - What should happen to the ticket order? - {% endblocktrans %} -

-
- -
- -
+ {% if order.status != "c" and order.positions.count > 0 %} +

+ {% blocktrans trimmed %} + Since the order is already canceled, this will not affect its state. + {% endblocktrans %} +

+ {% else %} +

+ {% blocktrans trimmed with amount=refund.amount|money:request.event.currency method=refund.payment_provider.verbose_name %} + What should happen to the ticket order? + {% endblocktrans %} +

+
+ +
+ +
+ {% endif %}
diff --git a/src/pretix/control/views/orders.py b/src/pretix/control/views/orders.py index 067ab86734..4ff7cec92c 100644 --- a/src/pretix/control/views/orders.py +++ b/src/pretix/control/views/orders.py @@ -566,16 +566,17 @@ class OrderRefundProcess(OrderView): if self.refund.state == OrderRefund.REFUND_STATE_EXTERNAL: self.refund.done(user=self.request.user) - if self.request.POST.get("action") == "r" and (self.order.status != Order.STATUS_CANCELED and self.order.positions.exists()): - mark_order_refunded(self.order, user=self.request.user) - elif not (self.order.status == Order.STATUS_PAID and self.order.pending_sum <= 0): - self.order.status = Order.STATUS_PENDING - self.order.set_expires( - now(), - self.order.event.subevents.filter( - id__in=self.order.positions.values_list('subevent_id', flat=True)) - ) - self.order.save(update_fields=['status', 'expires']) + if self.order.status != Order.STATUS_CANCELED and self.order.positions.exists(): + if self.request.POST.get("action") == "r": + mark_order_refunded(self.order, user=self.request.user) + elif not (self.order.status == Order.STATUS_PAID and self.order.pending_sum <= 0): + self.order.status = Order.STATUS_PENDING + self.order.set_expires( + now(), + self.order.event.subevents.filter( + id__in=self.order.positions.values_list('subevent_id', flat=True)) + ) + self.order.save(update_fields=['status', 'expires']) messages.success(self.request, _('The refund has been processed.')) else: