Display allr elevant values on Bill serializer/page

This commit is contained in:
fnux 2020-04-18 10:43:23 +02:00
parent a49fe6ff51
commit db9ff5d18b
2 changed files with 20 additions and 5 deletions

View file

@ -525,10 +525,11 @@ class Bill(models.Model):
@property @property
def billing_address(self): def billing_address(self):
return self.order.billing_address # FIXME: make sure all the orders of a bill match the same billing address.
orders = Order.objects.filter(bill=self)
return orders[0].billing_address
@staticmethod @staticmethod
def generate_for(year, month, user): def generate_for(year, month, user):
# /!\ We exclusively work on the specified year and month. # /!\ We exclusively work on the specified year and month.
generated_bills = [] generated_bills = []
@ -605,7 +606,6 @@ class Bill(models.Model):
# Handle yearly bills starting on working month. # Handle yearly bills starting on working month.
if len(unpaid_orders['yearly']) > 0: if len(unpaid_orders['yearly']) > 0:
# For every starting date, generate new bill. # For every starting date, generate new bill.
for next_yearly_bill_start_on in unpaid_orders['yearly']: for next_yearly_bill_start_on in unpaid_orders['yearly']:
# No postpaid for yearly payments. # No postpaid for yearly payments.
@ -735,6 +735,10 @@ class BillRecord():
raise Exception('Unsupported recurring period: {}.'. raise Exception('Unsupported recurring period: {}.'.
format(record.recurring_period)) format(record.recurring_period))
@property
def vat(self):
return 0
@property @property
def amount(self): def amount(self):
return Decimal(float(self.recurring_price) * self.recurring_count) + self.one_time_price return Decimal(float(self.recurring_price) * self.recurring_count) + self.one_time_price
@ -891,12 +895,12 @@ class Product(UncloudModel):
if being_created: if being_created:
record = OrderRecord( record = OrderRecord(
one_time_price=self.one_time_price, one_time_price=self.one_time_price,
recurring_price=self.recurring_price(recurring_period=self.recurring_period), recurring_price=self.recurring_price,
description=self.description) description=self.description)
self.order.orderrecord_set.add(record, bulk=False) self.order.orderrecord_set.add(record, bulk=False)
@property @property
def recurring_price(self, recurring_period=RecurringPeriod.PER_MONTH): def recurring_price(self):
pass # To be implemented in child. pass # To be implemented in child.
@property @property
@ -907,6 +911,10 @@ class Product(UncloudModel):
def recurring_period(self): def recurring_period(self):
return self.order.recurring_period return self.order.recurring_period
@property
def billing_address(self):
return self.order.billing_address
@staticmethod @staticmethod
def allowed_recurring_periods(): def allowed_recurring_periods():
return RecurringPeriod.choices return RecurringPeriod.choices

View file

@ -56,6 +56,13 @@ class BillRecordSerializer(serializers.Serializer):
order = serializers.HyperlinkedRelatedField( order = serializers.HyperlinkedRelatedField(
view_name='order-detail', view_name='order-detail',
read_only=True) read_only=True)
description = serializers.CharField()
one_time_price = serializers.DecimalField(AMOUNT_MAX_DIGITS, AMOUNT_DECIMALS)
recurring_price = serializers.DecimalField(AMOUNT_MAX_DIGITS, AMOUNT_DECIMALS)
recurring_period = serializers.ChoiceField(choices=RecurringPeriod.choices)
recurring_count = serializers.DecimalField(AMOUNT_MAX_DIGITS, AMOUNT_DECIMALS)
vat = serializers.DecimalField(AMOUNT_MAX_DIGITS, AMOUNT_DECIMALS)
amount = serializers.DecimalField(AMOUNT_MAX_DIGITS, AMOUNT_DECIMALS)
class BillingAddressSerializer(serializers.ModelSerializer): class BillingAddressSerializer(serializers.ModelSerializer):
class Meta: class Meta: