From 75c0920f5e153c002605035bc025e658ce2010ea Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Fri, 31 Jan 2020 10:48:32 +0100 Subject: [PATCH] API: Allow to mark order as pending when creating refunds --- doc/api/resources/orders.rst | 3 ++- src/pretix/api/views/order.py | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/doc/api/resources/orders.rst b/doc/api/resources/orders.rst index d71d16b88b..3249fb10ec 100644 --- a/doc/api/resources/orders.rst +++ b/doc/api/resources/orders.rst @@ -2006,7 +2006,8 @@ Order refund endpoints "payment": 1, "execution_date": null, "provider": "manual", - "mark_canceled": false + "mark_canceled": false, + "mark_pending": true } **Example response**: diff --git a/src/pretix/api/views/order.py b/src/pretix/api/views/order.py index 4276d2d574..d2e7729b24 100644 --- a/src/pretix/api/views/order.py +++ b/src/pretix/api/views/order.py @@ -1061,6 +1061,7 @@ class RefundViewSet(CreateModelMixin, viewsets.ReadOnlyModelViewSet): mark_refunded = request.data.pop('mark_refunded', False) else: mark_refunded = request.data.pop('mark_canceled', False) + mark_pending = request.data.pop('mark_pending', False) serializer = OrderRefundCreateSerializer(data=request.data, context=self.get_serializer_context()) serializer.is_valid(raise_exception=True) with transaction.atomic(): @@ -1082,6 +1083,15 @@ class RefundViewSet(CreateModelMixin, viewsets.ReadOnlyModelViewSet): user=request.user if request.user.is_authenticated else None, auth=(request.auth if request.auth else None), ) + elif mark_pending: + if r.order.status == Order.STATUS_PAID and r.order.pending_sum > 0: + r.order.status = Order.STATUS_PENDING + r.order.set_expires( + now(), + r.order.event.subevents.filter( + id__in=r.order.positions.values_list('subevent_id', flat=True)) + ) + r.order.save(update_fields=['status', 'expires']) headers = self.get_success_headers(serializer.data) return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)