diff --git a/src/pretix/api/serializers/item.py b/src/pretix/api/serializers/item.py index 7133776f8..21b7d07ec 100644 --- a/src/pretix/api/serializers/item.py +++ b/src/pretix/api/serializers/item.py @@ -272,7 +272,7 @@ class ItemSerializer(SalesChannelMigrationMixin, I18nAwareModelSerializer): 'require_voucher', 'hide_without_voucher', 'allow_cancel', 'require_bundling', 'min_per_order', 'max_per_order', 'checkin_attention', 'checkin_text', 'has_variations', 'variations', 'addons', 'bundles', 'original_price', 'require_approval', 'generate_tickets', - 'show_quota_left', 'hidden_if_available', 'hidden_if_item_available', 'allow_waitinglist', + 'show_quota_left', 'hidden_if_available', 'hidden_if_item_available', 'hidden_if_item_available_mode', 'allow_waitinglist', 'issue_giftcard', 'meta_data', 'require_membership', 'require_membership_types', 'require_membership_hidden', 'grant_membership_type', 'grant_membership_duration_like_event', 'grant_membership_duration_days', diff --git a/src/pretix/base/models/items.py b/src/pretix/base/models/items.py index b3a51dff7..35deab286 100644 --- a/src/pretix/base/models/items.py +++ b/src/pretix/base/models/items.py @@ -600,6 +600,11 @@ class Item(LoggedModel): "be a short period in which both products are visible while all tickets of the referenced " "product are reserved, but not yet sold.") ) + hidden_if_item_available_mode = models.CharField( + choices=UNAVAIL_MODES, + default=UNAVAIL_MODE_HIDDEN, + max_length=16, + ) require_voucher = models.BooleanField( verbose_name=_('This product can only be bought using a voucher.'), default=False, @@ -889,6 +894,8 @@ class Item(LoggedModel): return 'available_from' elif subevent_item and subevent_item.available_until and subevent_item.available_until < now_dt: return 'available_until' + elif self.hidden_if_item_available and self._dependency_available: + return 'hidden_if_item_available' else: return None diff --git a/src/pretix/control/forms/item.py b/src/pretix/control/forms/item.py index 29652baa9..f1a218c67 100644 --- a/src/pretix/control/forms/item.py +++ b/src/pretix/control/forms/item.py @@ -476,6 +476,7 @@ class ItemCreateForm(I18nModelForm): 'show_quota_left', 'hidden_if_available', 'hidden_if_item_available', + 'hidden_if_item_available_mode', 'require_bundling', 'require_membership', 'grant_membership_type', @@ -666,6 +667,11 @@ class ItemUpdateForm(I18nModelForm): attrs={'data-checkbox-dependency': '#id_require_voucher'} ) + self.fields['hidden_if_item_available_mode'].widget = ButtonGroupRadioSelect( + choices=self.fields['hidden_if_item_available_mode'].choices, + option_icons=Item.UNAVAIL_MODE_ICONS + ) + if self.instance.hidden_if_available_id: self.fields['hidden_if_available'].queryset = self.event.quotas.all() self.fields['hidden_if_available'].help_text = format_html( @@ -847,6 +853,7 @@ class ItemUpdateForm(I18nModelForm): 'show_quota_left', 'hidden_if_available', 'hidden_if_item_available', + 'hidden_if_item_available_mode', 'issue_giftcard', 'require_membership', 'require_membership_types', diff --git a/src/pretix/control/templates/pretixcontrol/item/index.html b/src/pretix/control/templates/pretixcontrol/item/index.html index abea1a90a..6aa712436 100644 --- a/src/pretix/control/templates/pretixcontrol/item/index.html +++ b/src/pretix/control/templates/pretixcontrol/item/index.html @@ -172,7 +172,7 @@ {% if form.hidden_if_available %} {% bootstrap_field form.hidden_if_available layout="control" horizontal_field_class="col-md-7" %} {% endif %} - {% bootstrap_field form.hidden_if_item_available layout="control" horizontal_field_class="col-md-7" %} + {% bootstrap_field form.hidden_if_item_available visibility_field=form.hidden_if_item_available_mode layout="control_with_visibility" %} {% for v in formsets.values %}