diff --git a/src/pretix/base/migrations/0190_quota_ignore_for_event_availability.py b/src/pretix/base/migrations/0190_quota_ignore_for_event_availability.py new file mode 100644 index 0000000000..304345d9fc --- /dev/null +++ b/src/pretix/base/migrations/0190_quota_ignore_for_event_availability.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.3 on 2021-05-27 09:50 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('pretixbase', '0189_auto_20210525_1311'), + ] + + operations = [ + migrations.AddField( + model_name='quota', + name='ignore_for_event_availability', + field=models.BooleanField(default=False), + ), + ] diff --git a/src/pretix/base/models/event.py b/src/pretix/base/models/event.py index 16b2efd825..4b3a965000 100644 --- a/src/pretix/base/models/event.py +++ b/src/pretix/base/models/event.py @@ -260,7 +260,9 @@ class EventMixin: Prefetch( 'quotas', to_attr='active_quotas', - queryset=Quota.objects.using(settings.DATABASE_REPLICA).annotate( + queryset=Quota.objects.using(settings.DATABASE_REPLICA).filter( + ignore_for_event_availability=False + ).annotate( active_items=Subquery(sq_active_item, output_field=models.TextField()), active_variations=Subquery(sq_active_variation, output_field=models.TextField()), ).exclude( diff --git a/src/pretix/base/models/items.py b/src/pretix/base/models/items.py index 6204bc666d..5f9f24c657 100644 --- a/src/pretix/base/models/items.py +++ b/src/pretix/base/models/items.py @@ -1517,6 +1517,14 @@ class Quota(LoggedModel): verbose_name=_("Variations") ) + ignore_for_event_availability = models.BooleanField( + verbose_name=_('Ignore this quota when determining event availability'), + help_text=_('If you enable this, this quota will be ignored when determining event availability in your event calendar. ' + 'This is useful e.g. for merchandise that is added to each event but should not stop the event from being shown ' + 'as sold out.'), + default=False, + ) + close_when_sold_out = models.BooleanField( verbose_name=_('Close this quota permanently once it is sold out'), help_text=_('If you enable this, when the quota is sold out once, no more tickets will be sold, ' diff --git a/src/pretix/control/forms/item.py b/src/pretix/control/forms/item.py index dc20384ef0..bdc5e34a96 100644 --- a/src/pretix/control/forms/item.py +++ b/src/pretix/control/forms/item.py @@ -244,6 +244,7 @@ class QuotaForm(I18nModelForm): 'subevent', 'close_when_sold_out', 'release_after_exit', + 'ignore_for_event_availability', ] field_classes = { 'subevent': SafeModelChoiceField, diff --git a/src/pretix/control/templates/pretixcontrol/items/quota_edit.html b/src/pretix/control/templates/pretixcontrol/items/quota_edit.html index 9221b673cd..246493cdaf 100644 --- a/src/pretix/control/templates/pretixcontrol/items/quota_edit.html +++ b/src/pretix/control/templates/pretixcontrol/items/quota_edit.html @@ -41,6 +41,7 @@ {% bootstrap_field form.close_when_sold_out layout="control" %} {% bootstrap_field form.release_after_exit layout="control" %} + {% bootstrap_field form.ignore_for_event_availability layout="control" %}