From 084d2bcd46b528a37159ea421cb2e3d36adbb2a7 Mon Sep 17 00:00:00 2001 From: Alvaro Fuentes Date: Tue, 5 Mar 2024 17:24:55 +0100 Subject: [PATCH] [FIX] mail: correctly compute groups on trackings, depending on model Side effect due to a combination of odoo/odoo#124182 making field_id not required to keep trackings when removing fields, and odoo/odoo@9c9552fd20e1cf2cee9f14a0ca093d3fc749f0f7 where field is used to find model when computing groups instead of message in case the tracking is logged on a model different from the field model e.g. accounting. Steps to reproduce: 1. Install project_enterprise in saas-16.4 2. Create a task and update some values for Date deadline 3. Upgrade to 17.0 4. Try to open the task in the upgraded DB. We get an error: ``` ValueError('All tracking value should belong to the same model.') ``` The reason is that `date_deadline` field is removed during the upgrade and thus `fields_models` is empty in https://github.com/odoo/odoo/blob/0649134444fa6b26de1c8c25d7c4a3f70c6d64e0/addons/mail/models/mail_tracking_value.py#L120-L121 closes odoo/odoo#156571 Signed-off-by: Thibault Delavallee (tde) --- addons/mail/models/mail_tracking_value.py | 6 ++++-- addons/test_mail/tests/test_message_track.py | 4 ++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/addons/mail/models/mail_tracking_value.py b/addons/mail/models/mail_tracking_value.py index ce1dcfc9d72..60c9f4799c1 100644 --- a/addons/mail/models/mail_tracking_value.py +++ b/addons/mail/models/mail_tracking_value.py @@ -38,8 +38,10 @@ class MailTracking(models.Model): @api.depends('mail_message_id', 'field_id') def _compute_field_groups(self): for tracking in self: - model = self.env[tracking.field_id.model] - field = model._fields.get(tracking.field_id.name) + field = None + if tracking.field_id: + model = self.env[tracking.field_id.model] + field = model._fields.get(tracking.field_id.name) tracking.field_groups = field.groups if field else 'base.group_system' @api.model diff --git a/addons/test_mail/tests/test_message_track.py b/addons/test_mail/tests/test_message_track.py index ba4a96aba29..f766f96ee5c 100644 --- a/addons/test_mail/tests/test_message_track.py +++ b/addons/test_mail/tests/test_message_track.py @@ -793,6 +793,10 @@ class TestTrackingInternals(MailCommon): trackings = main_track.message_ids.sudo().tracking_value_ids self.assertEqual(len(trackings), 3) + # check groups, as it depends on model + for tracking, exp_groups in zip(trackings, ['base.group_user', 'base.group_system', 'base.group_system']): + self.assertEqual(tracking.field_groups, exp_groups) + # check formatting, as it fetches info on model formatted = trackings._tracking_value_format() self.assertEqual(