from osv import osv, fields
from tools.translate import _
+from tools.misc import ustr
import re
import datetime
Check the VAT number depending of the country.
http://sima-pc.com/nif.php
'''
+ country_obj = self.pool.get('res.country')
for partner in self.browse(cr, uid, ids, context=context):
if not partner.vat:
continue
vat_country, vat_number = self._split_vat(partner.vat)
if not hasattr(self, 'check_vat_' + vat_country):
+ #We didn't find the validation method for the country code. If that country code can be found in openerp, this means that it is a valid country code
+ #and we simply didn't have implemented that function. In that case we continue.
+ if country_obj.search(cr, uid, [('code', 'ilike', vat_country)], context=context):
+ continue
+ #Otherwise, it means that the country code isn't valid and we return False.
return False
check = getattr(self, 'check_vat_' + vat_country)
if not check(vat_number):
return False
return True
- __check_vat_mx_re = re.compile(r"(?P<primeras>[A-Z&ñÑ]{3,4})" \
+ __check_vat_mx_re = re.compile(r"(?P<primeras>[A-Za-z\xd1\xf1&]{3,4})" \
r"[ \-_]?" \
- r"(?P<ano>[0-9]{2})(?P<mes>[01][1-9])(?P<dia>[0-3][0-9])" \
+ r"(?P<ano>[0-9]{2})(?P<mes>[01][0-9])(?P<dia>[0-3][0-9])" \
r"[ \-_]?" \
- r"(?P<code>[A-Z0-9&ñÑ\xd1\xf1]{3})$")
+ r"(?P<code>[A-Za-z0-9&\xd1\xf1]{3})$")
- def check_vat_mx(vat):
+ def check_vat_mx(self, vat):
''' Mexican VAT verification
Verificar RFC México
'''
+ # we convert to 8-bit encoding, to help the regex parse only bytes
+ vat = ustr(vat).encode('iso8859-1')
m = self.__check_vat_mx_re.match(vat)
if not m:
#No valid format
return False
try:
- datetime.date(int(m.group('ano')), int(m.group('mes')), int(m.group('dia')))
+ ano = int(m.group('ano'))
+ if ano > 30:
+ ano = 1900 + ano
+ else:
+ ano = 2000 + ano
+ datetime.date(ano, int(m.group('mes')), int(m.group('dia')))
except ValueError:
return False