2 from datetime import datetime
3 from io import StringIO
4 from django.conf import settings
5 from django.http import HttpResponse
6 from django.utils.safestring import mark_safe
7 from django.utils.translation import gettext_lazy as _
10 def bank_export(modeladmin, request, queryset):
11 response = HttpResponse(content_type='text/csv; charset=cp1250')
12 response['Content-Disposition'] = 'attachment; filename=export.csv'
13 writer = csv.writer(response)
21 ' '.join([obj.postal_code, obj.town]).strip(),
30 def parse_payment_feedback(f):
31 lines = csv.reader(StringIO(f.read().decode('cp1250')))
34 assert line[0] in ('1', '2')
38 booking_date = line[3]
39 booking_date = datetime.strptime(booking_date, '%Y%m%d')
41 is_dd = line[16] == 'DD'
42 realised = line[17] == '1'
43 reject_code = line[18]
44 yield payment_id, booking_date, is_dd, realised, reject_code
49 def parse_export_feedback(f):
51 lines = csv.reader(StringIO(f.read().decode('cp1250')))
56 yield payment_id, status, comment
61 def bank_order(date, sent_at, queryset):
62 response = HttpResponse(content_type='application/octet-stream')
63 response['Content-Disposition'] = 'attachment; filename=order.PLD'
71 raise ValueError('Payment date not set yet.')
73 for debit in queryset:
74 if debit.bank_acceptance_date is None:
75 no_dates.append(debit)
76 if debit.amount is None:
77 no_amounts.append(debit)
78 if debit.cancelled_at and debit.cancelled_at.date() <= date and (sent_at is None or debit.cancelled_at < sent_at):
79 cancelled.append(debit)
81 if no_dates or no_amounts or cancelled:
84 t += 'Bank acceptance not received for: '
86 '<a href="/admin/pz/directdebit/{}/change">{}</a>'.format(
93 t += 'Amount not set for: '
95 '<a href="/admin/pz/directdebit/{}/change">{}</a>'.format(
98 for debit in no_amounts
102 t += 'Debits have been cancelled: '
104 '<a href="/admin/pz/directdebit/{}/change">{}</a>'.format(
107 for debit in cancelled
110 raise ValueError(mark_safe(t))
112 for debit in queryset:
114 '{order_code},{date},{amount},{dest_bank_id},0,"{dest_iban}","{user_iban}",'
115 '"{dest_addr}","{user_addr}",0,{user_bank_id},'
116 '"/NIP/{dest_nip}/IDP/{payment_id}|/TXT/{payment_desc}||",'
119 date=date.strftime('%Y%m%d'),
121 amount=debit.amount * 100,
122 dest_bank_id=settings.PZ_IBAN[2:10],
123 dest_iban=settings.PZ_IBAN,
124 user_iban=debit.iban,
125 dest_addr=settings.PZ_ADDRESS_STRING,
126 user_bank_id=debit.iban[2:10],
127 dest_nip=settings.PZ_NIP,
128 payment_id=debit.payment_id,
129 payment_desc=settings.PZ_PAYMENT_DESCRIPTION,
130 user_addr = '|'.join((
133 debit.street_address,
134 ' '.join((debit.postal_code, debit.town))
138 response.write('\r\n'.join(rows).encode('cp1250'))