From 8acd298a568b0192f218c8ab2a8b7434e2c923eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 28 Sep 2016 12:43:37 +0200 Subject: [PATCH] [FIX][IMP] mail: make tracking great again When changing tracking mecanism in v9 'always' tracked fields lost their meaning. They were managed like 'onchange' fields. This commit sets the old behavior back. * 'onchange' fields are displayed in tracking every time they change * 'always' fields are displayed in tracking every time they change or whenever other tracking exist; those are used to display some contextual information --- addons/mail/models/mail_thread.py | 15 ++++++++++++++- addons/mail/models/mail_tracking_value.py | 1 + addons/mail/static/src/xml/thread.xml | 6 ++++-- addons/mail/tests/test_message_track.py | 10 +++++----- 4 files changed, 24 insertions(+), 8 deletions(-) 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]))