From 91695eaee47077fca3bc130ba1dac41ee9514780 Mon Sep 17 00:00:00 2001
From: PCoder <purple.coder@yahoo.co.uk>
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 <purple.coder@yahoo.co.uk>
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 <purple.coder@yahoo.co.uk>
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(