PZ: prevent generationg orders for cancelled debits.
[wolnelektury.git] / src / pz / bank.py
index e7788cd..40b985a 100644 (file)
@@ -13,6 +13,7 @@ def bank_export(modeladmin, request, queryset):
     writer.writerow([
         'Identyfikator płatności (IDP)',
         'Nazwa Płatnika',
+        '',
         'Adres Płatnika Ulica + numer domu',
         'Adres Płatnika kod+miejscowość',
         'Numer kierunkowy banku Płatnika',
@@ -27,6 +28,7 @@ def bank_export(modeladmin, request, queryset):
         writer.writerow([
             obj.payment_id,
             obj.full_name,
+            '',
             obj.street_address,
             ' '.join([obj.postal_code, obj.town]).strip(),
             obj.iban[2:10],
@@ -46,13 +48,14 @@ def parse_export_feedback(f):
         yield payment_id, status, comment
 
 
-def bank_order(date, queryset):
+def bank_order(date, sent_at, queryset):
     response = HttpResponse(content_type='application/octet-stream')
     response['Content-Disposition'] = 'attachment; filename=order.PLD'
     rows = []
 
     no_dates = []
     no_amounts = []
+    cancelled = []
 
     if date is None:
         raise ValueError('Payment date not set yet.')
@@ -62,8 +65,10 @@ def bank_order(date, queryset):
             no_dates.append(debit)
         if debit.amount is None:
             no_amounts.append(debit)
+        if debit.cancelled_at and debit.cancelled_at.date() <= date and (sent_at is None or debit.cancelled_at < sent_at):
+            cancelled.append(debit)
 
-    if no_dates or no_amounts:
+    if no_dates or no_amounts or cancelled:
         t = ''
         if no_dates:
             t += 'Bank acceptance not received for: '
@@ -83,6 +88,15 @@ def bank_order(date, queryset):
                 for debit in no_amounts
             )
             t += '. '
+        if cancelled:
+            t += 'Debits have been cancelled: '
+            t += ', '.join(
+                '<a href="/admin/pz/directdebit/{}/change">{}</a>'.format(
+                    debit.pk, debit
+                )
+                for debit in cancelled
+            )
+            t += '. '
         raise ValueError(mark_safe(t))
 
     for debit in queryset: