Skip to content

Commit 2f7ce9a

Browse files
committed
[IMP] tracking_manager_domain: support domains on one2many messages
1 parent be70632 commit 2f7ce9a

File tree

1 file changed

+35
-2
lines changed

1 file changed

+35
-2
lines changed

tracking_manager_domain/models/models.py

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class Base(models.AbstractModel):
1212
_inherit = "base"
1313

1414
@tools.ormcache()
15-
def _all_tracking_domain_fields(self):
15+
def _tm_all_tracking_domain_fields(self):
1616
cr = self._cr
1717
cr.execute(
1818
"""
@@ -28,6 +28,37 @@ def _all_tracking_domain_fields(self):
2828
result[row["model"]][row["name"]] = row
2929
return result
3030

31+
def _tm_post_message(self, data):
32+
for model_name, model_data in data.items():
33+
all_tracking_domain_fields = self._tm_all_tracking_domain_fields()[
34+
model_name
35+
]
36+
# check if any fields with tracking_domain
37+
if not all_tracking_domain_fields:
38+
continue
39+
record_to_remove = []
40+
for record_id, messages_by_field in model_data.items():
41+
fields_to_remove = []
42+
record = self.env[model_name].browse(record_id)
43+
if not record.exists():
44+
# if a record have been modify and then deleted
45+
# it's not need to track the change so skip it
46+
continue
47+
for field_name, _messages in messages_by_field.items():
48+
field_data = all_tracking_domain_fields.get(field_name, False)
49+
if field_data and not record.filtered_domain(
50+
literal_eval(field_data["tracking_domain"])
51+
):
52+
fields_to_remove.append(field_name)
53+
for field_name in fields_to_remove:
54+
del model_data[record_id][field_name]
55+
if not model_data[record_id]:
56+
record_to_remove.append(record_id)
57+
58+
for record_id in record_to_remove:
59+
del model_data[record_id]
60+
return super()._tm_post_message(data)
61+
3162
def _mail_track(self, tracked_fields, initial_values):
3263
changes, tracking_value_ids = super()._mail_track(
3364
tracked_fields, initial_values
@@ -36,7 +67,9 @@ def _mail_track(self, tracked_fields, initial_values):
3667
tracking_value_id[2]["field_id"] for tracking_value_id in tracking_value_ids
3768
]
3869
if tracking_value_field_ids:
39-
all_tracking_domain_fields = self._all_tracking_domain_fields()[self._name]
70+
all_tracking_domain_fields = self._tm_all_tracking_domain_fields()[
71+
self._name
72+
]
4073

4174
if all_tracking_domain_fields:
4275
# remove entries that are not matching the tracking_domain of the field

0 commit comments

Comments
 (0)