mirror of
https://gitlab.com/flectra-community/l10n-switzerland-flectra.git
synced 2024-11-17 03:22:03 +00:00
36 lines
1.2 KiB
Python
36 lines
1.2 KiB
Python
|
# 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")),
|
||
|
)
|
||
|
)
|