@@ -12,7 +12,7 @@ class Base(models.AbstractModel):
12
12
_inherit = "base"
13
13
14
14
@tools .ormcache ()
15
- def _all_tracking_domain_fields (self ):
15
+ def _tm_all_tracking_domain_fields (self ):
16
16
cr = self ._cr
17
17
cr .execute (
18
18
"""
@@ -28,6 +28,37 @@ def _all_tracking_domain_fields(self):
28
28
result [row ["model" ]][row ["name" ]] = row
29
29
return result
30
30
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
+
31
62
def _mail_track (self , tracked_fields , initial_values ):
32
63
changes , tracking_value_ids = super ()._mail_track (
33
64
tracked_fields , initial_values
@@ -36,7 +67,9 @@ def _mail_track(self, tracked_fields, initial_values):
36
67
tracking_value_id [2 ]["field_id" ] for tracking_value_id in tracking_value_ids
37
68
]
38
69
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
+ ]
40
73
41
74
if all_tracking_domain_fields :
42
75
# remove entries that are not matching the tracking_domain of the field
0 commit comments