From 91695eaee47077fca3bc130ba1dac41ee9514780 Mon Sep 17 00:00:00 2001 From: PCoder Date: Sat, 20 Apr 2019 07:22:49 +0200 Subject: [PATCH 1/3] Check if multiple line items belong to the same subscription We are just fine in this case to create a Monthly hosting bill Also return None explicitly if MonthlyHostingBill is not created --- hosting/models.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/hosting/models.py b/hosting/models.py index 84cdc357..bfe608de 100644 --- a/hosting/models.py +++ b/hosting/models.py @@ -273,10 +273,19 @@ class MonthlyHostingBill(AssignPermissionsMixin, models.Model): # Try to infer the HostingOrder from subscription id or VM_ID if len(args['subscription_ids_csv']) > 0: sub_ids = [sub_id.strip() for sub_id in args['subscription_ids_csv'].split(",")] - if len(sub_ids) == 1: - args['order'] = HostingOrder.objects.get( - subscription_id=sub_ids[0] - ) + set_sub_ids = set(sub_ids) + if len(set_sub_ids) == 1: + # the multiple line items belong to the same subscription + sub_id = set_sub_ids.pop() + try: + args['order'] = HostingOrder.objects.get( + subscription_id=sub_id + ) + except HostingOrder.DoesNotExist as dne: + logger.error("Hosting order for {} doesn't exist".format( + sub_id + )) + args['order'] = None else: logger.debug( "More than one subscriptions" @@ -284,7 +293,7 @@ class MonthlyHostingBill(AssignPermissionsMixin, models.Model): ) logger.debug("SUB_IDS={}".format(','.join(sub_ids))) logger.debug("Not importing invoices") - return + return None 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: @@ -296,7 +305,7 @@ class MonthlyHostingBill(AssignPermissionsMixin, models.Model): ) logger.debug("VM_IDS={}".format(','.join(vm_ids))) logger.debug("Not importing invoices") - return + return None else: logger.debug("Neither subscription id nor vm_id available") logger.debug("Can't import invoice") From 86d70a7f0b7e7a2ed42fd7986946f6760230b788 Mon Sep 17 00:00:00 2001 From: PCoder Date: Sat, 20 Apr 2019 07:31:32 +0200 Subject: [PATCH 2/3] Count and log the number of invoices actually imported --- hosting/management/commands/fetch_stripe_bills.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/hosting/management/commands/fetch_stripe_bills.py b/hosting/management/commands/fetch_stripe_bills.py index 09cb3295..df30535c 100644 --- a/hosting/management/commands/fetch_stripe_bills.py +++ b/hosting/management/commands/fetch_stripe_bills.py @@ -42,9 +42,13 @@ class Command(BaseCommand): exit(1) 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))) + num_invoice_created = 0 for invoice in all_invoices: invoice['customer'] = user.stripecustomer - MonthlyHostingBill.create(invoice) + num_invoice_created += 1 if MonthlyHostingBill.create(invoice) is not None else logger.error("Did not import invoice for %s" % str(invoice)) + self.stdout.write( + self.style.SUCCESS("Number of invoices imported = %s" % num_invoice_created) + ) else: self.stdout.write(self.style.SUCCESS( 'Customer email %s does not have a stripe customer.' % email)) From 2be59cb0c80af70dc225470da9c5c7dc20dd7f43 Mon Sep 17 00:00:00 2001 From: PCoder Date: Sat, 20 Apr 2019 07:41:07 +0200 Subject: [PATCH 3/3] Add missing return value --- hosting/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hosting/models.py b/hosting/models.py index bfe608de..af16bfb0 100644 --- a/hosting/models.py +++ b/hosting/models.py @@ -309,7 +309,7 @@ class MonthlyHostingBill(AssignPermissionsMixin, models.Model): else: logger.debug("Neither subscription id nor vm_id available") logger.debug("Can't import invoice") - return + return None instance = cls.objects.create( created=datetime.utcfromtimestamp(