Fix issues and also include subscription_id
This commit is contained in:
parent
444f79eab7
commit
12b8a77862
4 changed files with 86 additions and 14 deletions
|
@ -43,9 +43,8 @@ class Command(BaseCommand):
|
||||||
all_invoices = all_invoices_response['response_object']
|
all_invoices = all_invoices_response['response_object']
|
||||||
self.stdout.write(self.style.SUCCESS("Obtained {} invoices".format(len(all_invoices) if all_invoices is not None else 0)))
|
self.stdout.write(self.style.SUCCESS("Obtained {} invoices".format(len(all_invoices) if all_invoices is not None else 0)))
|
||||||
for invoice in all_invoices:
|
for invoice in all_invoices:
|
||||||
MonthlyHostingBill.create(
|
invoice['customer'] = user.stripecustomer
|
||||||
invoice, stripe_customer=user.stripecustomer
|
MonthlyHostingBill.create(invoice)
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
self.stdout.write(self.style.SUCCESS(
|
self.stdout.write(self.style.SUCCESS(
|
||||||
'Customer email %s does not have a stripe customer.' % email))
|
'Customer email %s does not have a stripe customer.' % email))
|
||||||
|
|
25
hosting/migrations/0051_auto_20190403_0703.py
Normal file
25
hosting/migrations/0051_auto_20190403_0703.py
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.9.4 on 2019-04-03 07:03
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('hosting', '0050_monthlyhostingbill'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='monthlyhostingbill',
|
||||||
|
name='subscription_ids_csv',
|
||||||
|
field=models.TextField(default=''),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='monthlyhostingbill',
|
||||||
|
name='lines_meta_data_csv',
|
||||||
|
field=models.TextField(default=''),
|
||||||
|
),
|
||||||
|
]
|
|
@ -1,8 +1,10 @@
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
import pytz
|
||||||
|
|
||||||
from Crypto.PublicKey import RSA
|
from Crypto.PublicKey import RSA
|
||||||
from dateutil.relativedelta import relativedelta
|
from dateutil.relativedelta import relativedelta
|
||||||
|
from datetime import datetime
|
||||||
from django.db import models
|
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
|
||||||
|
@ -252,7 +254,8 @@ class MonthlyHostingBill(AssignPermissionsMixin, models.Model):
|
||||||
total = models.IntegerField()
|
total = models.IntegerField()
|
||||||
lines_data_count = models.IntegerField()
|
lines_data_count = models.IntegerField()
|
||||||
invoice_id = models.CharField(unique=True, max_length=100)
|
invoice_id = models.CharField(unique=True, max_length=100)
|
||||||
lines_meta_data_csv = models.TextField()
|
lines_meta_data_csv = models.TextField(default="")
|
||||||
|
subscription_ids_csv = models.TextField(default="")
|
||||||
|
|
||||||
permissions = ('view_monthlyhostingbill',)
|
permissions = ('view_monthlyhostingbill',)
|
||||||
|
|
||||||
|
@ -262,21 +265,63 @@ class MonthlyHostingBill(AssignPermissionsMixin, models.Model):
|
||||||
)
|
)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create(cls, stripe_customer, **args):
|
def create(cls, args):
|
||||||
instance = cls.objects.create(args)
|
# Try to infer the HostingOrder from subscription id or VM_ID
|
||||||
instance.customer = stripe_customer
|
if len(args['subscription_ids_csv']) > 0:
|
||||||
if len(instance.lines_meta_data_csv) > 0:
|
sub_ids = [sub_id.strip() for sub_id in args['subscription_ids_csv'].split(",")]
|
||||||
vm_ids = [vm_id.strip() for vm_id in instance.lines_meta_data_csv.split(",")]
|
if len(sub_ids) == 1:
|
||||||
|
args['order'] = HostingOrder.objects.get(
|
||||||
|
subscription_id=sub_ids[0]
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
logger.debug(
|
||||||
|
"More than one subscriptions"
|
||||||
|
"for MonthlyHostingBill {}".format(args['invoice_id'])
|
||||||
|
)
|
||||||
|
logger.debug("SUB_IDS=".format(','.join(sub_ids)))
|
||||||
|
logger.debug("Not importing invoices")
|
||||||
|
return
|
||||||
|
elif len(args['lines_meta_data_csv']) > 0:
|
||||||
|
vm_ids = [vm_id.strip() for vm_id in args['lines_meta_data_csv'].split(",")]
|
||||||
if len(vm_ids) == 1:
|
if len(vm_ids) == 1:
|
||||||
instance.order = HostingOrder.objects.get(vm_id=vm_ids[0])
|
args['order'] = HostingOrder.objects.get(vm_id=vm_ids[0])
|
||||||
else:
|
else:
|
||||||
logger.debug(
|
logger.debug(
|
||||||
"More than one VM_ID"
|
"More than one VM_ID"
|
||||||
"for MonthlyHostingBill {}".format(instance.invoice_id)
|
"for MonthlyHostingBill {}".format(args['invoice_id'])
|
||||||
)
|
)
|
||||||
logger.debug("VM_IDS=".format(','.join(vm_ids)))
|
logger.debug("VM_IDS=".format(','.join(vm_ids)))
|
||||||
instance.assign_permissions(stripe_customer.user)
|
logger.debug("Not importing invoices")
|
||||||
instance.save()
|
return
|
||||||
|
else:
|
||||||
|
logger.debug("Neither subscription id nor vm_id available")
|
||||||
|
logger.debug("Can't import invoice")
|
||||||
|
return
|
||||||
|
|
||||||
|
instance = cls.objects.create(
|
||||||
|
created=datetime.utcfromtimestamp(
|
||||||
|
args['created']).replace(tzinfo=pytz.utc),
|
||||||
|
receipt_number=(
|
||||||
|
args['receipt_number']
|
||||||
|
if args['receipt_number'] is not None else ''
|
||||||
|
),
|
||||||
|
paid_at=datetime.utcfromtimestamp(
|
||||||
|
args['paid_at']).replace(tzinfo=pytz.utc),
|
||||||
|
period_start=datetime.utcfromtimestamp(
|
||||||
|
args['period_start']).replace(tzinfo=pytz.utc),
|
||||||
|
period_end=datetime.utcfromtimestamp(
|
||||||
|
args['period_end']).replace(tzinfo=pytz.utc),
|
||||||
|
billing_reason=args['billing_reason'],
|
||||||
|
discount=args['discount'],
|
||||||
|
total=args['total'],
|
||||||
|
lines_data_count=args['lines_data_count'],
|
||||||
|
invoice_id=args['invoice_id'],
|
||||||
|
lines_meta_data_csv=args['lines_meta_data_csv'],
|
||||||
|
stripe_customer=args['customer'],
|
||||||
|
subscription_ids_csv=args['subscription_ids_csv'],
|
||||||
|
)
|
||||||
|
|
||||||
|
instance.assign_permissions(instance.stripe_customer.user)
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -155,7 +155,10 @@ class StripeUtils(object):
|
||||||
'invoice_id': invoice.id,
|
'invoice_id': invoice.id,
|
||||||
'lines_meta_data_csv': ','.join(
|
'lines_meta_data_csv': ','.join(
|
||||||
[line.metadata.VM_ID if hasattr(line.metadata, 'VM_ID') else '' for line in invoice.lines.data]
|
[line.metadata.VM_ID if hasattr(line.metadata, 'VM_ID') else '' for line in invoice.lines.data]
|
||||||
)
|
),
|
||||||
|
'subscription_ids_csv': ','.join(
|
||||||
|
[line.subscription if hasattr(line, 'subscription') else '' for line in 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