From 2beff64a140236de9c2ca88a86881e7d6d5cafca Mon Sep 17 00:00:00 2001 From: Christopher Rogos Date: Fri, 19 Jan 2024 12:23:30 +0000 Subject: [PATCH] [IMP] tracking_manager: allow tracking readonly fields --- .../migrations/16.0.1.0.3/post-migration.py | 21 +++++++++++++++++++ tracking_manager/models/ir_model.py | 18 +++++++++------- 2 files changed, 31 insertions(+), 8 deletions(-) create mode 100644 tracking_manager/migrations/16.0.1.0.3/post-migration.py diff --git a/tracking_manager/migrations/16.0.1.0.3/post-migration.py b/tracking_manager/migrations/16.0.1.0.3/post-migration.py new file mode 100644 index 000000000..7ebab64d1 --- /dev/null +++ b/tracking_manager/migrations/16.0.1.0.3/post-migration.py @@ -0,0 +1,21 @@ +from openupgradelib import openupgrade + + +@openupgrade.migrate() +def migrate(env, version): + + openupgrade.logged_query( + env.cr, + """ + UPDATE ir_model_fields SET trackable = false; + UPDATE ir_model_fields SET trackable = true + WHERE name NOT IN ( + 'activity_ids', + 'message_ids', + 'message_last_post', + 'message_main_attachment', + 'message_main_attachement_id' + ) + AND store AND related IS NULL; + """, + ) diff --git a/tracking_manager/models/ir_model.py b/tracking_manager/models/ir_model.py index 07cd8a9b6..4c999eac7 100644 --- a/tracking_manager/models/ir_model.py +++ b/tracking_manager/models/ir_model.py @@ -100,21 +100,27 @@ class IrModel(models.Model): def _default_automatic_custom_tracking_domain_rules(self): return { "product.product": [ + ("readonly", "=", False), "|", ("ttype", "!=", "one2many"), ("name", "in", ["barcode_ids"]), ], "sale.order": [ + ("readonly", "=", False), "|", ("ttype", "!=", "one2many"), ("name", "in", ["order_line"]), ], "account.move": [ + ("readonly", "=", False), "|", ("ttype", "!=", "one2many"), ("name", "in", ["invoice_line_ids"]), ], - "default_automatic_rule": [("ttype", "!=", "one2many")], + "default_automatic_rule": [ + ("ttype", "!=", "one2many"), + ("readonly", "=", False), + ], } @api.depends("automatic_custom_tracking") @@ -176,7 +182,7 @@ class IrModelFields(models.Model): for record in self: record.native_tracking = bool(record.tracking) - @api.depends("readonly", "related", "store") + @api.depends("related", "store") def _compute_trackable(self): blacklists = [ "activity_ids", @@ -185,13 +191,9 @@ class IrModelFields(models.Model): "message_main_attachment", "message_main_attachement_id", ] + for rec in self: - rec.trackable = ( - rec.name not in blacklists - and rec.store - and not rec.readonly - and not rec.related - ) + rec.trackable = rec.name not in blacklists and rec.store and not rec.related def write(self, vals): custom_tracking = None