From a9a09da5ed2331020a0d3c2186d55c625000ca7d Mon Sep 17 00:00:00 2001 From: Baptiste Vergote Date: Mon, 12 Oct 2020 08:42:59 +0000 Subject: [PATCH] [FIX] base_vat: wrong example vatnumber for CH As described here: https://www.estv.admin.ch/estv/fr/home/mehrwertsteuer/fachinformationen/steuerpflicht/unternehmens-identifikationsnummer--uid-.html The "new" (since 2014) vat number has to be displayed as: CHE 9 numeric digits plus TVA/MWST/IVA e.g.: CHE-123.456.788 TVA This commit removes the previous 6 digits vat number check and regex, and provide accurate examples on the error message displayed if the vatnumber given is wrong. opw-2291581 closes odoo/odoo#59793 X-original-commit: 624e086f0c8ac854fd292d3c6dd14a71ed67b9fe Signed-off-by: Nicolas Martinelli (nim) --- addons/base_vat/models/res_partner.py | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/addons/base_vat/models/res_partner.py b/addons/base_vat/models/res_partner.py index 00014929de8..1cb3a0e5994 100644 --- a/addons/base_vat/models/res_partner.py +++ b/addons/base_vat/models/res_partner.py @@ -23,7 +23,7 @@ _ref_vat = { 'au': '83 914 571 673', 'be': 'BE0477472701', 'bg': 'BG1234567892', - 'ch': 'CHE-123.456.788 TVA or CH TVA 123456', # Swiss by Yannick Vaucher @ Camptocamp + 'ch': 'CHE-123.456.788 TVA or CHE-123.456.788 MWST or CHE-123.456.788 IVA', # Swiss by Yannick Vaucher @ Camptocamp 'cl': 'CL76086428-5', 'co': 'CO213123432-1 or CO213.123.432-1', 'cy': 'CY10259033P', @@ -175,23 +175,16 @@ class ResPartner(models.Model): format=vat_no ) - __check_vat_ch_re1 = re.compile(r'(MWST|TVA|IVA)[0-9]{6}$') - __check_vat_ch_re2 = re.compile(r'E([0-9]{9}|-[0-9]{3}\.[0-9]{3}\.[0-9]{3})(MWST|TVA|IVA)$') + __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): ''' Check Switzerland VAT number. ''' - # VAT number in Switzerland will change between 2011 and 2013 - # http://www.estv.admin.ch/mwst/themen/00154/00589/01107/index.html?lang=fr - # Old format is "TVA 123456" we will admit the user has to enter ch before the number - # Format will becomes such as "CHE-999.999.99C TVA" - # Both old and new format will be accepted till end of 2013 + # A new VAT number format in Switzerland has been introduced between 2011 and 2013 + # https://www.estv.admin.ch/estv/fr/home/mehrwertsteuer/fachinformationen/steuerpflicht/unternehmens-identifikationsnummer--uid-.html + # The old format "TVA 123456" is not valid since 2014 # Accepted format are: (spaces are ignored) - # CH TVA ###### - # CH IVA ###### - # CH MWST ####### - # # CHE#########MWST # CHE#########TVA # CHE#########IVA @@ -199,11 +192,12 @@ class ResPartner(models.Model): # CHE-###.###.### TVA # CHE-###.###.### IVA # - if self.__check_vat_ch_re1.match(vat): - return True - match = self.__check_vat_ch_re2.match(vat) + # /!\ The english abbreviation VAT is not valid /!\ + + match = self.__check_vat_ch_re.match(vat) + if match: - # For new TVA numbers, do a mod11 check + # For new TVA numbers, the last digit is a MOD11 checksum digit build with weighting pattern: 5,4,3,2,7,6,5,4 num = [s for s in match.group(1) if s.isdigit()] # get the digits only factor = (5, 4, 3, 2, 7, 6, 5, 4) csum = sum([int(num[i]) * factor[i] for i in range(8)])