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:
pcoder116 2019-04-20 13:56:05 +02:00
commit c0c938e65c
5 changed files with 98 additions and 3 deletions

View File

@ -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),
),
]

View 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),
),
]

View File

@ -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):

View 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'),
),
]

View File

@ -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()