l10n-switzerland-flectra/account_banking_pain_base/models/res_bank.py

36 lines
1.2 KiB
Python
Raw Normal View History

# Copyright 2019 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import re
from flectra import _, api, models
from flectra.exceptions import ValidationError
BIC_REGEX = re.compile(r"[A-Z]{6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3})?$")
class ResBank(models.Model):
_inherit = "res.bank"
@api.constrains("bic")
def _check_bic(self):
"""
This method strengthens the constraint on the BIC of the bank account
(The account_payment_order module already checks the length in the
check_bic_length method).
:raise: ValidationError if the BIC doesn't respect the regex of the
SEPA pain schemas.
"""
invalid_banks = self.filtered(lambda r: r.bic and not BIC_REGEX.match(r.bic))
if invalid_banks:
raise ValidationError(
_(
"The following Bank Identifier Codes (BIC) do not respect "
"the SEPA pattern:\n{bic_list}\n\nSEPA pattern: "
"{sepa_pattern}"
).format(
sepa_pattern=BIC_REGEX.pattern,
bic_list="\n".join(invalid_banks.mapped("bic")),
)
)