Files
odoo_source/addons/mail/models/ir_model_fields.py
T
Renaud Thiry 77de6e827a [IMP] mail: Allow hiding tracking
It is sometimes desirable to completely remove a field
from the automated tracking message
when setting a custom message that already covers the change being made.

Add a filtering method on threads to allow models to selectively
hide tracking values from emails and messages.

task-2974500

closes odoo/odoo#109606

Related: odoo/enterprise#31795
Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
2023-10-30 07:37:12 +00:00

57 lines
2.3 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import fields, models
from odoo.tools import groupby
class IrModelField(models.Model):
_inherit = 'ir.model.fields'
tracking = fields.Integer(
string="Enable Ordered Tracking",
help="If set every modification done to this field is tracked. Value is used to order tracking values.",
)
def _reflect_field_params(self, field, model_id):
""" Tracking value can be either a boolean enabling tracking mechanism
on field, either an integer giving the sequence. Default sequence is
set to 100. """
vals = super(IrModelField, self)._reflect_field_params(field, model_id)
tracking = getattr(field, 'tracking', None)
if tracking is True:
tracking = 100
elif tracking is False:
tracking = None
vals['tracking'] = tracking
return vals
def _instanciate_attrs(self, field_data):
attrs = super(IrModelField, self)._instanciate_attrs(field_data)
if attrs and field_data.get('tracking'):
attrs['tracking'] = field_data['tracking']
return attrs
def unlink(self):
""" When unlinking fields populate tracking value table with relevant
information. That way if a field is removed (custom tracked, migration
or any other reason) we keep the tracking and its relevant information.
Do it only when unlinking fields so that we don't duplicate field
information for most tracking. """
tracked = self.filtered('tracking')
if tracked:
tracking_values = self.env['mail.tracking.value'].search(
[('field_id', 'in', tracked.ids)]
)
field_to_trackings = groupby(tracking_values, lambda track: track.field_id)
for field, trackings in field_to_trackings:
self.env['mail.tracking.value'].concat(*trackings).write({
'field_info': {
'desc': field.field_description,
'name': field.name,
'sequence': self.env[field.model_id.model]._mail_track_get_field_sequence(field.name),
'type': field.ttype,
}
})
return super().unlink()