Add order termination logic

This commit is contained in:
fnux 2020-05-08 09:31:46 +02:00
commit 89e853b490
2 changed files with 28 additions and 2 deletions

View file

@ -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):