From 5667866c9d6de1384d02371bdfa8871c3f941073 Mon Sep 17 00:00:00 2001 From: Tobias Kunze Date: Mon, 8 Aug 2016 18:50:16 +0200 Subject: [PATCH] Make vouchers reusable upon cancelation of an Order Refs #165. --- src/pretix/base/models/vouchers.py | 4 +++- src/pretix/base/services/orders.py | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/pretix/base/models/vouchers.py b/src/pretix/base/models/vouchers.py index 0920718d56..104d2088a7 100644 --- a/src/pretix/base/models/vouchers.py +++ b/src/pretix/base/models/vouchers.py @@ -162,10 +162,12 @@ class Voucher(LoggedModel): def is_ordered(self) -> int: """ - Returns whether an order position exists that uses this voucher. + Returns whether a non-canceled order position exists that uses this voucher. """ return OrderPosition.objects.filter( voucher=self + ).exclude( + order__status=Order.STATUS_CANCELLED ).exists() def is_in_cart(self) -> int: diff --git a/src/pretix/base/services/orders.py b/src/pretix/base/services/orders.py index f4949f1af0..935d4023d3 100644 --- a/src/pretix/base/services/orders.py +++ b/src/pretix/base/services/orders.py @@ -152,6 +152,11 @@ def cancel_order(order, user=None): if i: generate_cancellation(i) + for position in order.positions.all(): + if position.voucher: + position.voucher.redeemed = False + position.voucher.save() + return order