Consistently use one_time_price instead of setup_fee

This commit is contained in:
fnux 2020-03-03 11:27:35 +01:00
commit 11e22f5001
6 changed files with 39 additions and 19 deletions

View file

@ -129,11 +129,15 @@ class BillRecord():
def __init__(self, bill, order_record):
self.bill = bill
self.order = order_record.order
self.setup_fee = order_record.setup_fee
self.recurring_price = order_record.recurring_price
self.recurring_period = order_record.recurring_period
self.description = order_record.description
if self.order.starting_date > self.bill.starting_date:
self.one_time_price = one_time_price
else:
self.one_time_price = 0
@property
def recurring_count(self):
# Compute billing delta.
@ -178,17 +182,15 @@ class BillRecord():
elif self.recurring_period == RecurringPeriod.PER_SECOND:
seconds = ceil(billed_delta / timedelta(seconds=1))
return Decimal(seconds)
elif self.recurring_period == RecurringPeriod.ONE_TIME:
return Decimal(0)
else:
raise Exception('Unsupported recurring period: {}.'.
format(record.recurring_period))
@property
def amount(self):
amount = self.recurring_count * self.recurring_price
if self.order.starting_date > self.bill.starting_date:
amount += self.setup_fee
return amount
return self.recurring_price * self.recurring_count + self.one_time_price
###
# Orders.
@ -231,22 +233,22 @@ class Order(models.Model):
return OrderRecord.objects.filter(order=self)
@property
def setup_fee(self):
return reduce(lambda acc, record: acc + record.setup_fee, self.records, 0)
def one_time_price(self):
return reduce(lambda acc, record: acc + record.one_time_price, self.records, 0)
@property
def recurring_price(self):
return reduce(lambda acc, record: acc + record.recurring_price, self.records, 0)
def add_record(self, setup_fee, recurring_price, description):
def add_record(self, one_time_price, recurring_price, description):
OrderRecord.objects.create(order=self,
setup_fee=setup_fee,
one_time_price=one_time_price,
recurring_price=recurring_price,
description=description)
class OrderRecord(models.Model):
order = models.ForeignKey(Order, on_delete=models.CASCADE)
setup_fee = models.DecimalField(default=0.0,
one_time_price = models.DecimalField(default=0.0,
max_digits=AMOUNT_MAX_DIGITS,
decimal_places=AMOUNT_DECIMALS,
validators=[MinValueValidator(0)])
@ -303,7 +305,7 @@ class Product(models.Model):
pass # To be implemented in child.
@property
def setup_fee(self):
def one_time_price(self):
return 0
@property