|
|
@@ -24,7 +24,18 @@ class Condition(models.Model):
|
|
24
|
24
|
range = models.ForeignKey('offer.Range')
|
|
25
|
25
|
type = models.CharField(max_length=128, choices=TYPE_CHOICES)
|
|
26
|
26
|
value = models.FloatField()
|
|
27
|
|
-
|
|
|
27
|
+
|
|
|
28
|
+ def is_satisfied(self, basket):
|
|
|
29
|
+ """
|
|
|
30
|
+ Determines whether a given basket meets this condition
|
|
|
31
|
+ """
|
|
|
32
|
+ if self.type == COUNT:
|
|
|
33
|
+ return self.range.filter_basket(basket).num_items >= self.value
|
|
|
34
|
+ elif self.type == VALUE:
|
|
|
35
|
+ return self.range.filter_basket(basket).value >= self.value
|
|
|
36
|
+ else:
|
|
|
37
|
+ return False
|
|
|
38
|
+
|
|
28
|
39
|
|
|
29
|
40
|
class Benefit(models.Model):
|
|
30
|
41
|
PERCENTAGE, FIXED = ("Percentage", "Absolute")
|
|
|
@@ -35,13 +46,16 @@ class Benefit(models.Model):
|
|
35
|
46
|
range = models.ForeignKey('offer.Range')
|
|
36
|
47
|
type = models.CharField(max_length=128, choices=TYPE_CHOICES)
|
|
37
|
48
|
value = models.FloatField()
|
|
|
49
|
+
|
|
|
50
|
+ def apply(self, basket):
|
|
|
51
|
+ return basket
|
|
38
|
52
|
|
|
39
|
53
|
|
|
40
|
54
|
class Range(models.Model):
|
|
41
|
55
|
name = models.CharField(max_length=128)
|
|
42
|
56
|
includes_all_products = models.BooleanField(default=False)
|
|
43
|
|
- included_products = models.ManyToManyField('product.Item', related_name='includes')
|
|
44
|
|
- excluded_products = models.ManyToManyField('product.Item', related_name='excludes')
|
|
|
57
|
+ included_products = models.ManyToManyField('product.Item', related_name='includes', blank=True)
|
|
|
58
|
+ excluded_products = models.ManyToManyField('product.Item', related_name='excludes', blank=True)
|
|
45
|
59
|
|
|
46
|
60
|
|
|
47
|
61
|
class Voucher(models.Model):
|