[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@9c9552fd20
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) <tde@openerp.com>
This commit is contained in:
Alvaro Fuentes
2024-03-05 19:21:39 +00:00
committed by Thibault Delavallée
parent 0db60bf1c2
commit 084d2bcd46
2 changed files with 8 additions and 2 deletions
+4 -2
View File
@@ -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
@@ -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(