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…
Reference in a new issue