Compact vat_number
It is better to standardize the format of the vat number using the compact method of python-stdnum. issue4445 review14861002
This commit is contained in:
1 parent
2baf27e12b
commit
14447a42f7
3 files changed
+28
-13
No files matched your search
@@ -1,3 +1,4 @@
|
||||
* compact vat number
|
||||
* value Function fields don't set the value anymore
|
||||
|
||||
Version 3.4.0 - 2014-10-20
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
import logging
|
||||
from importlib import import_module
|
||||
|
||||
from sql.functions import CharLength
|
||||
|
||||
@@ -127,6 +128,23 @@ class Party(ModelSQL, ModelView):
|
||||
def on_change_with_vat_code(self, name=None):
|
||||
return (self.vat_country or '') + (self.vat_number or '')
|
||||
|
||||
@fields.depends('vat_country', 'vat_number')
|
||||
def on_change_with_vat_number(self):
|
||||
if not self.vat_country:
|
||||
return self.vat_number
|
||||
code = self.vat_country.lower()
|
||||
vat_module = None
|
||||
try:
|
||||
module = import_module('stdnum.%s' % code)
|
||||
vat_module = getattr(module, 'vat', None)
|
||||
if not vat_module:
|
||||
vat_module = import_module('stdnum.%s.vat' % code)
|
||||
except ImportError:
|
||||
pass
|
||||
if vat_module:
|
||||
return vat_module.compact(self.vat_number)
|
||||
return self.vat_number
|
||||
|
||||
@classmethod
|
||||
def search_vat_code(cls, name, clause):
|
||||
res = []
|
||||
@@ -216,25 +234,21 @@ class Party(ModelSQL, ModelView):
|
||||
'''
|
||||
if not HAS_VATNUMBER:
|
||||
return
|
||||
vat_number = self.vat_number
|
||||
|
||||
if not self.vat_country:
|
||||
return
|
||||
|
||||
vat_number = self.on_change_with_vat_number()
|
||||
if vat_number != self.vat_number:
|
||||
self.vat_number = vat_number
|
||||
self.save()
|
||||
|
||||
if not getattr(vatnumber, 'check_vat_' +
|
||||
self.vat_country.lower())(vat_number):
|
||||
|
||||
# Check if user doesn't have put country code in number
|
||||
if vat_number.startswith(self.vat_country):
|
||||
vat_number = vat_number[len(self.vat_country):]
|
||||
Party.write([self], {
|
||||
'vat_number': vat_number,
|
||||
self.raise_user_error('invalid_vat', {
|
||||
'vat': vat_number,
|
||||
'party': self.rec_name,
|
||||
})
|
||||
else:
|
||||
self.raise_user_error('invalid_vat', {
|
||||
'vat': vat_number,
|
||||
'party': self.rec_name,
|
||||
})
|
||||
|
||||
|
||||
class PartyCategory(ModelSQL):
|
||||
|
||||
Reference in new issue
Block a user