[IMP] base_vat: rename files as per strucuture test
authormra (Open ERP) <mra@tinyerp.com>
Tue, 11 May 2010 13:54:50 +0000 (19:24 +0530)
committermra (Open ERP) <mra@tinyerp.com>
Tue, 11 May 2010 13:54:50 +0000 (19:24 +0530)
bzr revid: mra@tinyerp.com-20100511135450-6jag617mzhcrz99i

addons/base_vat/__init__.py
addons/base_vat/__openerp__.py
addons/base_vat/base_vat.py [new file with mode: 0644]
addons/base_vat/base_vat_data.xml [deleted file]
addons/base_vat/base_vat_view.xml [new file with mode: 0644]
addons/base_vat/partner.py [deleted file]

index 5a22008..e1999d3 100644 (file)
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 ##############################################################################
-#    
+#
 #    OpenERP, Open Source Management Solution
 #    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
 #
 #    GNU Affero General Public License for more details.
 #
 #    You should have received a copy of the GNU Affero General Public License
-#    along with this program.  If not, see <http://www.gnu.org/licenses/>.     
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 ##############################################################################
 
-import partner
+import base_vat
 
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
 
index bdef947..3e7d498 100644 (file)
@@ -18,8 +18,6 @@
 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 ##############################################################################
-
-
 {
     'name': 'Base VAT - To check VAT number validity',
     'version': '1.0',
@@ -32,9 +30,9 @@
     """,
     'author': 'Tiny',
     'depends': ['base', 'account'],
-    'update_xml': ['base_vat_data.xml'],
+    'update_xml': ['base_vat_view.xml'],
     'installable': True,
     'active': False,
     'certificate': '0084849360989',
 }
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
diff --git a/addons/base_vat/base_vat.py b/addons/base_vat/base_vat.py
new file mode 100644 (file)
index 0000000..79802cc
--- /dev/null
@@ -0,0 +1,1069 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    OpenERP, Open Source Management Solution
+#    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). All Rights Reserved
+#    Copyright (C) 2008-2009 B2CK, Cedric Krier, Bertrand Chenal (the methods "check_vat_[a-z]{2}"
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU General Public License as published by
+#    the Free Software Foundation, either version 3 of the License, or
+#    (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU General Public License for more details.
+#
+#    You should have received a copy of the GNU General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from osv import osv
+from osv import fields
+import string
+from tools.func import partial
+from tools.translate import _
+
+_ref_vat = {
+    'be': 'BE0477472701',
+}
+
+def mult_add(i, j):
+    """Sum each digits of the multiplication of i and j."""
+    return reduce(lambda x, y: x + int(y), str(i*j), 0)
+
+class res_partner(osv.osv):
+    _inherit = 'res.partner'
+
+    def _split_vat(self, vat):
+        vat_country, vat_number = vat[:2].lower(), vat[2:].replace(' ', '')
+        return vat_country, vat_number
+
+    def check_vat(self, cr, uid, ids):
+        '''
+        Check the VAT number depending of the country.
+        http://sima-pc.com/nif.php
+        '''
+        for partner in self.browse(cr, uid, ids):
+            if not partner.vat:
+                continue
+            vat_country, vat_number = self._split_vat(partner.vat)
+            if not hasattr(self, 'check_vat_' + vat_country):
+                return False
+            check = getattr(self, 'check_vat_' + vat_country)
+            if not check(vat_number):
+                return False
+
+        return True
+
+    def vat_change(self, cr, uid, ids, value, context={}):
+        return {'value': {'vat_subjected': bool(value)}}
+
+    _columns = {
+        'vat_subjected': fields.boolean('VAT Legal Statement', help="Check this box if the partner is subjected to the VAT. It will be used for the VAT legal statement.")
+    }
+
+    def _construct_constraint_msg(self, cr, uid, ids):
+        def default_vat_check(cn, vn):
+            # by default, a VAT number is valid if:
+            #  it starts with 2 letters
+            #  has more than 3 characters
+            return cn[0] in string.ascii_lowercase and cn[1] in string.ascii_lowercase
+
+        vat_country, vat_number = self._split_vat(self.browse(cr, uid, ids)[0].vat)
+        if default_vat_check(vat_country, vat_number):
+            return _('The Vat does not seems to be correct. You should have entered something like this %s'), (_ref_vat[vat_country])
+        return _('The VAT is invalid, it should begin with the country code'), ()
+
+    _constraints = [(check_vat, _construct_constraint_msg, ["vat"])]
+
+    # code from the following methods come from Tryton (B2CK)
+    # http://www.tryton.org/hgwebdir.cgi/modules/relationship/file/544d1de586d9/party.py
+    def check_vat_at(self, vat):
+        '''
+        Check Austria VAT number.
+        '''
+        if len(vat) != 9:
+            return False
+        if vat[0] != 'U':
+            return False
+        num = vat[1:]
+        try:
+            int(num)
+        except:
+            return False
+        sum = int(num[0]) + mult_add(2, int(num[1])) + \
+                int(num[2]) + mult_add(2, int(num[3])) + \
+                int(num[4]) + mult_add(2, int(num[5])) + \
+                int(num[6])
+        check = 10 - ((sum + 4) % 10)
+        if check == 10:
+            check = 0
+        if int(vat[-1:]) != check:
+            return False
+        return True
+
+    def check_vat_be(self, vat):
+        '''
+        Check Belgium VAT number.
+        '''
+        if len(vat) != 10:
+            return False
+        try:
+            int(vat)
+        except:
+            return False
+        if int(vat[-2:]) != \
+                97 - (int(vat[:8]) % 97):
+            return False
+        return True
+
+    def check_vat_bg(self, vat):
+        '''
+        Check Bulgaria VAT number.
+        '''
+        if len(vat) not in [9,10]:
+            return False
+        try:
+            int(vat)
+        except:
+            return False
+        if int(vat[0]) in (2, 3) and \
+                int(vat[1:2]) != 22:
+            return False
+        sum = 4 * int(vat[0]) + 3 * int(vat[1]) + 2 * int(vat[2]) + \
+                7 * int(vat[3]) + 6 * int(vat[4]) + 5 * int(vat[5]) + \
+                4 * int(vat[6]) + 3 * int(vat[7]) + 2 * int(vat[8])
+        check = 11 - (sum % 11)
+        if check == 11:
+            check = 0
+#        if check == 10:
+#            return False
+#        if check != int(vat[9]):
+#            return False
+        return True
+
+    def check_vat_cy(self, vat):
+        '''
+        Check Cyprus VAT number.
+        '''
+        if len(vat) != 9:
+            return False
+        try:
+            int(vat[:8])
+        except:
+            return False
+        n0 = int(vat[0])
+        n1 = int(vat[1])
+        n2 = int(vat[2])
+        n3 = int(vat[3])
+        n4 = int(vat[4])
+        n5 = int(vat[5])
+        n6 = int(vat[6])
+        n7 = int(vat[7])
+
+        def conv(x):
+            if x == 0:
+                return 1
+            elif x == 1:
+                return 0
+            elif x == 2:
+                return 5
+            elif x == 3:
+                return 7
+            elif x == 4:
+                return 9
+            elif x == 5:
+                return 13
+            elif x == 6:
+                return 15
+            elif x == 7:
+                return 17
+            elif x == 8:
+                return 19
+            elif x == 9:
+                return 21
+            return x
+        n0 = conv(n0)
+        n2 = conv(n2)
+        n4 = conv(n4)
+        n6 = conv(n6)
+
+        sum = n0 + n1 + n2 + n3 + n4 + n5 + n6 + n7
+        check = chr(sum % 26 + 65)
+        if check != vat[8]:
+            return False
+        return True
+
+    def check_vat_cz(self, vat):
+        '''
+        Check Czech Republic VAT number.
+        '''
+        if len(vat) not in (8, 9, 10):
+            return False
+        try:
+            int(vat)
+        except:
+            return False
+
+        if len(vat) == 8:
+            if int(vat[0]) not in (0, 1, 2, 3, 4, 5, 6, 7, 8):
+                return False
+            sum = 8 * int(vat[0]) + 7 * int(vat[1]) + 6 * int(vat[2]) + \
+                    5 * int(vat[3]) + 4 * int(vat[4]) + 3 * int(vat[5]) + \
+                    2 * int(vat[6])
+            check = 11 - (sum % 11)
+            if check == 10:
+                check = 0
+            if check == 11:
+                check = 1
+            if check != int(vat[7]):
+                return False
+        elif len(vat) == 9 and int(vat[0]) == 6:
+            sum = 8 * int(vat[1]) + 7 * int(vat[2]) + 6 * int(vat[3]) + \
+                    5 * int(vat[4]) + 4 * int(vat[5]) + 3 * int(vat[6]) + \
+                    2 * int(vat[7])
+            check = 9 - ((11 - (sum % 11)) % 10)
+            if check != int(vat[8]):
+                return False
+        elif len(vat) == 9:
+            if int(vat[0:2]) > 53 and int(vat[0:2]) < 80:
+                return False
+            if int(vat[2:4]) < 1:
+                return False
+            if int(vat[2:4]) > 12 and int(vat[2:4]) < 51:
+                return False
+            if int(vat[2:4]) > 62:
+                return False
+            if int(vat[2:4]) in (2, 52) and int(vat[0:2]) % 4 > 0:
+                if int(vat[4:6]) < 1:
+                    return False
+                if int(vat[4:6]) > 28:
+                    return False
+            if int(vat[2:4]) in (2, 52) and int(vat[0:2]) % 4 == 0:
+                if int(vat[4:6]) < 1:
+                    return False
+                if int(vat[4:6]) > 29:
+                    return False
+            if int(vat[2:4]) in (4, 6, 9, 11, 54, 56, 59, 61):
+                if int(vat[4:6]) < 1:
+                    return False
+                if int(vat[4:6]) > 30:
+                    return False
+            if int(vat[2:4]) in (1, 3, 5, 7, 8, 10, 12, 51,
+                    53, 55, 57, 58, 60, 62):
+                if int(vat[4:6]) < 1:
+                    return False
+                if int(vat[4:6]) > 31:
+                    return False
+        elif len(vat) == 10:
+            if int(vat[0:2]) < 54:
+                return False
+            if int(vat[2:4]) < 1:
+                return False
+            if int(vat[2:4]) > 12 and int(vat[2:4]) < 51:
+                return False
+            if int(vat[2:4]) > 62:
+                return False
+            if int(vat[2:4]) in (2, 52) and int(vat[0:2]) % 4 > 0:
+                if int(vat[4:6]) < 1:
+                    return False
+                if int(vat[4:6]) > 28:
+                    return False
+            if int(vat[2:4]) in (2, 52) and int(vat[0:2]) % 4 == 0:
+                if int(vat[4:6]) < 1:
+                    return False
+                if int(vat[4:6]) > 29:
+                    return False
+            if int(vat[2:4]) in (4, 6, 9, 11, 54, 56, 59, 61):
+                if int(vat[4:6]) < 1:
+                    return False
+                if int(vat[4:6]) > 30:
+                    return False
+            if int(vat[2:4]) in (1, 3, 5, 7, 8, 10, 12, 51,
+                    53, 55, 57, 58, 60, 62):
+                if int(vat[4:6]) < 1:
+                    return False
+                if int(vat[4:6]) > 31:
+                    return False
+            if (int(vat[0:2]) + int(vat[2:4]) + int(vat[4:6]) + int(vat[6:8]) +
+                    int(vat[8:10])) % 11 != 0:
+                return False
+            if int(vat[0:10]) % 11 != 0:
+                return False
+        return True
+
+    def check_vat_de(self, vat):
+        '''
+        Check Germany VAT number.
+        '''
+        if len(vat) != 9:
+            return False
+        try:
+            int(vat)
+        except:
+            return False
+        if int(vat[0:7]) <= 0:
+            return False
+        sum = 0
+        for i in range(8):
+            sum = (2 * ((int(vat[i]) + sum + 9) % 10 + 1)) % 11
+        check = 11 - sum
+        if check == 10:
+            check = 0
+        if int(vat[8]) != check:
+            return False
+        return True
+
+    def check_vat_dk(self, vat):
+        '''
+        Check Denmark VAT number.
+        '''
+        if len(vat) != 8:
+            return False
+        try:
+            int(vat)
+        except:
+            return False
+        if int(vat[0]) <= 0:
+            return False
+        sum = 2 * int(vat[0]) + 7 * int(vat[1]) + 6 * int(vat[2]) + \
+                5 * int(vat[3]) + 4 * int(vat[4]) + 3 * int(vat[5]) + \
+                2 * int(vat[6]) + int(vat[7])
+        if sum % 11 != 0:
+            return False
+        return True
+
+    def check_vat_ee(self, vat):
+        '''
+        Check Estonia VAT number.
+        '''
+        if len(vat) != 9:
+            return False
+        try:
+            int(vat)
+        except:
+            return False
+        sum = 3 * int(vat[0]) + 7 * int(vat[1]) + 1 * int(vat[2]) + \
+                3 * int(vat[3]) + 7 * int(vat[4]) + 1 * int(vat[5]) + \
+                3 * int(vat[6]) + 7 * int(vat[7])
+        check = 10 - (sum % 10)
+        if check == 10:
+            check = 0
+        if check != int(vat[8]):
+            return False
+        return True
+
+    def check_vat_es(self, vat):
+        '''
+        Check Spain VAT number.
+        '''
+        if len(vat) != 9:
+            return False
+
+        conv = {
+            1: 'T',
+            2: 'R',
+            3: 'W',
+            4: 'A',
+            5: 'G',
+            6: 'M',
+            7: 'Y',
+            8: 'F',
+            9: 'P',
+            10: 'D',
+            11: 'X',
+            12: 'B',
+            13: 'N',
+            14: 'J',
+            15: 'Z',
+            16: 'S',
+            17: 'Q',
+            18: 'V',
+            19: 'H',
+            20: 'L',
+            21: 'C',
+            22: 'K',
+            23: 'E',
+        }
+        #Legal persons with profit aim
+        if vat[0] in ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'U', 'V'):
+            try:
+                int(vat[1:8])
+            except:
+                return False
+            sum = mult_add(2, int(vat[1])) + int(vat[2]) + \
+                    mult_add(2, int(vat[3])) + int(vat[4]) + \
+                    mult_add(2, int(vat[5])) + int(vat[6]) + \
+                    mult_add(2, int(vat[7]))
+            check = 10 - (sum % 10)
+            if check == 10:
+                check = 0
+#            if check != int(vat[8]):
+#                return False
+            return True
+        #Legal persons with non-profit aim
+        elif vat[0] in ('N', 'P', 'Q', 'R', 'S', 'W'):
+            try:
+                int(vat[1:8])
+            except:
+                return False
+            sum = mult_add(2, int(vat[1])) + int(vat[2]) + \
+                    mult_add(2, int(vat[3])) + int(vat[4]) + \
+                    mult_add(2, int(vat[5])) + int(vat[6]) + \
+                    mult_add(2, int(vat[7]))
+            check = 10 - (sum % 10)
+            check = chr(check + 64)
+            if check != vat[8]:
+                return False
+            return True
+        #Foreign natural persons, under age 14 or non-residents
+        elif vat[0] in ('K', 'L', 'M', 'X', 'Y', 'Z'):
+            if vat[0] == 'Y':
+                check_value = '1' + vat[1:8]
+            elif vat[0] == 'Z':
+                check_value = '2' + vat[1:8]
+            else:
+                check_value = vat[1:8]
+
+            try:
+                int(check_value)
+            except:
+                return False
+            check = 1 + (int(check_value) % 23)
+
+            check = conv[check]
+            if check != vat[8]:
+                return False
+            return True
+        #Spanish natural persons
+        else:
+            try:
+                int(vat[:8])
+            except:
+                return False
+            check = 1 + (int(vat[:8]) % 23)
+
+            check = conv[check]
+            if check != vat[8]:
+                return False
+            return True
+
+    def check_vat_fi(self, vat):
+        '''
+        Check Finland VAT number.
+        '''
+        if len(vat) != 8:
+            return False
+        try:
+            int(vat)
+        except:
+            return False
+        sum = 7 * int(vat[0]) + 9 * int(vat[1]) + 10 * int(vat[2]) + \
+                5 * int(vat[3]) + 8 * int(vat[4]) + 4 * int(vat[5]) + \
+                2 * int(vat[6])
+        check = 11 - (sum % 11)
+        if check == 11:
+            check = 0
+        if check == 10:
+            return False
+        if check != int(vat[7]):
+            return False
+        return True
+
+    def check_vat_fr(self, vat):
+        '''
+        Check France VAT number.
+        '''
+        if len(vat) != 11:
+            return False
+
+        try:
+            int(vat[2:11])
+        except:
+            return False
+
+        system = None
+        try:
+            int(vat[0:2])
+            system = 'old'
+        except:
+            system = 'new'
+
+        if system == 'old':
+            check = ((int(vat[2:11]) * 100) + 12) % 97
+            if check != int(vat[0:2]):
+                return False
+            return True
+        else:
+            conv = ['0', '1', '2', '3', '4', '5', '6', '7',
+                '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
+                'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T',
+                'U', 'V', 'W', 'X', 'Y', 'Z']
+            if vat[0] not in conv \
+                    or vat[1] not in conv:
+                return False
+            c1 = conv.index(vat[0])
+            c2 = conv.index(vat[1])
+
+            if c1 < 10:
+                sum = c1 * 24 + c2 - 10
+            else:
+                sum = c1 * 34 + c2 - 100
+
+            x = sum % 11
+            sum = (int(sum) / 11) + 1
+            y = (int(vat[2:11]) + sum) % 11
+            if x != y:
+                return False
+            return True
+
+    def check_vat_gb(self, vat):
+        '''
+        Check United Kingdom VAT number.
+        '''
+
+        if len(vat) == 5:
+            try:
+                int(vat[2:5])
+            except:
+                return False
+
+            if vat[0:2] == 'GD':
+                if int(vat[2:5]) >= 500:
+                    return False
+                return True
+            if vat[0:2] == 'HA':
+                if int(vat[2:5]) < 500:
+                    return False
+                return True
+            return False
+        elif len(vat) in (9, 10):
+            try:
+                int(vat)
+            except:
+                return False
+
+            if int(vat[0:7]) < 1:
+                return False
+            if int(vat[0:7]) > 19999 and int(vat[0:7]) < 1000000:
+                return False
+            if int(vat[7:9]) > 97:
+                return False
+            if len(vat) == 10 and int(vat[9]) != 3:
+                return False
+
+            sum = 8 * int(vat[0]) + 7 * int(vat[1]) + 6 * int(vat[2]) + \
+                    5 * int(vat[3]) + 4 * int(vat[4]) + 3 * int(vat[5]) + \
+                    2 * int(vat[6]) + 10 * int(vat[7]) + int(vat[8])
+            if sum % 97 != 0:
+                return False
+            return True
+        elif len(vat) in (12, 13):
+            try:
+                int(vat)
+            except:
+                return False
+
+            if int(vat[0:3]) not in (0, 1):
+                return False
+
+            if int(vat[3:10]) < 1:
+                return False
+            if int(vat[3:10]) > 19999 and int(vat[3:10]) < 1000000:
+                return False
+            if int(vat[10:12]) > 97:
+                return False
+            if len(vat) == 13 and int(vat[12]) != 3:
+                return False
+
+            sum = 8 * int(vat[3]) + 7 * int(vat[4]) + 6 * int(vat[5]) + \
+                    5 * int(vat[6]) + 4 * int(vat[7]) + 3 * int(vat[8]) + \
+                    2 * int(vat[9]) + 10 * int(vat[10]) + int(vat[11])
+            if sum % 97 != 0:
+                return False
+            return True
+        return False
+
+    def check_vat_gr(self, vat):
+        '''
+        Check Greece VAT number.
+        '''
+        try:
+            int(vat)
+        except:
+            return False
+        if len(vat) == 8:
+            sum = 128 * int(vat[0]) + 64 * int(vat[1]) + 32 * int(vat[2]) + \
+                    16 * int(vat[3]) + 8 * int(vat[4]) + 4 * int(vat[5]) + \
+                    2 * int(vat[6])
+            check = sum % 11
+            if check == 10:
+                check = 0
+            if check != int(vat[7]):
+                return False
+            return True
+        elif len(vat) == 9:
+            sum = 256 * int(vat[0]) + 128 * int(vat[1]) + 64 * int(vat[2]) + \
+                    32 * int(vat[3]) + 16 * int(vat[4]) + 8 * int(vat[5]) + \
+                    4 * int(vat[6]) + 2 * int(vat[7])
+            check = sum % 11
+            if check == 10:
+                check = 0
+            if check != int(vat[8]):
+                return False
+            return True
+        return False
+
+    def check_vat_el(self, vat):
+        return self.check_vat_gr(vat)
+
+    def check_vat_hu(self, vat):
+        '''
+        Check Hungary VAT number.
+        '''
+        if len(vat) != 8:
+            return False
+        try:
+            int(vat)
+        except:
+            return False
+        if int(vat[0]) <= 0:
+            return False
+        sum = 9 * int(vat[0]) + 7 * int(vat[1]) + 3 * int(vat[2]) + \
+                1 * int(vat[3]) + 9 * int(vat[4]) + 7 * int(vat[5]) + \
+                3 * int(vat[6])
+        check = 10 - (sum % 10)
+        if check == 10:
+            check = 0
+        if check != int(vat[7]):
+            return False
+        return True
+
+    def check_vat_ie(self, vat):
+        '''
+        Check Ireland VAT number.
+        '''
+        if len(vat) != 8:
+            return False
+        if (ord(vat[1]) >= 65 and ord(vat[1]) <= 90) \
+                or vat[1] in ('+', '*'):
+            try:
+                int(vat[0])
+                int(vat[2:7])
+            except:
+                return False
+
+            if int(vat[0]) <= 6:
+                return False
+
+            sum = 7 * int(vat[2]) + 6 * int(vat[3]) + 5 * int(vat[4]) + \
+                    4 * int(vat[5]) + 3 * int(vat[6]) + 2 * int(vat[0])
+            check = sum % 23
+            if check == 0:
+                check = 'W'
+            else:
+                check = chr(check + 64)
+            if check != vat[7]:
+                return False
+            return True
+        else:
+            try:
+                int(vat[0:7])
+            except:
+                return False
+
+            sum = 8 * int(vat[0]) + 7 * int(vat[1]) + 6 * int(vat[2]) + \
+                    5 * int(vat[3]) + 4 * int(vat[4]) + 3 * int(vat[5]) + \
+                    2 * int(vat[6])
+            check = sum % 23
+            if check == 0:
+                check = 'W'
+            else:
+                check = chr(check + 64)
+            if check != vat[7]:
+                return False
+            return True
+
+    def check_vat_it(self, vat):
+        '''
+        Check Italy VAT number.
+        '''
+        if len(vat) != 11:
+            return False
+        try:
+            int(vat)
+        except:
+            return False
+        if int(vat[0:7]) <= 0:
+            return False
+        if int(vat[7:10]) <= 0:
+            return False
+        if int(vat[7:10]) > 100 and int(vat[7:10]) < 120:
+            return False
+        if int(vat[7:10]) > 121:
+            return False
+
+        sum = int(vat[0]) + mult_add(2, int(vat[1])) + int(vat[2]) + \
+                mult_add(2, int(vat[3])) + int(vat[4]) + \
+                mult_add(2, int(vat[5])) + int(vat[6]) + \
+                mult_add(2, int(vat[7])) + int(vat[8]) + \
+                mult_add(2, int(vat[9]))
+        check = 10 - (sum % 10)
+        if check == 10:
+            check = 0
+        if check != int(vat[10]):
+            return False
+        return True
+
+    def check_vat_lt(self, vat):
+        '''
+        Check Lithuania VAT number.
+        '''
+        try:
+            int(vat)
+        except:
+            return False
+
+        if len(vat) == 9:
+            if int(vat[7]) != 1:
+                return False
+            sum = 1 * int(vat[0]) + 2 * int(vat[1]) + 3 * int(vat[2]) + \
+                    4 * int(vat[3]) + 5 * int(vat[4]) + 6 * int(vat[5]) + \
+                    7 * int(vat[6]) + 8 * int(vat[7])
+            if sum % 11 == 10:
+                sum = 3 * int(vat[0]) + 4 * int(vat[1]) + 5 * int(vat[2]) + \
+                        6 * int(vat[3]) + 7 * int(vat[4]) + 8 * int(vat[5]) + \
+                        9 * int(vat[6]) + 1 * int(vat[7])
+            check = sum % 11
+            if check == 10:
+                check = 0
+            if check != int(vat[8]):
+                return False
+            return True
+        elif len(vat) == 12:
+            if int(vat[10]) != 1:
+                return False
+            sum = 1 * int(vat[0]) + 2 * int(vat[1]) + 3 * int(vat[2]) + \
+                    4 * int(vat[3]) + 5 * int(vat[4]) + 6 * int(vat[5]) + \
+                    7 * int(vat[6]) + 8 * int(vat[7]) + 9 * int(vat[8]) + \
+                    1 * int(vat[9]) + 2 * int(vat[10])
+            if sum % 11 == 10:
+                sum = 3 * int(vat[0]) + 4 * int(vat[1]) + 5 * int(vat[2]) + \
+                        6 * int(vat[3]) + 7 * int(vat[4]) + 8 * int(vat[5]) + \
+                        9 * int(vat[6]) + 1 * int(vat[7]) + 2 * int(vat[8]) + \
+                        3 * int(vat[9]) + 4 * int(vat[10])
+            check = sum % 11
+            if check == 10:
+                check = 0
+            if check != int(vat[11]):
+                return False
+            return True
+        return False
+
+    def check_vat_lu(self, vat):
+        '''
+        Check Luxembourg VAT number.
+        '''
+        if len(vat) != 8:
+            return False
+        try:
+            int(vat)
+        except:
+            return False
+        if int(vat[0:6]) <= 0:
+            return False
+        check = int(vat[0:6]) % 89
+        if check != int(vat[6:8]):
+            return False
+        return True
+
+    def check_vat_lv(self, vat):
+        '''
+        Check Latvia VAT number.
+        '''
+        if len(vat) != 11:
+            return False
+        try:
+            int(vat)
+        except:
+            return False
+        if int(vat[0]) >= 4:
+            sum = 9 * int(vat[0]) + 1 * int(vat[1]) + 4 * int(vat[2]) + \
+                    8 * int(vat[3]) + 3 * int(vat[4]) + 10 * int(vat[5]) + \
+                    2 * int(vat[6]) + 5 * int(vat[7]) + 7 * int(vat[8]) + \
+                    6 * int(vat[9])
+            if sum % 11 == 4 and int(vat[0]) == 9:
+                sum = sum - 45
+            if sum % 11 == 4:
+                check = 4 - (sum % 11)
+            elif sum % 11 > 4:
+                check = 14 - (sum % 11)
+            elif sum % 11 < 4:
+                check = 3 - (sum % 11)
+            if check != int(vat[10]):
+                return False
+            return True
+        else:
+            if int(vat[2:4]) == 2 and int(vat[4:6]) % 4 > 0:
+                if int(vat[0:2]) < 1 or int(vat[0:2]) > 28:
+                    return False
+            if int(vat[2:4]) == 2 and int(vat[4:6]) % 4 == 0:
+                if int(vat[0:2]) < 1 or int(vat[0:2]) > 29:
+                    return False
+            if int(vat[2:4]) in (4, 6, 9, 11):
+                if int(vat[0:2]) < 1 or int(vat[0:2]) > 30:
+                    return False
+            if int(vat[2:4]) in (1, 3, 5, 7, 8, 10, 12):
+                if int(vat[0:2]) < 1 or int(vat[0:2]) > 31:
+                    return False
+            if int(vat[2:4]) < 1 or int(vat[2:4]) > 12:
+                return False
+            return True
+
+    def check_vat_mt(self, vat):
+        '''
+        Check Malta VAT number.
+        '''
+        if len(vat) != 8:
+            return False
+        try:
+            int(vat)
+        except:
+            return False
+
+        if int(vat[0:6]) < 100000:
+            return False
+
+        sum = 3 * int(vat[0]) + 4 * int(vat[1]) + 6 * int(vat[2]) + \
+                7 * int(vat[3]) + 8 * int(vat[4]) + 9 * int(vat[5])
+        check = 37 - (sum % 37)
+        if check != int(vat[6:8]):
+            return False
+        return True
+
+    def check_vat_nl(self, vat):
+        '''
+        Check Netherlands VAT number.
+        '''
+        if len(vat) != 12:
+            return False
+        try:
+            int(vat[0:9])
+            int(vat[10:12])
+        except:
+            return False
+        if int(vat[0:8]) <= 0:
+            return False
+        if vat[9] != 'B':
+            return False
+
+        sum = 9 * int(vat[0]) + 8 * int(vat[1]) + 7 * int(vat[2]) + \
+                6 * int(vat[3]) + 5 * int(vat[4]) + 4 * int(vat[5]) + \
+                3 * int(vat[6]) + 2 * int(vat[7])
+
+        check = sum % 11
+        if check == 10:
+            return False
+        if check != int(vat[8]):
+            return False
+        return True
+
+    def check_vat_pl(self, vat):
+        '''
+        Check Poland VAT number.
+        '''
+        if len(vat) != 10:
+            return False
+        try:
+            int(vat)
+        except:
+            return False
+
+        sum = 6 * int(vat[0]) + 5 * int(vat[1]) + 7 * int(vat[2]) + \
+                2 * int(vat[3]) + 3 * int(vat[4]) + 4 * int(vat[5]) + \
+                5 * int(vat[6]) + 6 * int(vat[7]) + 7 * int(vat[8])
+        check = sum % 11
+        if check == 10:
+            return False
+        if check != int(vat[9]):
+            return False
+        return True
+
+    def check_vat_pt(self, vat):
+        '''
+        Check Portugal VAT number.
+        '''
+        if len(vat) != 9:
+            return False
+        try:
+            int(vat)
+        except:
+            return False
+
+        if int(vat[0]) <= 0:
+            return False
+
+        sum = 9 * int(vat[0]) + 8 * int(vat[1]) + 7 * int(vat[2]) + \
+                6 * int(vat[3]) + 5 * int(vat[4]) + 4 * int(vat[5]) + \
+                3 * int(vat[6]) + 2 * int(vat[7])
+        check = 11 - (sum % 11)
+        if check == 10 or check == 11:
+            check = 0
+#        if check != int(vat[8]):
+#            return False
+        return True
+
+    def check_vat_ro(self, vat):
+        '''
+        Check Romania VAT number.
+        '''
+        try:
+            int(vat)
+        except:
+            return False
+
+        if len(vat) >= 2 and len(vat) <= 10:
+            vat = (10 - len(vat)) * '0' + vat
+            sum = 7 * int(vat[0]) + 5 * int(vat[1]) + 3 * int(vat[2]) + \
+                    2 * int(vat[3]) + 1 * int(vat[4]) + 7 * int(vat[5]) + \
+                    5 * int(vat[6]) + 3 * int(vat[7]) + 2 * int(vat[8])
+            check = (sum * 10) % 11
+            if check == 10:
+                check = 0
+            if check != int(vat[9]):
+                return False
+            return True
+        elif len(vat) == 13:
+            if int(vat[0]) not in (1, 2, 3, 4, 6):
+                return False
+            if int(vat[3:5]) < 1 or int(vat[3:5]) > 12:
+                return False
+            if int(vat[3:5]) == 2 and int(vat[1:3]) % 4 > 0:
+                if int(vat[5:7]) < 1 or int(vat[5:7]) > 28:
+                    return False
+            if int(vat[3:5]) == 2 and int(vat[1:3]) % 4 == 0:
+                if int(vat[5:7]) < 1 or int(vat[5:7]) > 29:
+                    return False
+            if int(vat[3:5]) in (4, 6, 9, 11):
+                if int(vat[5:7]) < 1 or int(vat[5:7]) > 30:
+                    return False
+            if int(vat[3:5]) in (1, 3, 5, 7, 8, 10, 12):
+                if int(vat[5:7]) < 1 or int(vat[5:7]) > 31:
+                    return False
+
+            sum = 2 * int(vat[0]) + 7 * int(vat[1]) + 9 * int(vat[2]) + \
+                    1 * int(vat[3]) + 4 * int(vat[4]) + 6 * int(vat[5]) + \
+                    3 * int(vat[6]) + 5 * int(vat[7]) + 8 * int(vat[8]) + \
+                    2 * int(vat[9]) + 7 * int(vat[10]) + 9 * int(vat[11])
+            check = sum % 11
+            if check == 10:
+                check = 1
+            if check != int(vat[12]):
+                return False
+            return True
+        return False
+
+    def check_vat_se(self, vat):
+        '''
+        Check Sweden VAT number.
+        '''
+        if len(vat) != 12:
+            return False
+        try:
+            int(vat)
+        except:
+            return False
+
+        if int(vat[9:11]) < 0:
+            return False
+
+#        if int(vat[-2:]) != 1:
+#            return False
+
+        sum = mult_add(2, int(vat[0])) + int(vat[1]) + \
+                mult_add(2, int(vat[2])) + int(vat[3]) + \
+                mult_add(2, int(vat[4])) + int(vat[5]) + \
+                mult_add(2, int(vat[6])) + int(vat[7]) + \
+                mult_add(2, int(vat[8]))
+        check = 10 - (sum % 10)
+        if check == 10:
+            check = 0
+        if check != int(vat[9]):
+            return False
+        return True
+
+    def check_vat_si(self, vat):
+        '''
+        Check Slovenia VAT number.
+        '''
+        if len(vat) != 8:
+            return False
+        try:
+            int(vat)
+        except:
+            return False
+        if int(vat[0:7]) <= 999999:
+            return False
+
+        sum = 8 * int(vat[0]) + 7 * int(vat[1]) + 6 * int(vat[2]) + \
+                5 * int(vat[3]) + 4 * int(vat[4]) + 3 * int(vat[5]) + \
+                2 * int(vat[6])
+        check = 11 - (sum % 11)
+        if check == 10:
+            check = 0
+        if check == 11:
+            check = 1
+        if check != int(vat[7]):
+            return False
+        return True
+
+    def check_vat_sk(self, vat):
+        '''
+        Check Slovakia VAT number.
+        '''
+        try:
+            int(vat)
+        except:
+            return False
+        if len(vat) not in(9, 10):
+            return False
+
+        if int(vat[0:2]) == 0 and len(vat) == 10:
+            return True
+
+        if len(vat) == 10:
+            if int(vat[0:2]) < 54 or int(vat[0:2]) > 99:
+                return False
+
+        if len(vat) == 9:
+            if int(vat[0:2]) > 53 :
+                return False
+
+        if int(vat[2:4]) < 1:
+            return False
+        if int(vat[2:4]) > 12 and int(vat[2:4]) < 51:
+            return False
+        if int(vat[2:4]) > 62:
+            return False
+        if int(vat[2:4]) in (2, 52) and int(vat[0:2]) % 4 > 0:
+            if int(vat[4:6]) < 1 or int(vat[4:6]) > 28:
+                return False
+        if int(vat[2:4]) in (2, 52) and int(vat[0:2]) % 4 == 0:
+            if int(vat[4:6]) < 1 or int(vat[4:6]) > 29:
+                return False
+        if int(vat[2:4]) in (4, 6, 9, 11, 54, 56, 59, 61):
+            if int(vat[4:6]) < 1 or int(vat[4:6]) > 30:
+                return False
+        if int(vat[2:4]) in (1, 3, 5, 7, 8, 10, 12,
+                51, 53, 55, 57, 58, 60, 62):
+            if int(vat[4:6]) < 1 or int(vat[4:6]) > 31:
+                return False
+        return True
+
+res_partner()
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+
diff --git a/addons/base_vat/base_vat_data.xml b/addons/base_vat/base_vat_data.xml
deleted file mode 100644 (file)
index 325c2c1..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<openerp>
-  <data>
-
-    <record id="view_partner_form" model="ir.ui.view">
-      <field name="name">res.partner.vat.inherit</field>
-      <field name="model">res.partner</field>
-      <field name="inherit_id" ref="account.view_partner_property_form"/>
-      <field name="arch" type="xml">
-        <field name="property_account_payable" position="after">
-            <group colspan="2" col="6">
-              <field name="vat" on_change="vat_change(vat)" colspan="4" />
-              <field name="vat_subjected" colspan="1"/>
-            </group>
-        </field>
-      </field>
-    </record>
-
-  </data>
-</openerp>
-
diff --git a/addons/base_vat/base_vat_view.xml b/addons/base_vat/base_vat_view.xml
new file mode 100644 (file)
index 0000000..325c2c1
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+  <data>
+
+    <record id="view_partner_form" model="ir.ui.view">
+      <field name="name">res.partner.vat.inherit</field>
+      <field name="model">res.partner</field>
+      <field name="inherit_id" ref="account.view_partner_property_form"/>
+      <field name="arch" type="xml">
+        <field name="property_account_payable" position="after">
+            <group colspan="2" col="6">
+              <field name="vat" on_change="vat_change(vat)" colspan="4" />
+              <field name="vat_subjected" colspan="1"/>
+            </group>
+        </field>
+      </field>
+    </record>
+
+  </data>
+</openerp>
+
diff --git a/addons/base_vat/partner.py b/addons/base_vat/partner.py
deleted file mode 100644 (file)
index 79802cc..0000000
+++ /dev/null
@@ -1,1069 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-#    OpenERP, Open Source Management Solution
-#    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). All Rights Reserved
-#    Copyright (C) 2008-2009 B2CK, Cedric Krier, Bertrand Chenal (the methods "check_vat_[a-z]{2}"
-#
-#    This program is free software: you can redistribute it and/or modify
-#    it under the terms of the GNU General Public License as published by
-#    the Free Software Foundation, either version 3 of the License, or
-#    (at your option) any later version.
-#
-#    This program is distributed in the hope that it will be useful,
-#    but WITHOUT ANY WARRANTY; without even the implied warranty of
-#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#    GNU General Public License for more details.
-#
-#    You should have received a copy of the GNU General Public License
-#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-#
-##############################################################################
-
-from osv import osv
-from osv import fields
-import string
-from tools.func import partial
-from tools.translate import _
-
-_ref_vat = {
-    'be': 'BE0477472701',
-}
-
-def mult_add(i, j):
-    """Sum each digits of the multiplication of i and j."""
-    return reduce(lambda x, y: x + int(y), str(i*j), 0)
-
-class res_partner(osv.osv):
-    _inherit = 'res.partner'
-
-    def _split_vat(self, vat):
-        vat_country, vat_number = vat[:2].lower(), vat[2:].replace(' ', '')
-        return vat_country, vat_number
-
-    def check_vat(self, cr, uid, ids):
-        '''
-        Check the VAT number depending of the country.
-        http://sima-pc.com/nif.php
-        '''
-        for partner in self.browse(cr, uid, ids):
-            if not partner.vat:
-                continue
-            vat_country, vat_number = self._split_vat(partner.vat)
-            if not hasattr(self, 'check_vat_' + vat_country):
-                return False
-            check = getattr(self, 'check_vat_' + vat_country)
-            if not check(vat_number):
-                return False
-
-        return True
-
-    def vat_change(self, cr, uid, ids, value, context={}):
-        return {'value': {'vat_subjected': bool(value)}}
-
-    _columns = {
-        'vat_subjected': fields.boolean('VAT Legal Statement', help="Check this box if the partner is subjected to the VAT. It will be used for the VAT legal statement.")
-    }
-
-    def _construct_constraint_msg(self, cr, uid, ids):
-        def default_vat_check(cn, vn):
-            # by default, a VAT number is valid if:
-            #  it starts with 2 letters
-            #  has more than 3 characters
-            return cn[0] in string.ascii_lowercase and cn[1] in string.ascii_lowercase
-
-        vat_country, vat_number = self._split_vat(self.browse(cr, uid, ids)[0].vat)
-        if default_vat_check(vat_country, vat_number):
-            return _('The Vat does not seems to be correct. You should have entered something like this %s'), (_ref_vat[vat_country])
-        return _('The VAT is invalid, it should begin with the country code'), ()
-
-    _constraints = [(check_vat, _construct_constraint_msg, ["vat"])]
-
-    # code from the following methods come from Tryton (B2CK)
-    # http://www.tryton.org/hgwebdir.cgi/modules/relationship/file/544d1de586d9/party.py
-    def check_vat_at(self, vat):
-        '''
-        Check Austria VAT number.
-        '''
-        if len(vat) != 9:
-            return False
-        if vat[0] != 'U':
-            return False
-        num = vat[1:]
-        try:
-            int(num)
-        except:
-            return False
-        sum = int(num[0]) + mult_add(2, int(num[1])) + \
-                int(num[2]) + mult_add(2, int(num[3])) + \
-                int(num[4]) + mult_add(2, int(num[5])) + \
-                int(num[6])
-        check = 10 - ((sum + 4) % 10)
-        if check == 10:
-            check = 0
-        if int(vat[-1:]) != check:
-            return False
-        return True
-
-    def check_vat_be(self, vat):
-        '''
-        Check Belgium VAT number.
-        '''
-        if len(vat) != 10:
-            return False
-        try:
-            int(vat)
-        except:
-            return False
-        if int(vat[-2:]) != \
-                97 - (int(vat[:8]) % 97):
-            return False
-        return True
-
-    def check_vat_bg(self, vat):
-        '''
-        Check Bulgaria VAT number.
-        '''
-        if len(vat) not in [9,10]:
-            return False
-        try:
-            int(vat)
-        except:
-            return False
-        if int(vat[0]) in (2, 3) and \
-                int(vat[1:2]) != 22:
-            return False
-        sum = 4 * int(vat[0]) + 3 * int(vat[1]) + 2 * int(vat[2]) + \
-                7 * int(vat[3]) + 6 * int(vat[4]) + 5 * int(vat[5]) + \
-                4 * int(vat[6]) + 3 * int(vat[7]) + 2 * int(vat[8])
-        check = 11 - (sum % 11)
-        if check == 11:
-            check = 0
-#        if check == 10:
-#            return False
-#        if check != int(vat[9]):
-#            return False
-        return True
-
-    def check_vat_cy(self, vat):
-        '''
-        Check Cyprus VAT number.
-        '''
-        if len(vat) != 9:
-            return False
-        try:
-            int(vat[:8])
-        except:
-            return False
-        n0 = int(vat[0])
-        n1 = int(vat[1])
-        n2 = int(vat[2])
-        n3 = int(vat[3])
-        n4 = int(vat[4])
-        n5 = int(vat[5])
-        n6 = int(vat[6])
-        n7 = int(vat[7])
-
-        def conv(x):
-            if x == 0:
-                return 1
-            elif x == 1:
-                return 0
-            elif x == 2:
-                return 5
-            elif x == 3:
-                return 7
-            elif x == 4:
-                return 9
-            elif x == 5:
-                return 13
-            elif x == 6:
-                return 15
-            elif x == 7:
-                return 17
-            elif x == 8:
-                return 19
-            elif x == 9:
-                return 21
-            return x
-        n0 = conv(n0)
-        n2 = conv(n2)
-        n4 = conv(n4)
-        n6 = conv(n6)
-
-        sum = n0 + n1 + n2 + n3 + n4 + n5 + n6 + n7
-        check = chr(sum % 26 + 65)
-        if check != vat[8]:
-            return False
-        return True
-
-    def check_vat_cz(self, vat):
-        '''
-        Check Czech Republic VAT number.
-        '''
-        if len(vat) not in (8, 9, 10):
-            return False
-        try:
-            int(vat)
-        except:
-            return False
-
-        if len(vat) == 8:
-            if int(vat[0]) not in (0, 1, 2, 3, 4, 5, 6, 7, 8):
-                return False
-            sum = 8 * int(vat[0]) + 7 * int(vat[1]) + 6 * int(vat[2]) + \
-                    5 * int(vat[3]) + 4 * int(vat[4]) + 3 * int(vat[5]) + \
-                    2 * int(vat[6])
-            check = 11 - (sum % 11)
-            if check == 10:
-                check = 0
-            if check == 11:
-                check = 1
-            if check != int(vat[7]):
-                return False
-        elif len(vat) == 9 and int(vat[0]) == 6:
-            sum = 8 * int(vat[1]) + 7 * int(vat[2]) + 6 * int(vat[3]) + \
-                    5 * int(vat[4]) + 4 * int(vat[5]) + 3 * int(vat[6]) + \
-                    2 * int(vat[7])
-            check = 9 - ((11 - (sum % 11)) % 10)
-            if check != int(vat[8]):
-                return False
-        elif len(vat) == 9:
-            if int(vat[0:2]) > 53 and int(vat[0:2]) < 80:
-                return False
-            if int(vat[2:4]) < 1:
-                return False
-            if int(vat[2:4]) > 12 and int(vat[2:4]) < 51:
-                return False
-            if int(vat[2:4]) > 62:
-                return False
-            if int(vat[2:4]) in (2, 52) and int(vat[0:2]) % 4 > 0:
-                if int(vat[4:6]) < 1:
-                    return False
-                if int(vat[4:6]) > 28:
-                    return False
-            if int(vat[2:4]) in (2, 52) and int(vat[0:2]) % 4 == 0:
-                if int(vat[4:6]) < 1:
-                    return False
-                if int(vat[4:6]) > 29:
-                    return False
-            if int(vat[2:4]) in (4, 6, 9, 11, 54, 56, 59, 61):
-                if int(vat[4:6]) < 1:
-                    return False
-                if int(vat[4:6]) > 30:
-                    return False
-            if int(vat[2:4]) in (1, 3, 5, 7, 8, 10, 12, 51,
-                    53, 55, 57, 58, 60, 62):
-                if int(vat[4:6]) < 1:
-                    return False
-                if int(vat[4:6]) > 31:
-                    return False
-        elif len(vat) == 10:
-            if int(vat[0:2]) < 54:
-                return False
-            if int(vat[2:4]) < 1:
-                return False
-            if int(vat[2:4]) > 12 and int(vat[2:4]) < 51:
-                return False
-            if int(vat[2:4]) > 62:
-                return False
-            if int(vat[2:4]) in (2, 52) and int(vat[0:2]) % 4 > 0:
-                if int(vat[4:6]) < 1:
-                    return False
-                if int(vat[4:6]) > 28:
-                    return False
-            if int(vat[2:4]) in (2, 52) and int(vat[0:2]) % 4 == 0:
-                if int(vat[4:6]) < 1:
-                    return False
-                if int(vat[4:6]) > 29:
-                    return False
-            if int(vat[2:4]) in (4, 6, 9, 11, 54, 56, 59, 61):
-                if int(vat[4:6]) < 1:
-                    return False
-                if int(vat[4:6]) > 30:
-                    return False
-            if int(vat[2:4]) in (1, 3, 5, 7, 8, 10, 12, 51,
-                    53, 55, 57, 58, 60, 62):
-                if int(vat[4:6]) < 1:
-                    return False
-                if int(vat[4:6]) > 31:
-                    return False
-            if (int(vat[0:2]) + int(vat[2:4]) + int(vat[4:6]) + int(vat[6:8]) +
-                    int(vat[8:10])) % 11 != 0:
-                return False
-            if int(vat[0:10]) % 11 != 0:
-                return False
-        return True
-
-    def check_vat_de(self, vat):
-        '''
-        Check Germany VAT number.
-        '''
-        if len(vat) != 9:
-            return False
-        try:
-            int(vat)
-        except:
-            return False
-        if int(vat[0:7]) <= 0:
-            return False
-        sum = 0
-        for i in range(8):
-            sum = (2 * ((int(vat[i]) + sum + 9) % 10 + 1)) % 11
-        check = 11 - sum
-        if check == 10:
-            check = 0
-        if int(vat[8]) != check:
-            return False
-        return True
-
-    def check_vat_dk(self, vat):
-        '''
-        Check Denmark VAT number.
-        '''
-        if len(vat) != 8:
-            return False
-        try:
-            int(vat)
-        except:
-            return False
-        if int(vat[0]) <= 0:
-            return False
-        sum = 2 * int(vat[0]) + 7 * int(vat[1]) + 6 * int(vat[2]) + \
-                5 * int(vat[3]) + 4 * int(vat[4]) + 3 * int(vat[5]) + \
-                2 * int(vat[6]) + int(vat[7])
-        if sum % 11 != 0:
-            return False
-        return True
-
-    def check_vat_ee(self, vat):
-        '''
-        Check Estonia VAT number.
-        '''
-        if len(vat) != 9:
-            return False
-        try:
-            int(vat)
-        except:
-            return False
-        sum = 3 * int(vat[0]) + 7 * int(vat[1]) + 1 * int(vat[2]) + \
-                3 * int(vat[3]) + 7 * int(vat[4]) + 1 * int(vat[5]) + \
-                3 * int(vat[6]) + 7 * int(vat[7])
-        check = 10 - (sum % 10)
-        if check == 10:
-            check = 0
-        if check != int(vat[8]):
-            return False
-        return True
-
-    def check_vat_es(self, vat):
-        '''
-        Check Spain VAT number.
-        '''
-        if len(vat) != 9:
-            return False
-
-        conv = {
-            1: 'T',
-            2: 'R',
-            3: 'W',
-            4: 'A',
-            5: 'G',
-            6: 'M',
-            7: 'Y',
-            8: 'F',
-            9: 'P',
-            10: 'D',
-            11: 'X',
-            12: 'B',
-            13: 'N',
-            14: 'J',
-            15: 'Z',
-            16: 'S',
-            17: 'Q',
-            18: 'V',
-            19: 'H',
-            20: 'L',
-            21: 'C',
-            22: 'K',
-            23: 'E',
-        }
-        #Legal persons with profit aim
-        if vat[0] in ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'U', 'V'):
-            try:
-                int(vat[1:8])
-            except:
-                return False
-            sum = mult_add(2, int(vat[1])) + int(vat[2]) + \
-                    mult_add(2, int(vat[3])) + int(vat[4]) + \
-                    mult_add(2, int(vat[5])) + int(vat[6]) + \
-                    mult_add(2, int(vat[7]))
-            check = 10 - (sum % 10)
-            if check == 10:
-                check = 0
-#            if check != int(vat[8]):
-#                return False
-            return True
-        #Legal persons with non-profit aim
-        elif vat[0] in ('N', 'P', 'Q', 'R', 'S', 'W'):
-            try:
-                int(vat[1:8])
-            except:
-                return False
-            sum = mult_add(2, int(vat[1])) + int(vat[2]) + \
-                    mult_add(2, int(vat[3])) + int(vat[4]) + \
-                    mult_add(2, int(vat[5])) + int(vat[6]) + \
-                    mult_add(2, int(vat[7]))
-            check = 10 - (sum % 10)
-            check = chr(check + 64)
-            if check != vat[8]:
-                return False
-            return True
-        #Foreign natural persons, under age 14 or non-residents
-        elif vat[0] in ('K', 'L', 'M', 'X', 'Y', 'Z'):
-            if vat[0] == 'Y':
-                check_value = '1' + vat[1:8]
-            elif vat[0] == 'Z':
-                check_value = '2' + vat[1:8]
-            else:
-                check_value = vat[1:8]
-
-            try:
-                int(check_value)
-            except:
-                return False
-            check = 1 + (int(check_value) % 23)
-
-            check = conv[check]
-            if check != vat[8]:
-                return False
-            return True
-        #Spanish natural persons
-        else:
-            try:
-                int(vat[:8])
-            except:
-                return False
-            check = 1 + (int(vat[:8]) % 23)
-
-            check = conv[check]
-            if check != vat[8]:
-                return False
-            return True
-
-    def check_vat_fi(self, vat):
-        '''
-        Check Finland VAT number.
-        '''
-        if len(vat) != 8:
-            return False
-        try:
-            int(vat)
-        except:
-            return False
-        sum = 7 * int(vat[0]) + 9 * int(vat[1]) + 10 * int(vat[2]) + \
-                5 * int(vat[3]) + 8 * int(vat[4]) + 4 * int(vat[5]) + \
-                2 * int(vat[6])
-        check = 11 - (sum % 11)
-        if check == 11:
-            check = 0
-        if check == 10:
-            return False
-        if check != int(vat[7]):
-            return False
-        return True
-
-    def check_vat_fr(self, vat):
-        '''
-        Check France VAT number.
-        '''
-        if len(vat) != 11:
-            return False
-
-        try:
-            int(vat[2:11])
-        except:
-            return False
-
-        system = None
-        try:
-            int(vat[0:2])
-            system = 'old'
-        except:
-            system = 'new'
-
-        if system == 'old':
-            check = ((int(vat[2:11]) * 100) + 12) % 97
-            if check != int(vat[0:2]):
-                return False
-            return True
-        else:
-            conv = ['0', '1', '2', '3', '4', '5', '6', '7',
-                '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
-                'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T',
-                'U', 'V', 'W', 'X', 'Y', 'Z']
-            if vat[0] not in conv \
-                    or vat[1] not in conv:
-                return False
-            c1 = conv.index(vat[0])
-            c2 = conv.index(vat[1])
-
-            if c1 < 10:
-                sum = c1 * 24 + c2 - 10
-            else:
-                sum = c1 * 34 + c2 - 100
-
-            x = sum % 11
-            sum = (int(sum) / 11) + 1
-            y = (int(vat[2:11]) + sum) % 11
-            if x != y:
-                return False
-            return True
-
-    def check_vat_gb(self, vat):
-        '''
-        Check United Kingdom VAT number.
-        '''
-
-        if len(vat) == 5:
-            try:
-                int(vat[2:5])
-            except:
-                return False
-
-            if vat[0:2] == 'GD':
-                if int(vat[2:5]) >= 500:
-                    return False
-                return True
-            if vat[0:2] == 'HA':
-                if int(vat[2:5]) < 500:
-                    return False
-                return True
-            return False
-        elif len(vat) in (9, 10):
-            try:
-                int(vat)
-            except:
-                return False
-
-            if int(vat[0:7]) < 1:
-                return False
-            if int(vat[0:7]) > 19999 and int(vat[0:7]) < 1000000:
-                return False
-            if int(vat[7:9]) > 97:
-                return False
-            if len(vat) == 10 and int(vat[9]) != 3:
-                return False
-
-            sum = 8 * int(vat[0]) + 7 * int(vat[1]) + 6 * int(vat[2]) + \
-                    5 * int(vat[3]) + 4 * int(vat[4]) + 3 * int(vat[5]) + \
-                    2 * int(vat[6]) + 10 * int(vat[7]) + int(vat[8])
-            if sum % 97 != 0:
-                return False
-            return True
-        elif len(vat) in (12, 13):
-            try:
-                int(vat)
-            except:
-                return False
-
-            if int(vat[0:3]) not in (0, 1):
-                return False
-
-            if int(vat[3:10]) < 1:
-                return False
-            if int(vat[3:10]) > 19999 and int(vat[3:10]) < 1000000:
-                return False
-            if int(vat[10:12]) > 97:
-                return False
-            if len(vat) == 13 and int(vat[12]) != 3:
-                return False
-
-            sum = 8 * int(vat[3]) + 7 * int(vat[4]) + 6 * int(vat[5]) + \
-                    5 * int(vat[6]) + 4 * int(vat[7]) + 3 * int(vat[8]) + \
-                    2 * int(vat[9]) + 10 * int(vat[10]) + int(vat[11])
-            if sum % 97 != 0:
-                return False
-            return True
-        return False
-
-    def check_vat_gr(self, vat):
-        '''
-        Check Greece VAT number.
-        '''
-        try:
-            int(vat)
-        except:
-            return False
-        if len(vat) == 8:
-            sum = 128 * int(vat[0]) + 64 * int(vat[1]) + 32 * int(vat[2]) + \
-                    16 * int(vat[3]) + 8 * int(vat[4]) + 4 * int(vat[5]) + \
-                    2 * int(vat[6])
-            check = sum % 11
-            if check == 10:
-                check = 0
-            if check != int(vat[7]):
-                return False
-            return True
-        elif len(vat) == 9:
-            sum = 256 * int(vat[0]) + 128 * int(vat[1]) + 64 * int(vat[2]) + \
-                    32 * int(vat[3]) + 16 * int(vat[4]) + 8 * int(vat[5]) + \
-                    4 * int(vat[6]) + 2 * int(vat[7])
-            check = sum % 11
-            if check == 10:
-                check = 0
-            if check != int(vat[8]):
-                return False
-            return True
-        return False
-
-    def check_vat_el(self, vat):
-        return self.check_vat_gr(vat)
-
-    def check_vat_hu(self, vat):
-        '''
-        Check Hungary VAT number.
-        '''
-        if len(vat) != 8:
-            return False
-        try:
-            int(vat)
-        except:
-            return False
-        if int(vat[0]) <= 0:
-            return False
-        sum = 9 * int(vat[0]) + 7 * int(vat[1]) + 3 * int(vat[2]) + \
-                1 * int(vat[3]) + 9 * int(vat[4]) + 7 * int(vat[5]) + \
-                3 * int(vat[6])
-        check = 10 - (sum % 10)
-        if check == 10:
-            check = 0
-        if check != int(vat[7]):
-            return False
-        return True
-
-    def check_vat_ie(self, vat):
-        '''
-        Check Ireland VAT number.
-        '''
-        if len(vat) != 8:
-            return False
-        if (ord(vat[1]) >= 65 and ord(vat[1]) <= 90) \
-                or vat[1] in ('+', '*'):
-            try:
-                int(vat[0])
-                int(vat[2:7])
-            except:
-                return False
-
-            if int(vat[0]) <= 6:
-                return False
-
-            sum = 7 * int(vat[2]) + 6 * int(vat[3]) + 5 * int(vat[4]) + \
-                    4 * int(vat[5]) + 3 * int(vat[6]) + 2 * int(vat[0])
-            check = sum % 23
-            if check == 0:
-                check = 'W'
-            else:
-                check = chr(check + 64)
-            if check != vat[7]:
-                return False
-            return True
-        else:
-            try:
-                int(vat[0:7])
-            except:
-                return False
-
-            sum = 8 * int(vat[0]) + 7 * int(vat[1]) + 6 * int(vat[2]) + \
-                    5 * int(vat[3]) + 4 * int(vat[4]) + 3 * int(vat[5]) + \
-                    2 * int(vat[6])
-            check = sum % 23
-            if check == 0:
-                check = 'W'
-            else:
-                check = chr(check + 64)
-            if check != vat[7]:
-                return False
-            return True
-
-    def check_vat_it(self, vat):
-        '''
-        Check Italy VAT number.
-        '''
-        if len(vat) != 11:
-            return False
-        try:
-            int(vat)
-        except:
-            return False
-        if int(vat[0:7]) <= 0:
-            return False
-        if int(vat[7:10]) <= 0:
-            return False
-        if int(vat[7:10]) > 100 and int(vat[7:10]) < 120:
-            return False
-        if int(vat[7:10]) > 121:
-            return False
-
-        sum = int(vat[0]) + mult_add(2, int(vat[1])) + int(vat[2]) + \
-                mult_add(2, int(vat[3])) + int(vat[4]) + \
-                mult_add(2, int(vat[5])) + int(vat[6]) + \
-                mult_add(2, int(vat[7])) + int(vat[8]) + \
-                mult_add(2, int(vat[9]))
-        check = 10 - (sum % 10)
-        if check == 10:
-            check = 0
-        if check != int(vat[10]):
-            return False
-        return True
-
-    def check_vat_lt(self, vat):
-        '''
-        Check Lithuania VAT number.
-        '''
-        try:
-            int(vat)
-        except:
-            return False
-
-        if len(vat) == 9:
-            if int(vat[7]) != 1:
-                return False
-            sum = 1 * int(vat[0]) + 2 * int(vat[1]) + 3 * int(vat[2]) + \
-                    4 * int(vat[3]) + 5 * int(vat[4]) + 6 * int(vat[5]) + \
-                    7 * int(vat[6]) + 8 * int(vat[7])
-            if sum % 11 == 10:
-                sum = 3 * int(vat[0]) + 4 * int(vat[1]) + 5 * int(vat[2]) + \
-                        6 * int(vat[3]) + 7 * int(vat[4]) + 8 * int(vat[5]) + \
-                        9 * int(vat[6]) + 1 * int(vat[7])
-            check = sum % 11
-            if check == 10:
-                check = 0
-            if check != int(vat[8]):
-                return False
-            return True
-        elif len(vat) == 12:
-            if int(vat[10]) != 1:
-                return False
-            sum = 1 * int(vat[0]) + 2 * int(vat[1]) + 3 * int(vat[2]) + \
-                    4 * int(vat[3]) + 5 * int(vat[4]) + 6 * int(vat[5]) + \
-                    7 * int(vat[6]) + 8 * int(vat[7]) + 9 * int(vat[8]) + \
-                    1 * int(vat[9]) + 2 * int(vat[10])
-            if sum % 11 == 10:
-                sum = 3 * int(vat[0]) + 4 * int(vat[1]) + 5 * int(vat[2]) + \
-                        6 * int(vat[3]) + 7 * int(vat[4]) + 8 * int(vat[5]) + \
-                        9 * int(vat[6]) + 1 * int(vat[7]) + 2 * int(vat[8]) + \
-                        3 * int(vat[9]) + 4 * int(vat[10])
-            check = sum % 11
-            if check == 10:
-                check = 0
-            if check != int(vat[11]):
-                return False
-            return True
-        return False
-
-    def check_vat_lu(self, vat):
-        '''
-        Check Luxembourg VAT number.
-        '''
-        if len(vat) != 8:
-            return False
-        try:
-            int(vat)
-        except:
-            return False
-        if int(vat[0:6]) <= 0:
-            return False
-        check = int(vat[0:6]) % 89
-        if check != int(vat[6:8]):
-            return False
-        return True
-
-    def check_vat_lv(self, vat):
-        '''
-        Check Latvia VAT number.
-        '''
-        if len(vat) != 11:
-            return False
-        try:
-            int(vat)
-        except:
-            return False
-        if int(vat[0]) >= 4:
-            sum = 9 * int(vat[0]) + 1 * int(vat[1]) + 4 * int(vat[2]) + \
-                    8 * int(vat[3]) + 3 * int(vat[4]) + 10 * int(vat[5]) + \
-                    2 * int(vat[6]) + 5 * int(vat[7]) + 7 * int(vat[8]) + \
-                    6 * int(vat[9])
-            if sum % 11 == 4 and int(vat[0]) == 9:
-                sum = sum - 45
-            if sum % 11 == 4:
-                check = 4 - (sum % 11)
-            elif sum % 11 > 4:
-                check = 14 - (sum % 11)
-            elif sum % 11 < 4:
-                check = 3 - (sum % 11)
-            if check != int(vat[10]):
-                return False
-            return True
-        else:
-            if int(vat[2:4]) == 2 and int(vat[4:6]) % 4 > 0:
-                if int(vat[0:2]) < 1 or int(vat[0:2]) > 28:
-                    return False
-            if int(vat[2:4]) == 2 and int(vat[4:6]) % 4 == 0:
-                if int(vat[0:2]) < 1 or int(vat[0:2]) > 29:
-                    return False
-            if int(vat[2:4]) in (4, 6, 9, 11):
-                if int(vat[0:2]) < 1 or int(vat[0:2]) > 30:
-                    return False
-            if int(vat[2:4]) in (1, 3, 5, 7, 8, 10, 12):
-                if int(vat[0:2]) < 1 or int(vat[0:2]) > 31:
-                    return False
-            if int(vat[2:4]) < 1 or int(vat[2:4]) > 12:
-                return False
-            return True
-
-    def check_vat_mt(self, vat):
-        '''
-        Check Malta VAT number.
-        '''
-        if len(vat) != 8:
-            return False
-        try:
-            int(vat)
-        except:
-            return False
-
-        if int(vat[0:6]) < 100000:
-            return False
-
-        sum = 3 * int(vat[0]) + 4 * int(vat[1]) + 6 * int(vat[2]) + \
-                7 * int(vat[3]) + 8 * int(vat[4]) + 9 * int(vat[5])
-        check = 37 - (sum % 37)
-        if check != int(vat[6:8]):
-            return False
-        return True
-
-    def check_vat_nl(self, vat):
-        '''
-        Check Netherlands VAT number.
-        '''
-        if len(vat) != 12:
-            return False
-        try:
-            int(vat[0:9])
-            int(vat[10:12])
-        except:
-            return False
-        if int(vat[0:8]) <= 0:
-            return False
-        if vat[9] != 'B':
-            return False
-
-        sum = 9 * int(vat[0]) + 8 * int(vat[1]) + 7 * int(vat[2]) + \
-                6 * int(vat[3]) + 5 * int(vat[4]) + 4 * int(vat[5]) + \
-                3 * int(vat[6]) + 2 * int(vat[7])
-
-        check = sum % 11
-        if check == 10:
-            return False
-        if check != int(vat[8]):
-            return False
-        return True
-
-    def check_vat_pl(self, vat):
-        '''
-        Check Poland VAT number.
-        '''
-        if len(vat) != 10:
-            return False
-        try:
-            int(vat)
-        except:
-            return False
-
-        sum = 6 * int(vat[0]) + 5 * int(vat[1]) + 7 * int(vat[2]) + \
-                2 * int(vat[3]) + 3 * int(vat[4]) + 4 * int(vat[5]) + \
-                5 * int(vat[6]) + 6 * int(vat[7]) + 7 * int(vat[8])
-        check = sum % 11
-        if check == 10:
-            return False
-        if check != int(vat[9]):
-            return False
-        return True
-
-    def check_vat_pt(self, vat):
-        '''
-        Check Portugal VAT number.
-        '''
-        if len(vat) != 9:
-            return False
-        try:
-            int(vat)
-        except:
-            return False
-
-        if int(vat[0]) <= 0:
-            return False
-
-        sum = 9 * int(vat[0]) + 8 * int(vat[1]) + 7 * int(vat[2]) + \
-                6 * int(vat[3]) + 5 * int(vat[4]) + 4 * int(vat[5]) + \
-                3 * int(vat[6]) + 2 * int(vat[7])
-        check = 11 - (sum % 11)
-        if check == 10 or check == 11:
-            check = 0
-#        if check != int(vat[8]):
-#            return False
-        return True
-
-    def check_vat_ro(self, vat):
-        '''
-        Check Romania VAT number.
-        '''
-        try:
-            int(vat)
-        except:
-            return False
-
-        if len(vat) >= 2 and len(vat) <= 10:
-            vat = (10 - len(vat)) * '0' + vat
-            sum = 7 * int(vat[0]) + 5 * int(vat[1]) + 3 * int(vat[2]) + \
-                    2 * int(vat[3]) + 1 * int(vat[4]) + 7 * int(vat[5]) + \
-                    5 * int(vat[6]) + 3 * int(vat[7]) + 2 * int(vat[8])
-            check = (sum * 10) % 11
-            if check == 10:
-                check = 0
-            if check != int(vat[9]):
-                return False
-            return True
-        elif len(vat) == 13:
-            if int(vat[0]) not in (1, 2, 3, 4, 6):
-                return False
-            if int(vat[3:5]) < 1 or int(vat[3:5]) > 12:
-                return False
-            if int(vat[3:5]) == 2 and int(vat[1:3]) % 4 > 0:
-                if int(vat[5:7]) < 1 or int(vat[5:7]) > 28:
-                    return False
-            if int(vat[3:5]) == 2 and int(vat[1:3]) % 4 == 0:
-                if int(vat[5:7]) < 1 or int(vat[5:7]) > 29:
-                    return False
-            if int(vat[3:5]) in (4, 6, 9, 11):
-                if int(vat[5:7]) < 1 or int(vat[5:7]) > 30:
-                    return False
-            if int(vat[3:5]) in (1, 3, 5, 7, 8, 10, 12):
-                if int(vat[5:7]) < 1 or int(vat[5:7]) > 31:
-                    return False
-
-            sum = 2 * int(vat[0]) + 7 * int(vat[1]) + 9 * int(vat[2]) + \
-                    1 * int(vat[3]) + 4 * int(vat[4]) + 6 * int(vat[5]) + \
-                    3 * int(vat[6]) + 5 * int(vat[7]) + 8 * int(vat[8]) + \
-                    2 * int(vat[9]) + 7 * int(vat[10]) + 9 * int(vat[11])
-            check = sum % 11
-            if check == 10:
-                check = 1
-            if check != int(vat[12]):
-                return False
-            return True
-        return False
-
-    def check_vat_se(self, vat):
-        '''
-        Check Sweden VAT number.
-        '''
-        if len(vat) != 12:
-            return False
-        try:
-            int(vat)
-        except:
-            return False
-
-        if int(vat[9:11]) < 0:
-            return False
-
-#        if int(vat[-2:]) != 1:
-#            return False
-
-        sum = mult_add(2, int(vat[0])) + int(vat[1]) + \
-                mult_add(2, int(vat[2])) + int(vat[3]) + \
-                mult_add(2, int(vat[4])) + int(vat[5]) + \
-                mult_add(2, int(vat[6])) + int(vat[7]) + \
-                mult_add(2, int(vat[8]))
-        check = 10 - (sum % 10)
-        if check == 10:
-            check = 0
-        if check != int(vat[9]):
-            return False
-        return True
-
-    def check_vat_si(self, vat):
-        '''
-        Check Slovenia VAT number.
-        '''
-        if len(vat) != 8:
-            return False
-        try:
-            int(vat)
-        except:
-            return False
-        if int(vat[0:7]) <= 999999:
-            return False
-
-        sum = 8 * int(vat[0]) + 7 * int(vat[1]) + 6 * int(vat[2]) + \
-                5 * int(vat[3]) + 4 * int(vat[4]) + 3 * int(vat[5]) + \
-                2 * int(vat[6])
-        check = 11 - (sum % 11)
-        if check == 10:
-            check = 0
-        if check == 11:
-            check = 1
-        if check != int(vat[7]):
-            return False
-        return True
-
-    def check_vat_sk(self, vat):
-        '''
-        Check Slovakia VAT number.
-        '''
-        try:
-            int(vat)
-        except:
-            return False
-        if len(vat) not in(9, 10):
-            return False
-
-        if int(vat[0:2]) == 0 and len(vat) == 10:
-            return True
-
-        if len(vat) == 10:
-            if int(vat[0:2]) < 54 or int(vat[0:2]) > 99:
-                return False
-
-        if len(vat) == 9:
-            if int(vat[0:2]) > 53 :
-                return False
-
-        if int(vat[2:4]) < 1:
-            return False
-        if int(vat[2:4]) > 12 and int(vat[2:4]) < 51:
-            return False
-        if int(vat[2:4]) > 62:
-            return False
-        if int(vat[2:4]) in (2, 52) and int(vat[0:2]) % 4 > 0:
-            if int(vat[4:6]) < 1 or int(vat[4:6]) > 28:
-                return False
-        if int(vat[2:4]) in (2, 52) and int(vat[0:2]) % 4 == 0:
-            if int(vat[4:6]) < 1 or int(vat[4:6]) > 29:
-                return False
-        if int(vat[2:4]) in (4, 6, 9, 11, 54, 56, 59, 61):
-            if int(vat[4:6]) < 1 or int(vat[4:6]) > 30:
-                return False
-        if int(vat[2:4]) in (1, 3, 5, 7, 8, 10, 12,
-                51, 53, 55, 57, 58, 60, 62):
-            if int(vat[4:6]) < 1 or int(vat[4:6]) > 31:
-                return False
-        return True
-
-res_partner()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-