From 435d90474a9ffe5b6cf530bac2e5f247c18ae0da Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Fri, 14 Dec 2018 10:13:02 +0100 Subject: [PATCH] Changes in checks --- src/pretix/base/models/items.py | 5 ++--- src/pretix/base/services/cart.py | 5 +---- src/pretix/base/services/orders.py | 4 ++-- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/pretix/base/models/items.py b/src/pretix/base/models/items.py index 0119bd45c..cad6d2022 100644 --- a/src/pretix/base/models/items.py +++ b/src/pretix/base/models/items.py @@ -173,10 +173,9 @@ def filter_available(qs, channel='web', voucher=None, allow_addons=False): vouchq = Q(hide_without_voucher=False) if voucher: if voucher.item_id: - vouchq |= Q(pk=voucher.item_id) - qs = qs.filter(pk=voucher.item_id) + vouchq = Q(pk=voucher.item_id) elif voucher.quota_id: - qs = qs.filter(quotas__in=[voucher.quota_id]) + vouchq = Q(quotas__in=[voucher.quota_id]) return qs.filter(vouchq) diff --git a/src/pretix/base/services/cart.py b/src/pretix/base/services/cart.py index cdb871860..496d24c96 100644 --- a/src/pretix/base/services/cart.py +++ b/src/pretix/base/services/cart.py @@ -225,10 +225,7 @@ class CartManager: def _check_item_constraints(self, op): if isinstance(op, self.AddOperation) or isinstance(op, self.ExtendOperation): - if op.item.require_voucher and op.voucher is None: - raise CartError(error_messages['voucher_required']) - - if op.item.hide_without_voucher and (op.voucher is None or op.voucher.item is None or op.voucher.item.pk != op.item.pk): + if (op.item.require_voucher or op.item.hide_without_voucher) and op.voucher is None: raise CartError(error_messages['voucher_required']) if not op.item.is_available() or (op.variation and not op.variation.active): diff --git a/src/pretix/base/services/orders.py b/src/pretix/base/services/orders.py index 81a2cdcfa..8fbea522d 100644 --- a/src/pretix/base/services/orders.py +++ b/src/pretix/base/services/orders.py @@ -505,9 +505,9 @@ def _check_positions(event: Event, now_dt: datetime, positions: List[CartPositio err = err or error_messages['voucher_required'] break - if cp.item.hide_without_voucher and (cp.voucher is None or cp.voucher.item is None - or cp.voucher.item.pk != cp.item.pk): + if cp.item.hide_without_voucher and not cp.voucher.applies_to(cp.item.pk, cp.variation.pk): delete(cp) + cp.delete() err = error_messages['voucher_required'] break