def get_context_data(self, **kwargs): ctx = super().get_context_data(**kwargs) barcode_iban = settings.HOLVI_BARCODE_IBAN body_template = get_template('velkoja/notification_email_body.jinja') subject_template = get_template( 'velkoja/notification_email_subject.jinja') overdue = list_invoices(status='overdue') for invoice in overdue: # Quick check to make sure the invoice has not been credited if float(invoice._jsondata.get('credited_sum')) > 0: continue barcode = None if barcode_iban: barcode = bank_barcode(barcode_iban, invoice.rf_reference, Decimal(invoice.due_sum)) mail = EmailMessage() mail.subject = subject_template.render( Context({ "invoice": invoice, "barcode": barcode })).strip() mail.body = body_template.render( Context({ "invoice": invoice, "barcode": barcode })) mail.to = [invoice.receiver.email] ctx['email'] = mail break return ctx
def get_context_data(self, **kwargs): # TODO: refactor together with HolviOverdueInvoicesHandler so there's one method to format the email. ctx = super().get_context_data(**kwargs) barcode_iban = settings.HOLVI_BARCODE_IBAN body_template = get_template( 'velkoja/holvi_notification_email_body.jinja') subject_template = get_template( 'velkoja/holvi_notification_email_subject.jinja') overdue = list_invoices(status='overdue') for invoice in overdue: # Quick check to make sure the invoice has not been credited if float(invoice._jsondata.get('credited_sum')) > 0: continue template_iban = invoice.iban barcode = None if barcode_iban: template_iban = barcode_iban barcode = bank_barcode(barcode_iban, invoice.rf_reference, Decimal(invoice.due_sum)) mail = EmailMessage() jinja_ctx = Context({ "invoice": invoice, "barcode": barcode, "iban": template_iban, }) mail.subject = subject_template.render(jinja_ctx).strip() mail.body = body_template.render(jinja_ctx) mail.to = [invoice.receiver.email] ctx['email'] = mail break return ctx
def process_overdue(self, send=False): barcode_iban = settings.HOLVI_BARCODE_IBAN body_template = get_template('velkoja/notification_email_body.jinja') subject_template = get_template( 'velkoja/notification_email_subject.jinja') overdue = list_invoices(status='overdue') ret = [] for invoice in overdue: # Quick check to make sure the invoice has not been credited if float(invoice._jsondata.get('credited_sum')) > 0: continue # If we have already sent notification recently, do not sent one just yet if NotificationSent.objects.filter( transaction_unique_id=invoice.code).count(): notified = NotificationSent.objects.get( transaction_unique_id=invoice.code) if (timezone.now() - notified.stamp ).days < settings.HOLVI_NOTIFICATION_INTERVAL_DAYS: continue if send: invoice.send() barcode = None if barcode_iban: barcode = bank_barcode(barcode_iban, invoice.rf_reference, Decimal(invoice.due_sum)) mail = EmailMessage() mail.subject = subject_template.render( Context({ "invoice": invoice, "barcode": barcode })).strip() mail.body = body_template.render( Context({ "invoice": invoice, "barcode": barcode })) mail.to = [invoice.receiver.email] if send: try: mail.send() except Exception as e: logger.exception("Sending email failed") try: notified = NotificationSent.objects.get( transaction_unique_id=invoice.code) notified.notification_no += 1 except NotificationSent.DoesNotExist: notified = NotificationSent() notified.transaction_unique_id = invoice.code notified.stamp = timezone.now() notified.email = invoice.receiver.email if send: notified.save() ret.append((notified, invoice)) return ret
def handle(self, *args, **options): if (not options['since'] and not options['all']): raise CommandError('Either since or all must be specified') invoice_filters = {} order_filters = {} if not options.get('all', False): since_parsed = dateutil.parser.parse(options['since']) if options['verbosity'] > 1: print("Importing since %s" % since_parsed.isoformat()) invoice_filters['update_time_from'] = since_parsed.isoformat() order_filters['filter_paid_time_from'] = since_parsed.isoformat() h = HolviImporter(itertools.chain(list_invoices(**invoice_filters), list_orders(**order_filters))) transactions = h.import_transactions() if options['verbosity'] > 1: for t in transactions: print("Imported transaction %s" % t)