From 9ff4be7272a72474eb862ef24f6d7a3440ea9dc8 Mon Sep 17 00:00:00 2001 From: Thomas Steen Rasmussen Date: Tue, 17 May 2016 15:31:41 +0200 Subject: [PATCH] first steps towards an invoice worker --- shop/management/__init__.py | 0 shop/management/commands/__init__.py | 0 shop/management/commands/invoice-worker.py | 40 ++++++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 shop/management/__init__.py create mode 100644 shop/management/commands/__init__.py create mode 100644 shop/management/commands/invoice-worker.py diff --git a/shop/management/__init__.py b/shop/management/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/shop/management/commands/__init__.py b/shop/management/commands/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/shop/management/commands/invoice-worker.py b/shop/management/commands/invoice-worker.py new file mode 100644 index 00000000..d42440db --- /dev/null +++ b/shop/management/commands/invoice-worker.py @@ -0,0 +1,40 @@ +from django.core.management.base import BaseCommand +from shop.pdf import generate_pdf_letter +from shop.email import send_invoice_email + + +class Command(BaseCommand): + args = 'none' + help = 'Send out invoices that has not been sent yet' + + def handle(self, *args, **options): + self.stdout.write('Invoice worker running...') + while True: + ### check if we need to generate any invoices + for order in Order.objects.filter(paid=True, invoice__isnull=True): + ### generate invoice for this Order + Invoice.objects.create(order=order) + + ### check if we need to send out any invoices + for invoice in Invoice.objects.filter(sent_to_customer=False): + ### generate PDF invoice + try: + pdffile = generate_pdf_letter('invoice.html', formatdict) + except Exception as E: + self.stdout.write('ERROR: Unable to generate PDF file. Error: %s' % E) + continue + if not pdffile: + self.stdout.write('ERROR: Unable to generate PDF file') + continue + + if send_invoice_email(recipient=invoice.order.user.email, invoice=invoice, attachment=pdffile): + self.stdout.write('OK: Invoice email sent to %s' % order.user.email) + invoice.sent_to_customer=True + invoice.save() + else: + self.stdout.write('ERROR: Unable to send invoice email to %s' % order.user.email) + + ### pause for a bit + sleep(60) + +