summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Martinelli <nim@odoo.com>2015-07-08 10:48:03 +0200
committerNicolas Martinelli <nim@odoo.com>2015-07-09 11:49:04 +0200
commitf3e4d0a2e82a7effda2be76bb90ca5353da9d6ee (patch)
treede9f42a4682a62d369b9ecc37ee622adbe52b088
parent4be4678d8baa041dfd3be6dc6d94c162ab8da879 (diff)
[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
-rw-r--r--openerp/addons/test_impex/tests/test_export.py4
-rw-r--r--openerp/fields.py17
2 files changed, 13 insertions, 8 deletions
diff --git a/openerp/addons/test_impex/tests/test_export.py b/openerp/addons/test_impex/tests/test_export.py
index 023a27df387..49a16387a3a 100644
--- a/openerp/addons/test_impex/tests/test_export.py
+++ b/openerp/addons/test_impex/tests/test_export.py
@@ -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'
diff --git a/openerp/fields.py b/openerp/fields.py
index f88bc01c068..ca605dff0f2 100644
--- a/openerp/fields.py
+++ b/openerp/fields.py
@@ -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()