[FIX] base_vat: implement a generic check of vat numbers

bzr revid: christophe@tinyerp.com-20090415085738-b1jow8m2dh5tf9uf
This commit is contained in:
Christophe Simonis 2009-04-15 10:57:38 +02:00
parent b0e5e6ffd4
commit ab164fe022
1 changed files with 17 additions and 4 deletions

View File

@ -22,6 +22,8 @@
from osv import osv
from osv import fields
import string
from tools.func import partial
def mult_add(i, j):
"""Sum each digits of the multiplication of i and j."""
@ -39,15 +41,26 @@ class res_partner(osv.osv):
if not partner.vat:
continue #FIXME return False? empty vat numbre is invalid?
vat_country, vat_number = partner.vat[:2].lower(), partner.vat[2:]
if vat_number.find(' ') != -1:
return False
check = getattr(self, 'check_vat_' + vat_country, lambda vn: False)
vat_country, vat_number = partner.vat[:2].lower(), partner.vat[2:].replace(' ', '')
check = getattr(self, 'check_vat_' + vat_country)
if not check(vat_number):
return False
return True
def __getattr__(self, attr):
if not attr.startswith('check_vat_'):
super(res_partner, self).__getattr__(attr)
def default_vat_check(self, cn, vn):
# by default, a VAT number is valid if:
# it starts with 2 letters
# has more than 3 characters
return len(vn) > 0 and len(cn) == 2 and cn[0] in string.ascii_lowercase and cn[1] in string.ascii_lowercase
return partial(default_vat_check, self, attr[10:])
def vat_change(self, cr, uid, ids, value, context={}):
return {'value': {'vat_subjected': bool(value)}}