From 8eb2893932908ff0fc8157454a5ee4f3c90279ca Mon Sep 17 00:00:00 2001 From: "Julien (jula)" Date: Wed, 1 Mar 2023 12:23:07 +0000 Subject: [PATCH] [FIX] base_vat: support for 2020 Albanian Tax ID MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit __Description of the issue this PR addresses:__ The first character of a Tax ID from Albania is a letter representing the decade in which it has been issued. The letter M represents the current decade. (This pdf explains in details how it is formated: https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Albania-TIN.pdf). Currently the way Albanian Tax IDs are validated is through the python library [`python-stdnum`](https://pypi.org/project/python-stdnum/). However, the regex that is used to validate them has not been updated since 2017. (I made a PR in its repo https://github.com/arthurdejong/python-stdnum/pull/402 to fix that). The code from this commit is inspired by the one from that library, but the regex includes the letter M. __Current behavior before PR:__ (`base_vat` must be installed) By going to Settings > Users & Companies > [A company]: - Set the country to Albania - Set VAT/Tax ID to “M12345678T”. => Error message closes odoo/odoo#114488 X-original-commit: f0b6e4ccd8f7402a5d70b9d60d91e463073e5bde Signed-off-by: Nicolas Viseur (vin) --- addons/base_vat/models/res_partner.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/addons/base_vat/models/res_partner.py b/addons/base_vat/models/res_partner.py index c391e38e255..a51d9824b1f 100644 --- a/addons/base_vat/models/res_partner.py +++ b/addons/base_vat/models/res_partner.py @@ -285,6 +285,16 @@ class ResPartner(models.Model): ) + __check_vat_al_re = re.compile(r'^[JKLM][0-9]{8}[A-Z]$') + + def check_vat_al(self, vat): + """Check Albania VAT number""" + number = stdnum.util.get_cc_module('al', 'vat').compact(vat) + + if len(number) == 10 and self.__check_vat_al_re.match(number): + return True + return False + __check_vat_ch_re = re.compile(r'E([0-9]{9}|-[0-9]{3}\.[0-9]{3}\.[0-9]{3})(MWST|TVA|IVA)$') def check_vat_ch(self, vat):