|
|
@@ -11,20 +11,21 @@ from django.core.exceptions import ObjectDoesNotExist, PermissionDenied
|
|
11
|
11
|
from oscar.apps.basket.managers import OpenBasketManager, SavedBasketManager
|
|
12
|
12
|
from oscar.templatetags.currency_filters import currency
|
|
13
|
13
|
|
|
14
|
|
-# Basket statuses
|
|
15
|
|
-# - Frozen is for when a basket is in the process of being submitted
|
|
16
|
|
-# and we need to prevent any changes to it.
|
|
17
|
|
-OPEN, MERGED, SAVED, FROZEN, SUBMITTED = (
|
|
18
|
|
- "Open", "Merged", "Saved", "Frozen", "Submitted")
|
|
19
|
|
-
|
|
20
|
14
|
|
|
21
|
15
|
class AbstractBasket(models.Model):
|
|
22
|
16
|
"""
|
|
23
|
17
|
Basket object
|
|
24
|
18
|
"""
|
|
25
|
|
- # Baskets can be anonymously owned (which are merged if the user signs in)
|
|
|
19
|
+ # Baskets can be anonymously owned - hence this field is nullable. When a
|
|
|
20
|
+ # anon user signs in, their two baskets are merged.
|
|
26
|
21
|
owner = models.ForeignKey('auth.User', related_name='baskets',
|
|
27
|
22
|
null=True, verbose_name=_("Owner"))
|
|
|
23
|
+
|
|
|
24
|
+ # Basket statuses
|
|
|
25
|
+ # - Frozen is for when a basket is in the process of being submitted
|
|
|
26
|
+ # and we need to prevent any changes to it.
|
|
|
27
|
+ OPEN, MERGED, SAVED, FROZEN, SUBMITTED = (
|
|
|
28
|
+ "Open", "Merged", "Saved", "Frozen", "Submitted")
|
|
28
|
29
|
STATUS_CHOICES = (
|
|
29
|
30
|
(OPEN, _("Open - currently active")),
|
|
30
|
31
|
(MERGED, _("Merged - superceded by another basket")),
|
|
|
@@ -34,12 +35,13 @@ class AbstractBasket(models.Model):
|
|
34
|
35
|
)
|
|
35
|
36
|
status = models.CharField(_("Status"), max_length=128, default=OPEN,
|
|
36
|
37
|
choices=STATUS_CHOICES)
|
|
|
38
|
+
|
|
37
|
39
|
vouchers = models.ManyToManyField('voucher.Voucher', null=True,
|
|
38
|
40
|
verbose_name=_("Vouchers"))
|
|
39
|
41
|
|
|
40
|
|
- date_created = models.DateTimeField(_("Date Created"), auto_now_add=True)
|
|
41
|
|
- date_merged = models.DateTimeField(_("Date Merged"), null=True, blank=True)
|
|
42
|
|
- date_submitted = models.DateTimeField(_("Date Submitted"), null=True,
|
|
|
42
|
+ date_created = models.DateTimeField(_("Date created"), auto_now_add=True)
|
|
|
43
|
+ date_merged = models.DateTimeField(_("Date merged"), null=True, blank=True)
|
|
|
44
|
+ date_submitted = models.DateTimeField(_("Date submitted"), null=True,
|
|
43
|
45
|
blank=True)
|
|
44
|
46
|
|
|
45
|
47
|
# Only if a basket is in one of these statuses can it be edited
|
|
|
@@ -103,7 +105,7 @@ class AbstractBasket(models.Model):
|
|
103
|
105
|
|
|
104
|
106
|
def flush(self):
|
|
105
|
107
|
"""Remove all lines from basket."""
|
|
106
|
|
- if self.status == FROZEN:
|
|
|
108
|
+ if self.status == self.FROZEN:
|
|
107
|
109
|
raise PermissionDenied("A frozen basket cannot be flushed")
|
|
108
|
110
|
self.lines.all().delete()
|
|
109
|
111
|
self._lines = None
|
|
|
@@ -201,7 +203,7 @@ class AbstractBasket(models.Model):
|
|
201
|
203
|
"""
|
|
202
|
204
|
for line_to_merge in basket.all_lines():
|
|
203
|
205
|
self.merge_line(line_to_merge, add_quantities)
|
|
204
|
|
- basket.status = MERGED
|
|
|
206
|
+ basket.status = self.MERGED
|
|
205
|
207
|
basket.date_merged = now()
|
|
206
|
208
|
basket.save()
|
|
207
|
209
|
self._lines = None
|
|
|
@@ -210,19 +212,19 @@ class AbstractBasket(models.Model):
|
|
210
|
212
|
"""
|
|
211
|
213
|
Freezes the basket so it cannot be modified.
|
|
212
|
214
|
"""
|
|
213
|
|
- self.status = FROZEN
|
|
|
215
|
+ self.status = self.FROZEN
|
|
214
|
216
|
self.save()
|
|
215
|
217
|
|
|
216
|
218
|
def thaw(self):
|
|
217
|
219
|
"""
|
|
218
|
220
|
Unfreezes a basket so it can be modified again
|
|
219
|
221
|
"""
|
|
220
|
|
- self.status = OPEN
|
|
|
222
|
+ self.status = self.OPEN
|
|
221
|
223
|
self.save()
|
|
222
|
224
|
|
|
223
|
225
|
def set_as_submitted(self):
|
|
224
|
226
|
"""Mark this basket as submitted."""
|
|
225
|
|
- self.status = SUBMITTED
|
|
|
227
|
+ self.status = self.SUBMITTED
|
|
226
|
228
|
self.date_submitted = now()
|
|
227
|
229
|
self.save()
|
|
228
|
230
|
|
|
|
@@ -428,7 +430,7 @@ class AbstractBasket(models.Model):
|
|
428
|
430
|
return 0
|
|
429
|
431
|
|
|
430
|
432
|
def is_submitted(self):
|
|
431
|
|
- return self.status == SUBMITTED
|
|
|
433
|
+ return self.status == self.SUBMITTED
|
|
432
|
434
|
|
|
433
|
435
|
|
|
434
|
436
|
class AbstractLine(models.Model):
|