diff --git a/addons/mail/models/mail_thread.py b/addons/mail/models/mail_thread.py
index 6af6a2206f4..71c196cd693 100644
--- a/addons/mail/models/mail_thread.py
+++ b/addons/mail/models/mail_thread.py
@@ -441,11 +441,14 @@ class MailThread(models.AbstractModel):
- a set of updated column names
- a list of changes (initial value, new value, column name, column info) """
self.ensure_one()
- changes = set()
+ changes = set() # contains always and onchange tracked fields that changed
+ displays = set() # contains always tracked field that did not change but displayed for information
tracking_value_ids = []
+ display_values_ids = []
# generate tracked_values data structure: {'col_name': {col_info, new_value, old_value}}
for col_name, col_info in tracked_fields.items():
+ track_visibility = getattr(self._fields[col_name], 'track_visibility', 'onchange')
initial_value = initial[col_name]
new_value = getattr(self, col_name)
@@ -456,6 +459,16 @@ class MailThread(models.AbstractModel):
if col_name in tracked_fields:
changes.add(col_name)
+ # 'always' tracked fields in separate variable; added if other changes
+ elif new_value == initial_value and track_visibility == 'always' and col_name in tracked_fields:
+ tracking = self.env['mail.tracking.value'].create_tracking_values(initial_value, initial_value, col_name, col_info)
+ if tracking:
+ display_values_ids.append([0, 0, tracking])
+ displays.add(col_name)
+
+ if changes and displays:
+ tracking_value_ids = display_values_ids + tracking_value_ids
+
return changes, tracking_value_ids
@api.multi
diff --git a/addons/mail/models/mail_tracking_value.py b/addons/mail/models/mail_tracking_value.py
index ce8bdc7ec48..da38a678d06 100644
--- a/addons/mail/models/mail_tracking_value.py
+++ b/addons/mail/models/mail_tracking_value.py
@@ -10,6 +10,7 @@ class MailTracking(models.Model):
_name = 'mail.tracking.value'
_description = 'Mail Tracking Value'
+ # TDE CLEANME: why not a m2o to ir model field ?
field = fields.Char('Changed Field', required=True, readonly=1)
field_desc = fields.Char('Field Description', required=True, readonly=1)
field_type = fields.Char('Field Type')
diff --git a/addons/mail/static/src/xml/thread.xml b/addons/mail/static/src/xml/thread.xml
index 47e84e38f60..b5ed0081d74 100644
--- a/addons/mail/static/src/xml/thread.xml
+++ b/addons/mail/static/src/xml/thread.xml
@@ -154,9 +154,11 @@
:
-
+
-
+
+
+
diff --git a/addons/mail/tests/test_message_track.py b/addons/mail/tests/test_message_track.py
index 77204336e0d..e97b840cda4 100644
--- a/addons/mail/tests/test_message_track.py
+++ b/addons/mail/tests/test_message_track.py
@@ -122,10 +122,10 @@ class TestTracking(TestMail):
self.assertEqual(len(self.group_pigs.message_ids), 3)
last_msg = self.group_pigs.message_ids[0]
self.assertEqual(last_msg.subtype_id, mt_group_public_set)
- self.assertEqual(len(last_msg.tracking_value_ids), 2)
- self.assertEqual(set(last_msg.tracking_value_ids.mapped('field')), set(['group_public_id', 'public']))
- self.assertEqual(set(last_msg.tracking_value_ids.mapped('field_desc')), set(['Authorized Group', 'Privacy']))
- self.assertEqual(set(last_msg.tracking_value_ids.mapped('old_value_char')), set([group_user.name_get()[0][1], 'Invited people only']))
- self.assertEqual(set(last_msg.tracking_value_ids.mapped('new_value_char')), set([group_system.name_get()[0][1], 'Everyone']))
+ self.assertEqual(len(last_msg.tracking_value_ids), 3)
+ self.assertEqual(set(last_msg.tracking_value_ids.mapped('field')), set(['group_public_id', 'public', 'name']))
+ self.assertEqual(set(last_msg.tracking_value_ids.mapped('field_desc')), set(['Authorized Group', 'Privacy', 'Name']))
+ self.assertEqual(set(last_msg.tracking_value_ids.mapped('old_value_char')), set([group_user.name_get()[0][1], 'Invited people only', 'supername']))
+ self.assertEqual(set(last_msg.tracking_value_ids.mapped('new_value_char')), set([group_system.name_get()[0][1], 'Everyone', 'supername']))
self.assertEqual(set(last_msg.tracking_value_ids.mapped('old_value_integer')), set([0, group_user.id]))
self.assertEqual(set(last_msg.tracking_value_ids.mapped('new_value_integer')), set([0, group_system.id]))