From 6c830a7d361103ecb872c2e286e66ba1133c1a53 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Tue, 3 Sep 2019 11:51:29 +0200 Subject: [PATCH] Do not enforce voucher constraints for bundled items --- src/pretix/base/services/cart.py | 9 +++++---- src/pretix/base/services/orders.py | 6 ++++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/pretix/base/services/cart.py b/src/pretix/base/services/cart.py index a05cb1047..6c24c4d4e 100644 --- a/src/pretix/base/services/cart.py +++ b/src/pretix/base/services/cart.py @@ -226,11 +226,12 @@ 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.addon_to != 'FAKE': + 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 not op.voucher.show_hidden_items): - raise CartError(error_messages['voucher_required']) + if op.item.hide_without_voucher and (op.voucher is None or not op.voucher.show_hidden_items): + raise CartError(error_messages['voucher_required']) if not op.item.is_available() or (op.variation and not op.variation.active): raise CartError(error_messages['unavailable']) diff --git a/src/pretix/base/services/orders.py b/src/pretix/base/services/orders.py index 3f0132543..376aca5c6 100644 --- a/src/pretix/base/services/orders.py +++ b/src/pretix/base/services/orders.py @@ -509,12 +509,14 @@ def _check_positions(event: Event, now_dt: datetime, positions: List[CartPositio if cp.seat: seats_seen.add(cp.seat) - if cp.item.require_voucher and cp.voucher is None: + if cp.item.require_voucher and cp.voucher is None and not cp.is_bundled: delete(cp) err = err or error_messages['voucher_required'] break - if cp.item.hide_without_voucher and (cp.voucher is None or not cp.voucher.show_hidden_items or not cp.voucher.applies_to(cp.item, cp.variation)): + if cp.item.hide_without_voucher and ( + cp.voucher is None or not cp.voucher.show_hidden_items or not cp.voucher.applies_to(cp.item, cp.variation) + ) and not cp.is_bundled: delete(cp) cp.delete() err = error_messages['voucher_required']