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)) diff --git a/hosting/models.py b/hosting/models.py index 84cdc357..af16bfb0 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,11 +305,11 @@ 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") - return + return None instance = cls.objects.create( created=datetime.utcfromtimestamp(