From ccdc6b3d61a7147fbeb8a37dd6465bf06cf97af4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Henryk=20Pl=C3=B6tz?= Date: Sat, 8 Jun 2019 20:19:17 +0200 Subject: [PATCH] Let simple_sepa_transfer() automatically choose a SEPA PAIN version --- fints/client.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/fints/client.py b/fints/client.py index 5814491..3d09332 100644 --- a/fints/client.py +++ b/fints/client.py @@ -681,6 +681,23 @@ class FinTS3Client: return responses + def _find_supported_sepa_version(self, candidate_versions): + hispas = self.bpd.find_segment_first('HISPAS') + if not hispas: + logger.warning("Could not determine supported SEPA versions, is the dialogue open? Defaulting to first candidate: %s.", candidate_versions[0]) + return candidate_versions[0] + + bank_supported = list(hispas.parameter.supported_sepa_formats) + + for candidate in candidate_versions: + if "urn:iso:std:iso:20022:tech:xsd:{}".format(candidate) in bank_supported: + return candidate + if "urn:iso:std:iso:20022:tech:xsd:{}.xsd".format(candidate) in bank_supported: + return candidate + + logger.warning("No common supported SEPA version. Defaulting to first candidate and hoping for the best: %s.", candidate_versions[0]) + return candidate_versions[0] + def simple_sepa_transfer(self, account: SEPAAccount, iban: str, bic: str, recipient_name: str, amount: Decimal, account_name: str, reason: str, endtoend_id='NOTPROVIDED'): @@ -704,7 +721,8 @@ class FinTS3Client: "batch": False, "currency": "EUR", } - sepa = SepaTransfer(config, 'pain.001.001.03') + version = self._find_supported_sepa_version(['pain.001.001.03', 'pain.001.003.03']) + sepa = SepaTransfer(config, version) payment = { "name": recipient_name, "IBAN": iban, @@ -716,7 +734,7 @@ class FinTS3Client: } sepa.add_payment(payment) xml = sepa.export().decode() - return self.sepa_transfer(account, xml) + return self.sepa_transfer(account, xml, pain_descriptor="urn:iso:std:iso:20022:tech:xsd:"+version) def sepa_transfer(self, account: SEPAAccount, pain_message: str, multiple=False, control_sum=None, currency='EUR', book_as_single=False, -- 2.39.5