From 4dd428de41b164ce5a72f5808ca17f8228294b97 Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Fri, 29 Aug 2025 15:23:13 +0200 Subject: [PATCH] chore(Bank Account): remove IBAN validation This is now handled by the Frappe Framework. --- .../doctype/bank_account/bank_account.py | 30 ---------------- .../doctype/bank_account/test_bank_account.py | 36 +------------------ 2 files changed, 1 insertion(+), 65 deletions(-) diff --git a/erpnext/accounts/doctype/bank_account/bank_account.py b/erpnext/accounts/doctype/bank_account/bank_account.py index 9c55502af6b..d8dc1191bf7 100644 --- a/erpnext/accounts/doctype/bank_account/bank_account.py +++ b/erpnext/accounts/doctype/bank_account/bank_account.py @@ -52,7 +52,6 @@ class BankAccount(Document): def validate(self): self.validate_company() - self.validate_iban() self.validate_account() self.update_default_bank_account() @@ -72,35 +71,6 @@ class BankAccount(Document): if self.is_company_account and not self.company: frappe.throw(_("Company is mandatory for company account")) - def validate_iban(self): - """ - Algorithm: https://en.wikipedia.org/wiki/International_Bank_Account_Number#Validating_the_IBAN - """ - # IBAN field is optional - if not self.iban: - return - - def encode_char(c): - # Position in the alphabet (A=1, B=2, ...) plus nine - return str(9 + ord(c) - 64) - - # remove whitespaces, upper case to get the right number from ord() - iban = "".join(self.iban.split(" ")).upper() - - # Move country code and checksum from the start to the end - flipped = iban[4:] + iban[:4] - - # Encode characters as numbers - encoded = [encode_char(c) if ord(c) >= 65 and ord(c) <= 90 else c for c in flipped] - - try: - to_check = int("".join(encoded)) - except ValueError: - frappe.throw(_("IBAN is not valid")) - - if to_check % 97 != 1: - frappe.throw(_("IBAN is not valid")) - def update_default_bank_account(self): if self.is_default and not self.disabled: frappe.db.set_value( diff --git a/erpnext/accounts/doctype/bank_account/test_bank_account.py b/erpnext/accounts/doctype/bank_account/test_bank_account.py index b3f3469a5d9..146f426e6c7 100644 --- a/erpnext/accounts/doctype/bank_account/test_bank_account.py +++ b/erpnext/accounts/doctype/bank_account/test_bank_account.py @@ -8,38 +8,4 @@ from frappe.tests import IntegrationTestCase class TestBankAccount(IntegrationTestCase): - def test_validate_iban(self): - valid_ibans = [ - "GB82 WEST 1234 5698 7654 32", - "DE91 1000 0000 0123 4567 89", - "FR76 3000 6000 0112 3456 7890 189", - ] - - invalid_ibans = [ - # wrong checksum (3rd place) - "GB72 WEST 1234 5698 7654 32", - "DE81 1000 0000 0123 4567 89", - "FR66 3000 6000 0112 3456 7890 189", - ] - - bank_account = frappe.get_doc({"doctype": "Bank Account"}) - - try: - bank_account.validate_iban() - except AttributeError: - msg = "BankAccount.validate_iban() failed for empty IBAN" - self.fail(msg=msg) - - for iban in valid_ibans: - bank_account.iban = iban - try: - bank_account.validate_iban() - except ValidationError: - msg = f"BankAccount.validate_iban() failed for valid IBAN {iban}" - self.fail(msg=msg) - - for not_iban in invalid_ibans: - bank_account.iban = not_iban - msg = f"BankAccount.validate_iban() accepted invalid IBAN {not_iban}" - with self.assertRaises(ValidationError, msg=msg): - bank_account.validate_iban() + pass