diff --git a/src/pretix/presale/views/widget.py b/src/pretix/presale/views/widget.py index dab1e094b..6588d7807 100644 --- a/src/pretix/presale/views/widget.py +++ b/src/pretix/presale/views/widget.py @@ -243,6 +243,7 @@ class WidgetAPIProductList(EventListMixin, View): voucher=self.voucher, channel=self.request.sales_channel.identifier, base_qs=qs, + require_seat=None, memberships=( self.request.customer.usable_memberships( for_event=self.subevent or self.request.event, @@ -252,7 +253,7 @@ class WidgetAPIProductList(EventListMixin, View): ) grps = [] - for cat, g in item_group_by_category(items): + for cat, g in item_group_by_category([i for i in items if not i.requires_seat]): grps.append({ 'id': cat.pk if cat else None, 'name': str(cat.name) if cat else None, @@ -312,7 +313,7 @@ class WidgetAPIProductList(EventListMixin, View): } for item in g ] }) - return grps, display_add_to_cart, len(items) + return grps, display_add_to_cart, len(items), items def post_process(self, data): data['poweredby'] = get_powered_by(self.request, safelink=False) @@ -711,14 +712,30 @@ class WidgetAPIProductList(EventListMixin, View): fail = True if not fail and (ev.presale_is_running or request.event.settings.show_items_outside_presale_period): - data['items_by_category'], data['display_add_to_cart'], data['itemnum'] = self._get_items() + data['items_by_category'], data['display_add_to_cart'], data['itemnum'], items = self._get_items() data['display_add_to_cart'] = data['display_add_to_cart'] and ev.presale_is_running else: + items = [] data['items_by_category'] = [] data['display_add_to_cart'] = False data['itemnum'] = 0 data['has_seating_plan'] = ev.seating_plan is not None + data['has_seating_plan_waitinglist'] = False + if request.event.settings.waiting_list_enabled and ev.presale_is_running: + for i in items: + if not i.allow_waitinglist or not i.requires_seat: + continue + + if i.has_variations: + for v in i.available_variations: + if v.cached_availability[0] != Quota.AVAILABILITY_OK: + data['has_seating_plan_waitinglist'] = True + break + else: + if i.cached_availability[0] != Quota.AVAILABILITY_OK: + data['has_seating_plan_waitinglist'] = True + break vouchers_exist = self.request.event.get_cache().get('vouchers_exist') if vouchers_exist is None: diff --git a/src/pretix/static/pretixpresale/js/widget/widget.js b/src/pretix/static/pretixpresale/js/widget/widget.js index 3be23aacd..e29b99aed 100644 --- a/src/pretix/static/pretixpresale/js/widget/widget.js +++ b/src/pretix/static/pretixpresale/js/widget/widget.js @@ -53,6 +53,7 @@ var strings = { 'next_week': django.pgettext('widget', 'Next week'), 'previous_week': django.pgettext('widget', 'Previous week'), 'show_seating': django.pgettext('widget', 'Open seat selection'), + 'seating_plan_waiting_list': django.pgettext('widget', 'Some or all ticket categories are currently sold out. If you want, you can add yourself to the waiting list. We will then notify if seats are available again.'), 'load_more': django.pgettext('widget', 'Load more'), 'days': { 'MO': django.gettext('Mo'), @@ -793,6 +794,17 @@ Vue.component('pretix-widget-event-form', { + strings['show_seating'] + '' + '' + + '
' + '