Add Line item
This commit is contained in:
		
					parent
					
						
							
								061ef7d036
							
						
					
				
			
			
				commit
				
					
						8816793803
					
				
			
		
					 3 changed files with 79 additions and 0 deletions
				
			
		
							
								
								
									
										37
									
								
								hosting/migrations/0052_hostingbilllineitem.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								hosting/migrations/0052_hostingbilllineitem.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,37 @@ | ||||||
|  | # -*- coding: utf-8 -*- | ||||||
|  | # Generated by Django 1.9.4 on 2019-04-13 11:38 | ||||||
|  | from __future__ import unicode_literals | ||||||
|  | 
 | ||||||
|  | from django.db import migrations, models | ||||||
|  | import django.db.models.deletion | ||||||
|  | import utils.mixins | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class Migration(migrations.Migration): | ||||||
|  | 
 | ||||||
|  |     dependencies = [ | ||||||
|  |         ('hosting', '0051_auto_20190403_0703'), | ||||||
|  |     ] | ||||||
|  | 
 | ||||||
|  |     operations = [ | ||||||
|  |         migrations.CreateModel( | ||||||
|  |             name='HostingBillLineItem', | ||||||
|  |             fields=[ | ||||||
|  |                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||||||
|  |                 ('amount', models.PositiveSmallIntegerField()), | ||||||
|  |                 ('description', models.CharField(max_length=255)), | ||||||
|  |                 ('discountable', models.BooleanField()), | ||||||
|  |                 ('metadata', models.CharField(max_length=128)), | ||||||
|  |                 ('period_start', models.DateTimeField()), | ||||||
|  |                 ('period_end', models.DateTimeField()), | ||||||
|  |                 ('proration', models.BooleanField()), | ||||||
|  |                 ('quantity', models.PositiveIntegerField()), | ||||||
|  |                 ('unit_amount', models.PositiveIntegerField()), | ||||||
|  |                 ('monthly_hosting_bill', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='hosting.MonthlyHostingBill')), | ||||||
|  |             ], | ||||||
|  |             options={ | ||||||
|  |                 'permissions': (('view_hostingbilllineitem', 'View Monthly Hosting Bill Line Item'),), | ||||||
|  |             }, | ||||||
|  |             bases=(utils.mixins.AssignPermissionsMixin, models.Model), | ||||||
|  |         ), | ||||||
|  |     ] | ||||||
|  | @ -1,3 +1,4 @@ | ||||||
|  | import json | ||||||
| import logging | import logging | ||||||
| import os | import os | ||||||
| import pytz | import pytz | ||||||
|  | @ -235,6 +236,9 @@ class HostingBill(AssignPermissionsMixin, models.Model): | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class MonthlyHostingBill(AssignPermissionsMixin, models.Model): | class MonthlyHostingBill(AssignPermissionsMixin, models.Model): | ||||||
|  |     """ | ||||||
|  |     Corresponds to Invoice object of Stripe | ||||||
|  |     """ | ||||||
|     customer = models.ForeignKey(StripeCustomer) |     customer = models.ForeignKey(StripeCustomer) | ||||||
|     order = models.ForeignKey(HostingOrder) |     order = models.ForeignKey(HostingOrder) | ||||||
|     created = models.DateTimeField(help_text="When the invoice was created") |     created = models.DateTimeField(help_text="When the invoice was created") | ||||||
|  | @ -326,6 +330,21 @@ class MonthlyHostingBill(AssignPermissionsMixin, models.Model): | ||||||
|             subscription_ids_csv=args['subscription_ids_csv'], |             subscription_ids_csv=args['subscription_ids_csv'], | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
|  |         if 'line_items' in args['line_items']: | ||||||
|  |             line_items = args['line_items'] | ||||||
|  |             for item in line_items: | ||||||
|  |                 line_item_instance = HostingBillLineItem.objects.create( | ||||||
|  |                     monthly_hosting_bill=instance, | ||||||
|  |                     amount=item.amount, | ||||||
|  |                     description=item.description, | ||||||
|  |                     discountable=item.discountable, | ||||||
|  |                     metadata=json.dumps(item.metadata), | ||||||
|  |                     period_start=datetime.utcfromtimestamp(item.period.start).replace(tzinfo=pytz.utc),                                            period_end=datetime.utcfromtimestamp(item.period.end).replace(tzinfo=pytz.utc), | ||||||
|  |                     proration=item.proration, | ||||||
|  |                     quantity=item.quantity, | ||||||
|  |                     unit_amount=item.unit_amount | ||||||
|  |                 ) | ||||||
|  |                 line_item_instance.assign_permission(instance.customer.user) | ||||||
|         instance.assign_permissions(instance.customer.user) |         instance.assign_permissions(instance.customer.user) | ||||||
|         return instance |         return instance | ||||||
| 
 | 
 | ||||||
|  | @ -366,6 +385,28 @@ class MonthlyHostingBill(AssignPermissionsMixin, models.Model): | ||||||
|         return return_value |         return return_value | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | class HostingBillLineItem(AssignPermissionsMixin, models.Model): | ||||||
|  |     """ | ||||||
|  |     Corresponds to InvoiceItem object of Stripe | ||||||
|  |     """ | ||||||
|  |     monthly_hosting_bill = models.ForeignKey(MonthlyHostingBill) | ||||||
|  |     amount = models.PositiveSmallIntegerField() | ||||||
|  |     description = models.CharField(max_length=255) | ||||||
|  |     discountable = models.BooleanField() | ||||||
|  |     metadata = models.CharField(max_length=128) | ||||||
|  |     period_start = models.DateTimeField() | ||||||
|  |     period_end = models.DateTimeField() | ||||||
|  |     proration = models.BooleanField() | ||||||
|  |     quantity = models.PositiveIntegerField() | ||||||
|  |     unit_amount = models.PositiveIntegerField() | ||||||
|  |     permissions = ('view_hostingbilllineitem',) | ||||||
|  | 
 | ||||||
|  |     class Meta: | ||||||
|  |         permissions = ( | ||||||
|  |             ('view_hostingbilllineitem', 'View Monthly Hosting Bill Line Item'), | ||||||
|  |         ) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| class VMDetail(models.Model): | class VMDetail(models.Model): | ||||||
|     user = models.ForeignKey(CustomUser) |     user = models.ForeignKey(CustomUser) | ||||||
|     vm_id = models.IntegerField(default=0) |     vm_id = models.IntegerField(default=0) | ||||||
|  |  | ||||||
|  | @ -159,6 +159,7 @@ class StripeUtils(object): | ||||||
|                     'subscription_ids_csv': ','.join( |                     'subscription_ids_csv': ','.join( | ||||||
|                         [line.id if line.type == 'subscription' else '' for line in invoice.lines.data] |                         [line.id if line.type == 'subscription' else '' for line in invoice.lines.data] | ||||||
|                     ), |                     ), | ||||||
|  |                     'line_items': invoice.lines.data | ||||||
|                 } |                 } | ||||||
|                 starting_after = invoice.id |                 starting_after = invoice.id | ||||||
|                 return_list.append(invoice_details) |                 return_list.append(invoice_details) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue