[FIX] function fields: bound symbol methods of function field (type char) to the correct methods of the char field

lp bug: https://launchpad.net/bugs/1208074 fixed

bzr revid: mat@openerp.com-20131008102135-r7lqvky0vd75yo1q
This commit is contained in:
Martin Trigaux 2013-10-08 12:21:35 +02:00
parent 05994eb775
commit 3ae73d572d
1 changed files with 24 additions and 16 deletions

View File

@ -208,27 +208,29 @@ class reference(_column):
return model.name_get(cr, uid, [int(res_id)], context=context)[0][1]
return tools.ustr(value)
# takes a string (encoded in utf8) and returns a string (encoded in utf8)
def _symbol_set_char(self, symb):
#TODO:
# * we need to remove the "symb==False" from the next line BUT
# for now too many things rely on this broken behavior
# * the symb==None test should be common to all data types
if symb is None or symb == False:
return None
# we need to convert the string to a unicode object to be able
# to evaluate its length (and possibly truncate it) reliably
u_symb = tools.ustr(symb)
return u_symb[:self.size].encode('utf8')
class char(_column):
_type = 'char'
def __init__(self, string="unknown", size=None, **args):
_column.__init__(self, string=string, size=size or None, **args)
self._symbol_set = (self._symbol_c, self._symbol_set_char)
# takes a string (encoded in utf8) and returns a string (encoded in utf8)
def _symbol_set_char(self, symb):
#TODO:
# * we need to remove the "symb==False" from the next line BUT
# for now too many things rely on this broken behavior
# * the symb==None test should be common to all data types
if symb is None or symb == False:
return None
# we need to convert the string to a unicode object to be able
# to evaluate its length (and possibly truncate it) reliably
u_symb = tools.ustr(symb)
return u_symb[:self.size].encode('utf8')
self._symbol_f = _symbol_set_char
# use lamda function to be able to get the field size
self._symbol_set = (self._symbol_c, lambda x: _symbol_set_char(self, x))
class text(_column):
@ -1085,6 +1087,12 @@ class function(_column):
self._symbol_f = integer._symbol_f
self._symbol_set = integer._symbol_set
if type == 'char':
self._symbol_c = char._symbol_c
self._symbol_f = char._symbol_f
self._symbol_set = (char._symbol_c, lambda x: _symbol_set_char(self, x))
def digits_change(self, cr):
if self._type == 'float':
if self.digits_compute: