From 7a419f9bb591646f8afc04aa6cd8e1832fa9183b Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Fri, 26 May 2023 11:30:09 +0200 Subject: [PATCH] Hide voucher redemption if the sale period is over --- src/pretix/presale/views/event.py | 11 +++++++---- src/pretix/presale/views/widget.py | 14 ++++++++------ src/tests/presale/test_widget.py | 2 +- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/pretix/presale/views/event.py b/src/pretix/presale/views/event.py index b691d619a..8ea1efa1f 100644 --- a/src/pretix/presale/views/event.py +++ b/src/pretix/presale/views/event.py @@ -466,15 +466,18 @@ class EventIndex(EventViewMixin, EventListMixin, CartMixin, TemplateView): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) + context['ev'] = self.subevent or self.request.event + context['subevent'] = self.subevent + # Show voucher option if an event is selected and vouchers exist vouchers_exist = self.request.event.cache.get('vouchers_exist') if vouchers_exist is None: vouchers_exist = self.request.event.vouchers.exists() self.request.event.cache.set('vouchers_exist', vouchers_exist) - context['show_vouchers'] = context['vouchers_exist'] = vouchers_exist - - context['ev'] = self.subevent or self.request.event - context['subevent'] = self.subevent + context['show_vouchers'] = context['vouchers_exist'] = vouchers_exist and ( + (self.request.event.has_subevents and not self.subevent) or + context['ev'].presale_is_running + ) context['allow_waitinglist'] = self.request.event.settings.waiting_list_enabled and context['ev'].presale_is_running diff --git a/src/pretix/presale/views/widget.py b/src/pretix/presale/views/widget.py index 13d0ce937..f41838249 100644 --- a/src/pretix/presale/views/widget.py +++ b/src/pretix/presale/views/widget.py @@ -690,7 +690,14 @@ class WidgetAPIProductList(EventListMixin, View): data['date_range'] = self._get_date_range(ev, request.event) fail = False + vouchers_exist = self.request.event.get_cache().get('vouchers_exist') + if vouchers_exist is None: + vouchers_exist = self.request.event.vouchers.exists() + self.request.event.get_cache().set('vouchers_exist', vouchers_exist) + data['vouchers_exist'] = vouchers_exist + if not ev.presale_is_running: + data['vouchers_exist'] = False if ev.presale_has_ended: if request.event.settings.presale_has_ended_text: data['error'] = str(request.event.settings.presale_has_ended_text) @@ -742,6 +749,7 @@ class WidgetAPIProductList(EventListMixin, View): data['items_by_category'] = [] data['display_add_to_cart'] = False data['itemnum'] = 0 + data['vouchers_exist'] = False data['has_seating_plan'] = ev.seating_plan is not None data['has_seating_plan_waitinglist'] = False @@ -760,12 +768,6 @@ class WidgetAPIProductList(EventListMixin, View): data['has_seating_plan_waitinglist'] = True break - vouchers_exist = self.request.event.get_cache().get('vouchers_exist') - if vouchers_exist is None: - vouchers_exist = self.request.event.vouchers.exists() - self.request.event.get_cache().set('vouchers_exist', vouchers_exist) - data['vouchers_exist'] = vouchers_exist - if "cart_id" not in request.GET: cache.set(cache_key, data, 10) # These pages are cached for a really short duration – this should make them pretty accurate with diff --git a/src/tests/presale/test_widget.py b/src/tests/presale/test_widget.py index 9606e1e3b..075c003d9 100644 --- a/src/tests/presale/test_widget.py +++ b/src/tests/presale/test_widget.py @@ -487,7 +487,7 @@ class WidgetCartTest(CartTestMixin, TestCase): "use_native_spinners": False, "has_seating_plan": False, "has_seating_plan_waitinglist": False, - "vouchers_exist": True, + "vouchers_exist": False, "waiting_list_enabled": False, "error": "This voucher is expired.", "items_by_category": [],