diff --git a/src/pretix/plugins/banktransfer/mt940import.py b/src/pretix/plugins/banktransfer/mt940import.py index 5b76dd42f6..4a937b9ad9 100644 --- a/src/pretix/plugins/banktransfer/mt940import.py +++ b/src/pretix/plugins/banktransfer/mt940import.py @@ -182,11 +182,11 @@ def parse(file): transaction_details = parse_transaction_details(td.replace("\n", "")) payer = { - 'name': transaction_details.get('accountholder', ''), + 'name': transaction_details.get('accountholder', '') or t.data.get('applicant_name', ''), # In reality, these fields are sometimes IBANs and BICs, and sometimes legacy numbers. We don't # really know (except for a syntax check) which will be performed anyways much later in the stack. - 'iban': transaction_details.get('accountnumber', ''), - 'bic': transaction_details.get('blz', ''), + 'iban': transaction_details.get('accountnumber', '') or t.data.get('applicant_iban', ''), + 'bic': transaction_details.get('blz', '') or t.data.get('applicant_bin', ''), } reference, eref = join_reference(transaction_details.get('reference', '').split('\n'), payer) if not eref: @@ -200,11 +200,19 @@ def parse(file): **{k: payer[k].strip() for k in ("iban", "bic") if payer.get(k)} }) else: + payer = { + 'payer': t.data.get('applicant_name', ''), + # In reality, these fields are sometimes IBANs and BICs, and sometimes legacy numbers. We don't + # really know (except for a syntax check) which will be performed anyways much later in the stack. + 'iban': t.data.get('applicant_iban', ''), + 'bic': t.data.get('applicant_bin', ''), + } result.append({ 'reference': "\n".join([ - t.data.get(f) for f in ('transaction_details', 'customer_reference', 'bank_reference', + t.data.get(f) for f in ('transaction_details', 'customer_reference', 'bank_reference', 'purpose', 'extra_details', 'non_swift_text') if t.data.get(f, '')]), 'amount': str(round_decimal(t.data['amount'].amount)), - 'date': t.data['date'].isoformat() + 'date': t.data['date'].isoformat(), + **{k: payer[k].strip() for k in ("iban", "bic", "payer") if payer.get(k)} }) return result diff --git a/src/setup.py b/src/setup.py index eb3b377284..d1d154baaa 100644 --- a/src/setup.py +++ b/src/setup.py @@ -198,7 +198,7 @@ setup( 'lxml', 'markdown==3.3.4', # 3.3.5 requires importlib-metadata>=4.4, but django-bootstrap3 requires importlib-metadata<3. # We can upgrade markdown again once django-bootstrap3 upgrades or once we drop Python 3.6 and 3.7 - 'mt-940==3.2', + 'mt-940==4.23.*', 'oauthlib==3.1.*', 'openpyxl==3.0.*', 'packaging', diff --git a/src/tests/plugins/banktransfer/test_mt940.py b/src/tests/plugins/banktransfer/test_mt940.py index 3b551fa717..f7e20f49ff 100644 --- a/src/tests/plugins/banktransfer/test_mt940.py +++ b/src/tests/plugins/banktransfer/test_mt940.py @@ -215,23 +215,23 @@ EXPECTED = [ 'payer': 'MUELLER', 'iban': '234567', 'bic': '10020030', - 'reference': 'Miete November'}, + 'reference': 'NONREF//55555\nMiete November'}, {'amount': '3000.00', 'date': '2002-11-02', 'payer': 'MUELLER', 'iban': '0847564700', 'bic': '50060400', - 'reference': 'Gehalt Oktober Firma Mustermann GmbH'}, + 'reference': 'NONREF//55555\nGehalt OktoberFirma Mustermann GmbH'}, ], [ {'amount': '-400.62', 'date': '2012-02-02', 'payer': 'MARTHAMUELLER', 'bic': '20020020', - 'reference': 'RECHNUNGSNR. 1210815 KUNDENNR. 01234 22222222 DATUM 01.02.2012'}, + 'reference': 'NONREF\nRECHNUNGSNR. 1210815 KUNDENNR. 01234 22222222'}, {'amount': '-1210.00', 'date': '2012-02-03', - 'reference': 'MIETE GOETHESTR. 12', + 'reference': 'NONREF\nMIETE GOETHESTR. 12', 'payer': 'ABC IMMOBILIEN GMBH', 'bic': '30030030', 'iban': '3333333333'}, @@ -239,24 +239,25 @@ EXPECTED = [ 'date': '2012-02-03', 'payer': 'STEFAN SCHMIDT', 'bic': '40040040', - 'reference': 'RECHNUNG 20120188 STEFAN SCHMIDTKUNDENR. 4711,'}, + 'reference': 'NONREF\nRECHNUNG 20120188STEFAN SCHMIDTKUNDENR. 4711,'}, {'amount': '89.97', 'date': '2012-02-03', 'payer': 'PETER PETERSEN', 'iban': '5555555555', 'bic': '50050050', - 'reference': 'RECHNUNG 20120165 PETER PETERSEN'} + 'reference': 'NONREF//00000000\nRECHNUNG 20120165PETER PETERSEN\n0001'} ], [ - {'amount': '5000.00', 'date': '2002-03-17', 'reference': '68790452'}, + {'amount': '5000.00', 'date': '2002-03-17', + 'reference': '68790452\nVerwendungszweck 1\nVerwendungszweck 2\nEmpfänger\nBuchungstext\n12345\n1000\n4711'}, {'amount': '20000.00', 'date': '2002-03-22', 'reference': ''}, {'amount': '20000.00', 'date': '2002-03-22', 'reference': ''}, {'amount': '20000.00', 'date': '2002-03-22', 'reference': ''}, {'amount': '20000.00', 'date': '2002-03-22', 'reference': ''}, + {'amount': '20000.00', 'date': '2002-03-22', 'reference': '3037010000'}, {'amount': '20000.00', 'date': '2002-03-22', 'reference': ''}, - {'amount': '20000.00', 'date': '2002-03-22', 'reference': ''}, - {'amount': '20000.00', 'date': '2002-03-22', 'reference': ''}, - {'amount': '-50000.00', 'date': '2002-03-24', 'reference': ''} + {'amount': '20000.00', 'date': '2002-03-22', 'reference': 'Meyer + Schneider\nTestkonto\n37010000\n87132101'}, + {'amount': '-50000.00', 'date': '2002-03-24', 'reference': 'bekannt\n12345'} ], [ {'amount': '12.00', @@ -264,19 +265,19 @@ EXPECTED = [ 'payer': 'Peter Schneider', 'iban': 'DE13495179316396679327', 'bic': 'NOTABIC', - 'reference': 'Democon-Abcde (Peter Schneider ), Kategorie: Alles - E innahmen - Veranstaltungen Democon #1111'}, + 'reference': 'NONREF\nDemocon-Abcde (Peter Schneider), Kategorie: Alles - Einnahmen - Veranstaltungen Democon #1111'}, {'amount': '12.00', 'date': '2017-08-23', 'payer': 'Peter Schneider', 'iban': 'DE13495179316396679327', 'bic': 'NOTABIC', - 'reference': 'Democon-Abcde (Peter Schneider ), Kategorie: Alles - E innahmen - Veranstaltungen Democon #1111'}, + 'reference': 'NONREF\nDemocon-Abcde (Peter Schneider), Kategorie: Alles - Einnahmen - Veranstaltungen Democon #1111'}, {'amount': '12.00', 'date': '2017-08-24', 'payer': 'Peter Schneider', 'iban': 'DE13495179316396679327', 'bic': 'NOTABIC', - 'reference': 'Democon-Abcde (Peter Schneider ), Kategorie: Alles- E innahmen - Veranstaltungen Democon #1111'}, + 'reference': 'NONREF\nDemocon-Abcde (Peter Schneider), Kategorie: Alles- Einnahmen - Veranstaltungen Democon #1111'}, ] ]