Browse Source

Add a django command to create monthly invoices from shell. Work in progress...

Fabs 10 years ago
parent
commit
50c65a9d13

+ 7 - 1
coin/billing/create_subscriptions_invoices.py

@@ -21,9 +21,14 @@ def create_all_members_invoices_for_a_period(date=datetime.date.today()):
         Q(offersubscription__resign_date__isnull=True) |
         Q(offersubscription__resign_date__gte=date))
 
+    invoices = []
+
     for member in members:
-        create_member_invoice_for_a_period(member, date)
+        invoice = create_member_invoice_for_a_period(member, date)
+        if invoice is not None:
+            invoices.append(invoice)
 
+    return invoices
 
 @transaction.atomic
 def create_member_invoice_for_a_period(member, date):
@@ -137,6 +142,7 @@ def create_member_invoice_for_a_period(member, date):
     if invoice.details.count() > 0:
         invoice.save()
         transaction.savepoint_commit(sid)
+        invoice.validate()
         return invoice
     else:
         transaction.savepoint_rollback(sid)

+ 0 - 0
coin/billing/management/__init__.py


+ 0 - 0
coin/billing/management/commands/__init__.py


+ 28 - 0
coin/billing/management/commands/charge_subscriptions.py

@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+import datetime
+from django.core.management.base import BaseCommand, CommandError
+
+from coin.billing.create_subscriptions_invoices import create_all_members_invoices_for_a_period
+
+
+class Command(BaseCommand):
+    args = '[date=2011-07-04]'
+    help = 'Create invoices for members subscriptions for date specified (or today if no date passed)'
+
+    def handle(self, *args, **options):
+        try:
+            date = datetime.datetime.strptime(args[0], '%Y-%m-%d').date()
+        except IndexError:
+            date = datetime.date.today()
+        except ValueError:
+            raise CommandError(
+                'Please enter a valid date : YYYY-mm-dd (ex: 2011-07-04)')
+
+        self.stdout.write(
+            'Create invoices for all members for the date : %s' % date)
+
+        invoices = create_all_members_invoices_for_a_period(date)
+
+        self.stdout.write(
+            u'%d invoices were created' % len(invoices))
+