Merge branch 'feature/6561/link-billlineitem-with-stripeplan' into 'master'
Feature/6561/link billlineitem with stripeplan See merge request ungleich-public/dynamicweb!696
This commit is contained in:
commit
c0c938e65c
5 changed files with 98 additions and 3 deletions
|
@ -0,0 +1,20 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.9.4 on 2019-04-20 09:52
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('datacenterlight', '0027_dclcalculatorpluginmodel_enable_512mb_ram'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='stripeplan',
|
||||||
|
name='stripe_plan_name',
|
||||||
|
field=models.CharField(default='', max_length=512, null=True),
|
||||||
|
),
|
||||||
|
]
|
25
datacenterlight/migrations/0029_auto_20190420_1022.py
Normal file
25
datacenterlight/migrations/0029_auto_20190420_1022.py
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.9.4 on 2019-04-20 10:22
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('datacenterlight', '0028_stripeplan_stripe_plan_name'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='stripeplan',
|
||||||
|
name='amount',
|
||||||
|
field=models.PositiveIntegerField(default=0),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='stripeplan',
|
||||||
|
name='interval',
|
||||||
|
field=models.CharField(default='', max_length=128, null=True),
|
||||||
|
),
|
||||||
|
]
|
|
@ -103,6 +103,9 @@ class StripePlan(models.Model):
|
||||||
A model to store Data Center Light's created Stripe plans
|
A model to store Data Center Light's created Stripe plans
|
||||||
"""
|
"""
|
||||||
stripe_plan_id = models.CharField(max_length=256, null=True)
|
stripe_plan_id = models.CharField(max_length=256, null=True)
|
||||||
|
stripe_plan_name = models.CharField(max_length=512, default="", null=True)
|
||||||
|
amount = models.PositiveIntegerField(default=0)
|
||||||
|
interval = models.CharField(max_length=128, default="", null=True)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create(cls, stripe_plan_id):
|
def create(cls, stripe_plan_id):
|
||||||
|
|
22
hosting/migrations/0053_hostingbilllineitem_stripe_plan.py
Normal file
22
hosting/migrations/0053_hostingbilllineitem_stripe_plan.py
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.9.4 on 2019-04-20 10:10
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('datacenterlight', '0028_stripeplan_stripe_plan_name'),
|
||||||
|
('hosting', '0052_hostingbilllineitem'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='hostingbilllineitem',
|
||||||
|
name='stripe_plan',
|
||||||
|
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='datacenterlight.StripePlan'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -10,7 +10,7 @@ from django.db import models
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
|
|
||||||
from datacenterlight.models import VMPricing, VMTemplate
|
from datacenterlight.models import VMPricing, VMTemplate, StripePlan
|
||||||
from membership.models import StripeCustomer, CustomUser
|
from membership.models import StripeCustomer, CustomUser
|
||||||
from utils.mixins import AssignPermissionsMixin
|
from utils.mixins import AssignPermissionsMixin
|
||||||
from utils.models import BillingAddress
|
from utils.models import BillingAddress
|
||||||
|
@ -342,6 +342,27 @@ class MonthlyHostingBill(AssignPermissionsMixin, models.Model):
|
||||||
if 'line_items' in args:
|
if 'line_items' in args:
|
||||||
line_items = args['line_items']
|
line_items = args['line_items']
|
||||||
for item in line_items:
|
for item in line_items:
|
||||||
|
stripe_plan = None
|
||||||
|
if item.type == "subscription" or item.type == "invoiceitem":
|
||||||
|
# Check stripe plan and prepare it for linking to bill item
|
||||||
|
stripe_plan_id = item.plan.id
|
||||||
|
try:
|
||||||
|
stripe_plan = StripePlan.objects.get(
|
||||||
|
stripe_plan_name=stripe_plan_id
|
||||||
|
)
|
||||||
|
except StripePlan.DoesNotExist as dne:
|
||||||
|
logger.error(
|
||||||
|
"StripePlan %s doesn't exist" % stripe_plan_id
|
||||||
|
)
|
||||||
|
if stripe_plan_id is not None:
|
||||||
|
# Create Stripe Plan because we don't have it
|
||||||
|
stripe_plan = StripePlan.objects.create(
|
||||||
|
stripe_plan_id=stripe_plan_id,
|
||||||
|
stripe_plan_name=item.plan.name,
|
||||||
|
amount=item.plan.amount,
|
||||||
|
interval=item.plan.interval
|
||||||
|
)
|
||||||
|
logger.debug("Creatd StripePlan " + stripe_plan_id)
|
||||||
line_item_instance = HostingBillLineItem.objects.create(
|
line_item_instance = HostingBillLineItem.objects.create(
|
||||||
monthly_hosting_bill=instance,
|
monthly_hosting_bill=instance,
|
||||||
amount=item.amount,
|
amount=item.amount,
|
||||||
|
@ -358,7 +379,8 @@ class MonthlyHostingBill(AssignPermissionsMixin, models.Model):
|
||||||
# https://stripe.com/docs/api/invoiceitems/object#invoiceitem_object-unit_amount
|
# https://stripe.com/docs/api/invoiceitems/object#invoiceitem_object-unit_amount
|
||||||
# So, for the time being I set the unit_amount to 0 if not
|
# So, for the time being I set the unit_amount to 0 if not
|
||||||
# found in the line item
|
# found in the line item
|
||||||
unit_amount=item.unit_amount if hasattr(item, "unit_amount") else 0
|
unit_amount=item.unit_amount if hasattr(item, "unit_amount") else 0,
|
||||||
|
stripe_plan=stripe_plan
|
||||||
)
|
)
|
||||||
line_item_instance.assign_permissions(instance.customer.user)
|
line_item_instance.assign_permissions(instance.customer.user)
|
||||||
instance.assign_permissions(instance.customer.user)
|
instance.assign_permissions(instance.customer.user)
|
||||||
|
@ -431,7 +453,10 @@ class HostingBillLineItem(AssignPermissionsMixin, models.Model):
|
||||||
"""
|
"""
|
||||||
Corresponds to InvoiceItem object of Stripe
|
Corresponds to InvoiceItem object of Stripe
|
||||||
"""
|
"""
|
||||||
monthly_hosting_bill = models.ForeignKey(MonthlyHostingBill)
|
monthly_hosting_bill = models.ForeignKey(MonthlyHostingBill,
|
||||||
|
on_delete=models.CASCADE)
|
||||||
|
stripe_plan = models.ForeignKey(StripePlan, null=True,
|
||||||
|
on_delete=models.CASCADE)
|
||||||
amount = models.PositiveSmallIntegerField()
|
amount = models.PositiveSmallIntegerField()
|
||||||
description = models.CharField(max_length=255)
|
description = models.CharField(max_length=255)
|
||||||
discountable = models.BooleanField()
|
discountable = models.BooleanField()
|
||||||
|
|
Loading…
Reference in a new issue