From dec59ecbceebb214386aad087829fa4e0b483364 Mon Sep 17 00:00:00 2001 From: Luc De Meyer Date: Fri, 9 Oct 2026 17:45:26 +0200 Subject: [PATCH 1/2] [FIX] account_ebics: IndexError in _split_camt for camt.054 Fix IndexError in _split_camt when camt.054 has no currency at statement level. This commit implements the following changes: - discard statements without entries before attempting currency extraction - fall back to Ntry/Amt/@Ccy for camt.054 when Acct/Ccy and Bal/Amt/@Ccy are absent --- README.md | 2 +- account_ebics/__manifest__.py | 2 +- account_ebics/models/ebics_file.py | 42 +++++++++++++++++------------- 3 files changed, 26 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 484cec6..9794660 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Available addons ---------------- addon | version | maintainers | summary --- | --- | --- | --- -[account_ebics](account_ebics/) | 18.0.1.2.1 | | Download bank statements and upload payment files directly from Odoo, using the European EBICS standard +[account_ebics](account_ebics/) | 18.0.1.2.2 | | Download bank statements and upload payment files directly from Odoo, using the European EBICS standard [account_ebics_batch](account_ebics_batch/) | 18.0.1.0.1 | | Download and process your EBICS files automatically, on a schedule [account_ebics_batch_payment](account_ebics_batch_payment/) | 18.0.1.2.0 | | Send an Odoo Enterprise batch payment to the bank over EBICS [account_ebics_oca_statement_import](account_ebics_oca_statement_import/) | 18.0.1.0.1 | | Process EBICS statement files with the OCA bank statement import diff --git a/account_ebics/__manifest__.py b/account_ebics/__manifest__.py index de6c7ce..105085d 100644 --- a/account_ebics/__manifest__.py +++ b/account_ebics/__manifest__.py @@ -7,7 +7,7 @@ "Download bank statements and upload payment files directly from Odoo, " "using the European EBICS standard" ), - "version": "18.0.1.2.1", + "version": "18.0.1.2.2", "license": "LGPL-3", "author": "Noviat", "website": "https://www.noviat.com/", diff --git a/account_ebics/models/ebics_file.py b/account_ebics/models/ebics_file.py index 44e341f..d36cd66 100644 --- a/account_ebics/models/ebics_file.py +++ b/account_ebics/models/ebics_file.py @@ -586,9 +586,21 @@ class EbicsFile(models.Model): message = self.env._("No bank account number found.") res["notifications"].append({"type": "error", "message": message}) continue - currency_code = stmt.xpath( + if not stmt.findall("ns:Ntry", ns): + continue + currency_codes = stmt.xpath( "ns:Acct/ns:Ccy/text() | ns:Bal/ns:Amt/@Ccy", namespaces=ns - )[0] + ) + if not currency_codes and camt_variant == "054": + currency_codes = stmt.xpath("ns:Ntry/ns:Amt/@Ccy", namespaces=ns) + if not currency_codes: + message = self.env._( + "No currency found in statement for Account Number %(nbr)s.", + nbr=acc_number, + ) + res["notifications"].append({"type": "error", "message": message}) + continue + currency_code = currency_codes[0] # some banks (e.g. COMMERZBANK) add the currency as the last 3 digits # of the bank account number hence we need to remove this since otherwise # the journal matching logic fails @@ -596,26 +608,20 @@ class EbicsFile(models.Model): acc_number = acc_number[:-3] root_new = deepcopy(root) - entries = False for j, el in enumerate(root_new[0].findall(f"ns:{camt_tag}", ns)): if j != i: el.getparent().remove(el) - else: - entries = el.findall("ns:Ntry", ns) - if not entries: + currency, journal = self._lookup_journal(res, acc_number, currency_code) + if not (currency and journal): continue - else: - currency, journal = self._lookup_journal(res, acc_number, currency_code) - if not (currency and journal): - continue - datas.append( - { - "acc_number": acc_number, - "journal_id": journal.id, - "company_id": journal.company_id.id, - "data": base64.b64encode(etree.tostring(root_new)), - } - ) + datas.append( + { + "acc_number": acc_number, + "journal_id": journal.id, + "company_id": journal.company_id.id, + "data": base64.b64encode(etree.tostring(root_new)), + } + ) return datas From f83e3d0038619481480f5a248717c7d8fa4e8c7b Mon Sep 17 00:00:00 2001 From: oca-ci Date: Mon, 12 Oct 2026 16:59:50 +0000 Subject: [PATCH 2/2] [UPD] Update account_ebics.pot --- account_ebics/i18n/account_ebics.pot | 6 ++++++ account_ebics/i18n/de.po | 6 ++++++ account_ebics/i18n/fr.po | 6 ++++++ account_ebics/i18n/nl.po | 6 ++++++ 4 files changed, 24 insertions(+) diff --git a/account_ebics/i18n/account_ebics.pot b/account_ebics/i18n/account_ebics.pot index 73d1d1f..2bb0813 100644 --- a/account_ebics/i18n/account_ebics.pot +++ b/account_ebics/i18n/account_ebics.pot @@ -1148,6 +1148,12 @@ msgstr "" msgid "No bank defined for the financial journal of the EBICS Config" msgstr "" +#. module: account_ebics +#. odoo-python +#: code:addons/account_ebics/models/ebics_file.py:0 +msgid "No currency found in statement for Account Number %(nbr)s." +msgstr "" + #. module: account_ebics #. odoo-python #: code:addons/account_ebics/models/ebics_file.py:0 diff --git a/account_ebics/i18n/de.po b/account_ebics/i18n/de.po index 2e1fe93..d67bbaf 100644 --- a/account_ebics/i18n/de.po +++ b/account_ebics/i18n/de.po @@ -1225,6 +1225,12 @@ msgstr "Keine Bankkontonummer gefunden." msgid "No bank defined for the financial journal of the EBICS Config" msgstr "Keine Bank für das Finanzjournal der EBICS-Konfiguration definiert" +#. module: account_ebics +#. odoo-python +#: code:addons/account_ebics/models/ebics_file.py:0 +msgid "No currency found in statement for Account Number %(nbr)s." +msgstr "" + #. module: account_ebics #. odoo-python #: code:addons/account_ebics/models/ebics_file.py:0 diff --git a/account_ebics/i18n/fr.po b/account_ebics/i18n/fr.po index 56ed0c6..2d0f675 100644 --- a/account_ebics/i18n/fr.po +++ b/account_ebics/i18n/fr.po @@ -1222,6 +1222,12 @@ msgstr "Aucun numéro de compte bancaire trouvé." msgid "No bank defined for the financial journal of the EBICS Config" msgstr "Aucune banque définie pour le journal financier de la config EBICS" +#. module: account_ebics +#. odoo-python +#: code:addons/account_ebics/models/ebics_file.py:0 +msgid "No currency found in statement for Account Number %(nbr)s." +msgstr "" + #. module: account_ebics #. odoo-python #: code:addons/account_ebics/models/ebics_file.py:0 diff --git a/account_ebics/i18n/nl.po b/account_ebics/i18n/nl.po index 0f1ee00..1995f90 100644 --- a/account_ebics/i18n/nl.po +++ b/account_ebics/i18n/nl.po @@ -1223,6 +1223,12 @@ msgstr "Geen bankrekeningnummer gevonden." msgid "No bank defined for the financial journal of the EBICS Config" msgstr "Geen bank gedefinieerd voor het financiële dagboek van de EBICS-config" +#. module: account_ebics +#. odoo-python +#: code:addons/account_ebics/models/ebics_file.py:0 +msgid "No currency found in statement for Account Number %(nbr)s." +msgstr "" + #. module: account_ebics #. odoo-python #: code:addons/account_ebics/models/ebics_file.py:0