forked from CGM_Public/pretix_original
Bind restrictions to only one item for reduced complexibility
This commit is contained in:
@@ -118,7 +118,7 @@ In our example, the implementation could look like this::
|
|||||||
|
|
||||||
# Fetch all restriction objects applied to this item
|
# Fetch all restriction objects applied to this item
|
||||||
restrictions = list(TimeRestriction.objects.filter(
|
restrictions = list(TimeRestriction.objects.filter(
|
||||||
items__in=(item,),
|
item=item,
|
||||||
).prefetch_related('variations'))
|
).prefetch_related('variations'))
|
||||||
|
|
||||||
# If we do not know anything about this item, we are done here.
|
# If we do not know anything about this item, we are done here.
|
||||||
|
|||||||
@@ -677,12 +677,15 @@ class BaseRestriction(models.Model):
|
|||||||
related_name="restrictions_%(app_label)s_%(class)s",
|
related_name="restrictions_%(app_label)s_%(class)s",
|
||||||
verbose_name=_("Event"),
|
verbose_name=_("Event"),
|
||||||
)
|
)
|
||||||
items = models.ManyToManyField(
|
item = models.ForeignKey(
|
||||||
Item,
|
Item,
|
||||||
|
blank=True,
|
||||||
|
null=True,
|
||||||
related_name="restrictions_%(app_label)s_%(class)s",
|
related_name="restrictions_%(app_label)s_%(class)s",
|
||||||
)
|
)
|
||||||
variations = models.ManyToManyField(
|
variations = models.ManyToManyField(
|
||||||
ItemVariation,
|
ItemVariation,
|
||||||
|
blank=True,
|
||||||
related_name="restrictions_%(app_label)s_%(class)s",
|
related_name="restrictions_%(app_label)s_%(class)s",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import models, migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('tixlbase', '0016_event_plugins'),
|
||||||
|
('timerestriction', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='timerestriction',
|
||||||
|
name='items',
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='timerestriction',
|
||||||
|
name='i',
|
||||||
|
field=models.ForeignKey(null=True, blank=True, related_name='restrictions_timerestriction_timerestriction', to='tixlbase.Item'),
|
||||||
|
preserve_default=True,
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='timerestriction',
|
||||||
|
name='variations',
|
||||||
|
field=models.ManyToManyField(blank=True, related_name='restrictions_timerestriction_timerestriction', to='tixlbase.ItemVariation'),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import models, migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('timerestriction', '0002_auto_20141013_1811'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RenameField(
|
||||||
|
model_name='timerestriction',
|
||||||
|
old_name='i',
|
||||||
|
new_name='item',
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -16,7 +16,7 @@ def availability_handler(sender, **kwargs):
|
|||||||
|
|
||||||
# Fetch all restriction objects applied to this item
|
# Fetch all restriction objects applied to this item
|
||||||
restrictions = list(TimeRestriction.objects.filter(
|
restrictions = list(TimeRestriction.objects.filter(
|
||||||
items__in=(item,),
|
item=item,
|
||||||
).prefetch_related('variations'))
|
).prefetch_related('variations'))
|
||||||
|
|
||||||
# If we do not know anything about this item, we are done here.
|
# If we do not know anything about this item, we are done here.
|
||||||
|
|||||||
@@ -46,7 +46,8 @@ class TimeRestrictionTest(TestCase):
|
|||||||
event=self.event,
|
event=self.event,
|
||||||
price=12
|
price=12
|
||||||
)
|
)
|
||||||
r.items.add(self.item)
|
r.item = self.item
|
||||||
|
r.save()
|
||||||
result = signals.availability_handler(
|
result = signals.availability_handler(
|
||||||
self.event, item=self.item,
|
self.event, item=self.item,
|
||||||
variations=self.item.get_all_variations(),
|
variations=self.item.get_all_variations(),
|
||||||
@@ -64,7 +65,8 @@ class TimeRestrictionTest(TestCase):
|
|||||||
event=self.event,
|
event=self.event,
|
||||||
price=12
|
price=12
|
||||||
)
|
)
|
||||||
r.items.add(self.item)
|
r.item = self.item
|
||||||
|
r.save()
|
||||||
result = signals.availability_handler(
|
result = signals.availability_handler(
|
||||||
self.event, item=self.item,
|
self.event, item=self.item,
|
||||||
variations=self.item.get_all_variations(),
|
variations=self.item.get_all_variations(),
|
||||||
@@ -91,7 +93,8 @@ class TimeRestrictionTest(TestCase):
|
|||||||
event=self.event,
|
event=self.event,
|
||||||
price=12
|
price=12
|
||||||
)
|
)
|
||||||
r.items.add(self.item)
|
r.item = self.item
|
||||||
|
r.save()
|
||||||
result = signals.availability_handler(
|
result = signals.availability_handler(
|
||||||
self.event, item=self.item,
|
self.event, item=self.item,
|
||||||
variations=self.item.get_all_variations(),
|
variations=self.item.get_all_variations(),
|
||||||
@@ -108,14 +111,16 @@ class TimeRestrictionTest(TestCase):
|
|||||||
event=self.event,
|
event=self.event,
|
||||||
price=12
|
price=12
|
||||||
)
|
)
|
||||||
r1.items.add(self.item)
|
r1.item = self.item
|
||||||
|
r1.save()
|
||||||
r2 = TimeRestriction.objects.create(
|
r2 = TimeRestriction.objects.create(
|
||||||
timeframe_from=now() - timedelta(days=3),
|
timeframe_from=now() - timedelta(days=3),
|
||||||
timeframe_to=now() + timedelta(days=5),
|
timeframe_to=now() + timedelta(days=5),
|
||||||
event=self.event,
|
event=self.event,
|
||||||
price=8
|
price=8
|
||||||
)
|
)
|
||||||
r2.items.add(self.item)
|
r2.item = self.item
|
||||||
|
r2.save()
|
||||||
result = signals.availability_handler(
|
result = signals.availability_handler(
|
||||||
self.event, item=self.item,
|
self.event, item=self.item,
|
||||||
variations=self.item.get_all_variations(),
|
variations=self.item.get_all_variations(),
|
||||||
@@ -133,14 +138,16 @@ class TimeRestrictionTest(TestCase):
|
|||||||
event=self.event,
|
event=self.event,
|
||||||
price=12
|
price=12
|
||||||
)
|
)
|
||||||
r1.items.add(self.item)
|
r1.item = self.item
|
||||||
|
r1.save()
|
||||||
r2 = TimeRestriction.objects.create(
|
r2 = TimeRestriction.objects.create(
|
||||||
timeframe_from=now() + timedelta(days=1),
|
timeframe_from=now() + timedelta(days=1),
|
||||||
timeframe_to=now() + timedelta(days=7),
|
timeframe_to=now() + timedelta(days=7),
|
||||||
event=self.event,
|
event=self.event,
|
||||||
price=8
|
price=8
|
||||||
)
|
)
|
||||||
r2.items.add(self.item)
|
r2.item = self.item
|
||||||
|
r2.save()
|
||||||
result = signals.availability_handler(
|
result = signals.availability_handler(
|
||||||
self.event, item=self.item,
|
self.event, item=self.item,
|
||||||
variations=self.item.get_all_variations(),
|
variations=self.item.get_all_variations(),
|
||||||
@@ -158,14 +165,16 @@ class TimeRestrictionTest(TestCase):
|
|||||||
event=self.event,
|
event=self.event,
|
||||||
price=12
|
price=12
|
||||||
)
|
)
|
||||||
r1.items.add(self.item)
|
r1.item = self.item
|
||||||
|
r1.save()
|
||||||
r2 = TimeRestriction.objects.create(
|
r2 = TimeRestriction.objects.create(
|
||||||
timeframe_from=now() + timedelta(days=4),
|
timeframe_from=now() + timedelta(days=4),
|
||||||
timeframe_to=now() + timedelta(days=7),
|
timeframe_to=now() + timedelta(days=7),
|
||||||
event=self.event,
|
event=self.event,
|
||||||
price=8
|
price=8
|
||||||
)
|
)
|
||||||
r2.items.add(self.item)
|
r2.item = self.item
|
||||||
|
r2.save()
|
||||||
result = signals.availability_handler(
|
result = signals.availability_handler(
|
||||||
self.event, item=self.item,
|
self.event, item=self.item,
|
||||||
variations=self.item.get_all_variations(),
|
variations=self.item.get_all_variations(),
|
||||||
@@ -183,14 +192,16 @@ class TimeRestrictionTest(TestCase):
|
|||||||
event=self.event,
|
event=self.event,
|
||||||
price=12
|
price=12
|
||||||
)
|
)
|
||||||
r1.items.add(self.item)
|
r1.item = self.item
|
||||||
|
r1.save()
|
||||||
r2 = TimeRestriction.objects.create(
|
r2 = TimeRestriction.objects.create(
|
||||||
timeframe_from=now() + timedelta(days=4),
|
timeframe_from=now() + timedelta(days=4),
|
||||||
timeframe_to=now() + timedelta(days=7),
|
timeframe_to=now() + timedelta(days=7),
|
||||||
event=self.event,
|
event=self.event,
|
||||||
price=8
|
price=8
|
||||||
)
|
)
|
||||||
r2.items.add(self.item)
|
r2.item = self.item
|
||||||
|
r2.save()
|
||||||
result = signals.availability_handler(
|
result = signals.availability_handler(
|
||||||
self.event, item=self.item,
|
self.event, item=self.item,
|
||||||
variations=self.item.get_all_variations(),
|
variations=self.item.get_all_variations(),
|
||||||
@@ -213,7 +224,8 @@ class TimeRestrictionTest(TestCase):
|
|||||||
event=self.event,
|
event=self.event,
|
||||||
price=12
|
price=12
|
||||||
)
|
)
|
||||||
r1.items.add(self.item)
|
r1.item = self.item
|
||||||
|
r1.save()
|
||||||
r1.variations.add(v1)
|
r1.variations.add(v1)
|
||||||
result = signals.availability_handler(
|
result = signals.availability_handler(
|
||||||
self.event, item=self.item,
|
self.event, item=self.item,
|
||||||
@@ -241,14 +253,16 @@ class TimeRestrictionTest(TestCase):
|
|||||||
event=self.event,
|
event=self.event,
|
||||||
price=12
|
price=12
|
||||||
)
|
)
|
||||||
r1.items.add(self.item)
|
r1.item = self.item
|
||||||
|
r1.save()
|
||||||
r2 = TimeRestriction.objects.create(
|
r2 = TimeRestriction.objects.create(
|
||||||
timeframe_from=now() - timedelta(days=5),
|
timeframe_from=now() - timedelta(days=5),
|
||||||
timeframe_to=now() + timedelta(days=1),
|
timeframe_to=now() + timedelta(days=1),
|
||||||
event=self.event,
|
event=self.event,
|
||||||
price=8
|
price=8
|
||||||
)
|
)
|
||||||
r2.items.add(self.item)
|
r2.item = self.item
|
||||||
|
r2.save()
|
||||||
r2.variations.add(v1)
|
r2.variations.add(v1)
|
||||||
r3 = TimeRestriction.objects.create(
|
r3 = TimeRestriction.objects.create(
|
||||||
timeframe_from=now() - timedelta(days=5),
|
timeframe_from=now() - timedelta(days=5),
|
||||||
@@ -256,7 +270,8 @@ class TimeRestrictionTest(TestCase):
|
|||||||
event=self.event,
|
event=self.event,
|
||||||
price=10
|
price=10
|
||||||
)
|
)
|
||||||
r3.items.add(self.item)
|
r3.item = self.item
|
||||||
|
r3.save()
|
||||||
r3.variations.add(v2)
|
r3.variations.add(v2)
|
||||||
result = signals.availability_handler(
|
result = signals.availability_handler(
|
||||||
self.event, item=self.item,
|
self.event, item=self.item,
|
||||||
@@ -285,7 +300,8 @@ class TimeRestrictionTest(TestCase):
|
|||||||
event=self.event,
|
event=self.event,
|
||||||
price=12
|
price=12
|
||||||
)
|
)
|
||||||
r1.items.add(self.item)
|
r1.item = self.item
|
||||||
|
r1.save()
|
||||||
r1.variations.add(v1)
|
r1.variations.add(v1)
|
||||||
r2 = TimeRestriction.objects.create(
|
r2 = TimeRestriction.objects.create(
|
||||||
timeframe_from=now() - timedelta(days=5),
|
timeframe_from=now() - timedelta(days=5),
|
||||||
@@ -293,7 +309,8 @@ class TimeRestrictionTest(TestCase):
|
|||||||
event=self.event,
|
event=self.event,
|
||||||
price=8
|
price=8
|
||||||
)
|
)
|
||||||
r2.items.add(self.item)
|
r2.item = self.item
|
||||||
|
r2.save()
|
||||||
r2.variations.add(v1)
|
r2.variations.add(v1)
|
||||||
r3 = TimeRestriction.objects.create(
|
r3 = TimeRestriction.objects.create(
|
||||||
timeframe_from=now() - timedelta(days=5),
|
timeframe_from=now() - timedelta(days=5),
|
||||||
@@ -301,7 +318,8 @@ class TimeRestrictionTest(TestCase):
|
|||||||
event=self.event,
|
event=self.event,
|
||||||
price=8
|
price=8
|
||||||
)
|
)
|
||||||
r3.items.add(self.item)
|
r3.item = self.item
|
||||||
|
r3.save()
|
||||||
r3.variations.add(v2)
|
r3.variations.add(v2)
|
||||||
result = signals.availability_handler(
|
result = signals.availability_handler(
|
||||||
self.event, item=self.item,
|
self.event, item=self.item,
|
||||||
|
|||||||
Reference in New Issue
Block a user