Move Order.add_record to save hook in abstract Product
This commit is contained in:
parent
ff133e81b7
commit
a7e9f3c09d
3 changed files with 14 additions and 31 deletions
|
@ -476,13 +476,6 @@ class Order(models.Model):
|
|||
def recurring_price(self):
|
||||
return reduce(lambda acc, record: acc + record.recurring_price, self.records, 0)
|
||||
|
||||
def add_record(self, one_time_price, recurring_price, description):
|
||||
OrderRecord.objects.create(order=self,
|
||||
one_time_price=one_time_price,
|
||||
recurring_price=recurring_price,
|
||||
description=description)
|
||||
|
||||
|
||||
class OrderRecord(models.Model):
|
||||
"""
|
||||
Order records store billing informations for products: the actual product
|
||||
|
@ -543,6 +536,20 @@ class Product(UncloudModel):
|
|||
# Default period for all products
|
||||
default_recurring_period = RecurringPeriod.PER_MONTH
|
||||
|
||||
# Used to save records.
|
||||
def save(self, *args, **kwargs):
|
||||
# _state.adding is switched to false after super(...) call.
|
||||
being_created = self._state.adding
|
||||
|
||||
super(Product, self).save(*args, **kwargs)
|
||||
|
||||
# Make sure we only create records on creation.
|
||||
if being_created:
|
||||
record = OrderRecord(
|
||||
one_time_price=self.one_time_price,
|
||||
recurring_price=self.recurring_price(self.recurring_period),
|
||||
description=self.description)
|
||||
self.order.orderrecord_set.add(record, bulk=False)
|
||||
|
||||
@property
|
||||
def recurring_price(self, recurring_period=RecurringPeriod.PER_MONTH):
|
||||
|
|
|
@ -127,11 +127,6 @@ class VMProductViewSet(ProductViewSet):
|
|||
# Create VM.
|
||||
vm = serializer.save(owner=request.user, order=order)
|
||||
|
||||
# Add Product record to order (VM is mutable, allows to keep history in order).
|
||||
# XXX: Move this to some kind of on_create hook in parent Product class?
|
||||
order.add_record(vm.one_time_price,
|
||||
vm.recurring_price(order.recurring_period), vm.description)
|
||||
|
||||
return Response(serializer.data)
|
||||
|
||||
|
||||
|
@ -215,9 +210,4 @@ class DCLCreateVMProductViewSet(ProductViewSet):
|
|||
# Create VM.
|
||||
vm = serializer.save(owner=request.user, order=order)
|
||||
|
||||
# Add Product record to order (VM is mutable, allows to keep history in order).
|
||||
# XXX: Move this to some kind of on_create hook in parent Product class?
|
||||
order.add_record(vm.one_time_price,
|
||||
vm.recurring_price(order.recurring_period), vm.description)
|
||||
|
||||
return Response(serializer.data)
|
||||
|
|
|
@ -38,24 +38,10 @@ class MatrixServiceProductViewSet(ProductViewSet):
|
|||
vm_data['order'] = order
|
||||
vm = VMProduct.objects.create(**vm_data)
|
||||
|
||||
# XXX: Move this to some kind of on_create hook in parent
|
||||
# Product class?
|
||||
order.add_record(
|
||||
vm.one_time_price,
|
||||
vm.recurring_price(order.recurring_period),
|
||||
vm.description)
|
||||
|
||||
# Create service.
|
||||
service = serializer.save(
|
||||
order=order,
|
||||
owner=self.request.user,
|
||||
vm=vm)
|
||||
|
||||
# XXX: Move this to some kind of on_create hook in parent
|
||||
# Product class?
|
||||
order.add_record(
|
||||
service.one_time_price,
|
||||
service.recurring_price(order.recurring_period),
|
||||
service.description)
|
||||
|
||||
return Response(serializer.data)
|
||||
|
|
Loading…
Reference in a new issue