[FIX] openerp: export None instead of False in raw_data mode

If we export False or an empty string, the Excel export will consider the field
similarly to a boolean, and en empty value will be converted into "=False()" in
Excel. To prevent this, we return "None" in the following cases:

- String
- Date
- Datetime
- Selection
- Reference
- Many2one
- RelationalMulti

Introduced by 6243d18

opw-643966
This commit is contained in:
Nicolas Martinelli 2015-07-08 10:48:03 +02:00
parent 4be4678d8b
commit f3e4d0a2e8
2 changed files with 13 additions and 8 deletions

View File

@ -265,7 +265,7 @@ class test_selection_function(CreatorCase):
def test_empty(self):
self.assertEqual(
self.export(False),
[[False]])
[[None]])
def test_value(self):
# FIXME: selection functions export the *value* itself
@ -278,7 +278,7 @@ class test_selection_function(CreatorCase):
# fucking hell
self.assertEqual(
self.export(0),
[[False]])
[[None]])
class test_m2o(CreatorCase):
model_name = 'export.many2one'

View File

@ -1092,6 +1092,11 @@ class _String(Field):
_column_translate = property(attrgetter('translate'))
_related_translate = property(attrgetter('translate'))
_description_translate = property(attrgetter('translate'))
def convert_to_export(self, value, env):
if env.context.get('export_raw_data'):
return value if value else None
return bool(value) and ustr(value)
class Char(_String):
@ -1212,7 +1217,7 @@ class Date(Field):
def convert_to_export(self, value, env):
if value and env.context.get('export_raw_data'):
return self.from_string(value)
return self.from_string(value) or None
return bool(value) and ustr(value)
@ -1281,7 +1286,7 @@ class Datetime(Field):
def convert_to_export(self, value, env):
if value and env.context.get('export_raw_data'):
return self.from_string(value)
return self.from_string(value) or None
return bool(value) and ustr(value)
def convert_to_display_name(self, value, record=None):
@ -1390,7 +1395,7 @@ class Selection(Field):
def convert_to_export(self, value, env):
if not isinstance(self.selection, list):
# FIXME: this reproduces an existing buggy behavior!
return value
return value or None
for item in self._description_selection(env):
if item[0] == value:
return item[1]
@ -1427,7 +1432,7 @@ class Reference(Selection):
return "%s,%s" % (value._name, value.id) if value else False
def convert_to_export(self, value, env):
return bool(value) and value.name_get()[0][1]
return value.name_get()[0][1] if value else None
def convert_to_display_name(self, value, record=None):
return ustr(value and value.display_name)
@ -1567,7 +1572,7 @@ class Many2one(_Relational):
return value.id
def convert_to_export(self, value, env):
return bool(value) and value.name_get()[0][1]
return value.name_get()[0][1] if value else None
def convert_to_display_name(self, value, record=None):
return ustr(value.display_name)
@ -1673,7 +1678,7 @@ class _RelationalMulti(_Relational):
return result
def convert_to_export(self, value, env):
return bool(value) and ','.join(name for id, name in value.name_get())
return ','.join(name for id, name in value.name_get()) if value else None
def convert_to_display_name(self, value, record=None):
raise NotImplementedError()