3
3
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
4
4
5
5
6
+ from ast import literal_eval
6
7
from collections import defaultdict
7
8
8
9
from odoo import api , models , tools
@@ -21,6 +22,41 @@ class Base(models.AbstractModel):
21
22
def is_tracked_by_o2m (self ):
22
23
return self ._name in self .env ["ir.model" ]._get_model_tracked_by_o2m ()
23
24
25
+ def _mail_track (self , tracked_fields , initial_values ):
26
+ changes , tracking_value_ids = super ()._mail_track (
27
+ tracked_fields , initial_values
28
+ )
29
+ tracking_value_field_ids = [
30
+ tracking_value_id [2 ]["field_id" ] for tracking_value_id in tracking_value_ids
31
+ ]
32
+ if tracking_value_field_ids :
33
+ # if there are fields to track, load tracking_domain information
34
+ field_with_domain = self .env ["ir.model.fields" ].search (
35
+ [
36
+ ("id" , "in" , tracking_value_field_ids ),
37
+ ("tracking_domain" , "!=" , False ),
38
+ ("tracking_domain" , "!=" , "[]" ),
39
+ ]
40
+ )
41
+ if field_with_domain :
42
+ # remove entries that are not matching the tracking_domain of the field
43
+ fields_to_remove = []
44
+ for field in field_with_domain :
45
+ if not self .filtered_domain (literal_eval (field .tracking_domain )):
46
+ fields_to_remove .append (field .id )
47
+ res_changes = []
48
+ res_tracking_value_ids = []
49
+ # remove values from tracking result
50
+ for change , tracking_value_id in zip (
51
+ changes , tracking_value_ids , strict = True
52
+ ):
53
+ if tracking_value_id [2 ]["field_id" ] not in fields_to_remove :
54
+ res_changes .append (change )
55
+ res_tracking_value_ids .append (tracking_value_id )
56
+ changes = res_changes
57
+ tracking_value_ids = res_tracking_value_ids
58
+ return changes , tracking_value_ids
59
+
24
60
def _tm_get_fields_to_notify (self ):
25
61
return (
26
62
self .env ["ir.model" ]
0 commit comments