Add order termination logic
This commit is contained in:
parent
1b97fc8fc7
commit
89e853b490
2 changed files with 28 additions and 2 deletions
|
|
@ -553,8 +553,14 @@ class Bill(models.Model):
|
|||
|
||||
@property
|
||||
def final(self):
|
||||
# A bill is final when its ending date is passed.
|
||||
return self.ending_date < timezone.now()
|
||||
# A bill is final when its ending date is passed, or when all of its
|
||||
# orders have been terminated.
|
||||
every_order_terminated = True
|
||||
billing_period_is_over = self.ending_date < timezone.now()
|
||||
for order in self.order_set.all():
|
||||
every_order_terminated = every_order_terminated and order.is_terminated
|
||||
|
||||
return billing_period_is_over or every_order_terminated
|
||||
|
||||
def activate_products(self):
|
||||
for order in self.order_set.all():
|
||||
|
|
@ -850,6 +856,14 @@ class Order(models.Model):
|
|||
on_delete=models.PROTECT,
|
||||
blank=True,
|
||||
null=True)
|
||||
@property
|
||||
def is_terminated(self):
|
||||
return self.ending_date != None and self.ending_date < timezone.now()
|
||||
|
||||
def terminate(self):
|
||||
if not self.is_terminated:
|
||||
self.ending_date = timezone.now()
|
||||
self.save()
|
||||
|
||||
# Trigger initial bill generation at order creation.
|
||||
def save(self, *args, **kwargs):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue