forked from uncloud/uncloud
		
	Display allr elevant values on Bill serializer/page
This commit is contained in:
		
					parent
					
						
							
								a49fe6ff51
							
						
					
				
			
			
				commit
				
					
						db9ff5d18b
					
				
			
		
					 2 changed files with 20 additions and 5 deletions
				
			
		| 
						 | 
				
			
			@ -525,10 +525,11 @@ class Bill(models.Model):
 | 
			
		|||
 | 
			
		||||
    @property
 | 
			
		||||
    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
 | 
			
		||||
 | 
			
		||||
    def generate_for(year, month, user):
 | 
			
		||||
        # /!\ We exclusively work on the specified year and month.
 | 
			
		||||
        generated_bills = []
 | 
			
		||||
| 
						 | 
				
			
			@ -605,7 +606,6 @@ class Bill(models.Model):
 | 
			
		|||
 | 
			
		||||
        # Handle yearly bills starting on working month.
 | 
			
		||||
        if len(unpaid_orders['yearly']) > 0:
 | 
			
		||||
 | 
			
		||||
            # For every starting date, generate new bill.
 | 
			
		||||
            for next_yearly_bill_start_on in unpaid_orders['yearly']:
 | 
			
		||||
                # No postpaid for yearly payments.
 | 
			
		||||
| 
						 | 
				
			
			@ -735,6 +735,10 @@ class BillRecord():
 | 
			
		|||
            raise Exception('Unsupported recurring period: {}.'.
 | 
			
		||||
                    format(record.recurring_period))
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def vat(self):
 | 
			
		||||
        return 0
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def amount(self):
 | 
			
		||||
        return Decimal(float(self.recurring_price) * self.recurring_count) + self.one_time_price
 | 
			
		||||
| 
						 | 
				
			
			@ -891,12 +895,12 @@ class Product(UncloudModel):
 | 
			
		|||
        if being_created:
 | 
			
		||||
            record = OrderRecord(
 | 
			
		||||
                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)
 | 
			
		||||
            self.order.orderrecord_set.add(record, bulk=False)
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def recurring_price(self, recurring_period=RecurringPeriod.PER_MONTH):
 | 
			
		||||
    def recurring_price(self):
 | 
			
		||||
        pass # To be implemented in child.
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
| 
						 | 
				
			
			@ -907,6 +911,10 @@ class Product(UncloudModel):
 | 
			
		|||
    def recurring_period(self):
 | 
			
		||||
        return self.order.recurring_period
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def billing_address(self):
 | 
			
		||||
        return self.order.billing_address
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def allowed_recurring_periods():
 | 
			
		||||
        return RecurringPeriod.choices
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -56,6 +56,13 @@ class BillRecordSerializer(serializers.Serializer):
 | 
			
		|||
    order = serializers.HyperlinkedRelatedField(
 | 
			
		||||
            view_name='order-detail',
 | 
			
		||||
            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 Meta:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue