[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:
committed by
Thibault Delavallée
parent
0db60bf1c2
commit
084d2bcd46
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user