Bind restrictions to only one item for reduced complexibility

This commit is contained in:
Raphael Michel
2014-10-13 20:17:57 +02:00
parent b2796b1406
commit 2967e64e69
6 changed files with 91 additions and 21 deletions

View File

@@ -677,12 +677,15 @@ class BaseRestriction(models.Model):
related_name="restrictions_%(app_label)s_%(class)s",
verbose_name=_("Event"),
)
items = models.ManyToManyField(
item = models.ForeignKey(
Item,
blank=True,
null=True,
related_name="restrictions_%(app_label)s_%(class)s",
)
variations = models.ManyToManyField(
ItemVariation,
blank=True,
related_name="restrictions_%(app_label)s_%(class)s",
)

View File

@@ -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'),
),
]

View File

@@ -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',
),
]

View File

@@ -16,7 +16,7 @@ def availability_handler(sender, **kwargs):
# Fetch all restriction objects applied to this item
restrictions = list(TimeRestriction.objects.filter(
items__in=(item,),
item=item,
).prefetch_related('variations'))
# If we do not know anything about this item, we are done here.

View File

@@ -46,7 +46,8 @@ class TimeRestrictionTest(TestCase):
event=self.event,
price=12
)
r.items.add(self.item)
r.item = self.item
r.save()
result = signals.availability_handler(
self.event, item=self.item,
variations=self.item.get_all_variations(),
@@ -64,7 +65,8 @@ class TimeRestrictionTest(TestCase):
event=self.event,
price=12
)
r.items.add(self.item)
r.item = self.item
r.save()
result = signals.availability_handler(
self.event, item=self.item,
variations=self.item.get_all_variations(),
@@ -91,7 +93,8 @@ class TimeRestrictionTest(TestCase):
event=self.event,
price=12
)
r.items.add(self.item)
r.item = self.item
r.save()
result = signals.availability_handler(
self.event, item=self.item,
variations=self.item.get_all_variations(),
@@ -108,14 +111,16 @@ class TimeRestrictionTest(TestCase):
event=self.event,
price=12
)
r1.items.add(self.item)
r1.item = self.item
r1.save()
r2 = TimeRestriction.objects.create(
timeframe_from=now() - timedelta(days=3),
timeframe_to=now() + timedelta(days=5),
event=self.event,
price=8
)
r2.items.add(self.item)
r2.item = self.item
r2.save()
result = signals.availability_handler(
self.event, item=self.item,
variations=self.item.get_all_variations(),
@@ -133,14 +138,16 @@ class TimeRestrictionTest(TestCase):
event=self.event,
price=12
)
r1.items.add(self.item)
r1.item = self.item
r1.save()
r2 = TimeRestriction.objects.create(
timeframe_from=now() + timedelta(days=1),
timeframe_to=now() + timedelta(days=7),
event=self.event,
price=8
)
r2.items.add(self.item)
r2.item = self.item
r2.save()
result = signals.availability_handler(
self.event, item=self.item,
variations=self.item.get_all_variations(),
@@ -158,14 +165,16 @@ class TimeRestrictionTest(TestCase):
event=self.event,
price=12
)
r1.items.add(self.item)
r1.item = self.item
r1.save()
r2 = TimeRestriction.objects.create(
timeframe_from=now() + timedelta(days=4),
timeframe_to=now() + timedelta(days=7),
event=self.event,
price=8
)
r2.items.add(self.item)
r2.item = self.item
r2.save()
result = signals.availability_handler(
self.event, item=self.item,
variations=self.item.get_all_variations(),
@@ -183,14 +192,16 @@ class TimeRestrictionTest(TestCase):
event=self.event,
price=12
)
r1.items.add(self.item)
r1.item = self.item
r1.save()
r2 = TimeRestriction.objects.create(
timeframe_from=now() + timedelta(days=4),
timeframe_to=now() + timedelta(days=7),
event=self.event,
price=8
)
r2.items.add(self.item)
r2.item = self.item
r2.save()
result = signals.availability_handler(
self.event, item=self.item,
variations=self.item.get_all_variations(),
@@ -213,7 +224,8 @@ class TimeRestrictionTest(TestCase):
event=self.event,
price=12
)
r1.items.add(self.item)
r1.item = self.item
r1.save()
r1.variations.add(v1)
result = signals.availability_handler(
self.event, item=self.item,
@@ -241,14 +253,16 @@ class TimeRestrictionTest(TestCase):
event=self.event,
price=12
)
r1.items.add(self.item)
r1.item = self.item
r1.save()
r2 = TimeRestriction.objects.create(
timeframe_from=now() - timedelta(days=5),
timeframe_to=now() + timedelta(days=1),
event=self.event,
price=8
)
r2.items.add(self.item)
r2.item = self.item
r2.save()
r2.variations.add(v1)
r3 = TimeRestriction.objects.create(
timeframe_from=now() - timedelta(days=5),
@@ -256,7 +270,8 @@ class TimeRestrictionTest(TestCase):
event=self.event,
price=10
)
r3.items.add(self.item)
r3.item = self.item
r3.save()
r3.variations.add(v2)
result = signals.availability_handler(
self.event, item=self.item,
@@ -285,7 +300,8 @@ class TimeRestrictionTest(TestCase):
event=self.event,
price=12
)
r1.items.add(self.item)
r1.item = self.item
r1.save()
r1.variations.add(v1)
r2 = TimeRestriction.objects.create(
timeframe_from=now() - timedelta(days=5),
@@ -293,7 +309,8 @@ class TimeRestrictionTest(TestCase):
event=self.event,
price=8
)
r2.items.add(self.item)
r2.item = self.item
r2.save()
r2.variations.add(v1)
r3 = TimeRestriction.objects.create(
timeframe_from=now() - timedelta(days=5),
@@ -301,7 +318,8 @@ class TimeRestrictionTest(TestCase):
event=self.event,
price=8
)
r3.items.add(self.item)
r3.item = self.item
r3.save()
r3.variations.add(v2)
result = signals.availability_handler(
self.event, item=self.item,