88
99from odoo import api , fields , models , tools
1010from odoo .exceptions import ValidationError
11- from odoo .osv import expression
11+ from odoo .fields import Domain
1212
1313_logger = logging .getLogger (__name__ )
1414# Extended name search is only used on some operators
1515ALLOWED_OPS = {"ilike" , "like" }
1616
1717
18- @tools .ormcache (skiparg = 0 )
18+ @tools .ormcache ()
1919def _get_rec_names (self ):
2020 "List of fields to search into"
2121 model = self .env ["ir.model" ].search ([("model" , "=" , str (self ._name ))])
@@ -24,7 +24,7 @@ def _get_rec_names(self):
2424 return rec_name + other_names
2525
2626
27- @tools .ormcache (skiparg = 0 )
27+ @tools .ormcache ()
2828def _get_use_smart_name_search (self ):
2929 return (
3030 self .env ["ir.model" ]
@@ -33,7 +33,7 @@ def _get_use_smart_name_search(self):
3333 )
3434
3535
36- @tools .ormcache (skiparg = 0 )
36+ @tools .ormcache ()
3737def _get_add_smart_search (self ):
3838 "Add Smart Search on search views"
3939 model = self .env ["ir.model" ].search ([("model" , "=" , str (self ._name ))])
@@ -43,7 +43,7 @@ def _get_add_smart_search(self):
4343 return False
4444
4545
46- @tools .ormcache (skiparg = 0 )
46+ @tools .ormcache ()
4747def _get_name_search_domain (self ):
4848 "Add Smart Search on search views"
4949 name_search_domain = (
@@ -95,27 +95,27 @@ def _search_smart_search(self, operator, value):
9595 return []
9696
9797 @api .model
98- def name_search (self , name = "" , args = None , operator = "ilike" , limit = 100 ):
98+ def name_search (self , name = "" , domain = None , operator = "ilike" , limit = 100 ):
9999 if not name or not (
100100 self .env .context .get ("force_smart_name_search" , False )
101101 or _get_use_smart_name_search (self .sudo ())
102102 ):
103- return super ().name_search (name , args , operator , limit )
103+ return super ().name_search (name , domain , operator , limit )
104104
105105 # Support a list of fields to search on
106106 all_names = _get_rec_names (self .sudo ())
107- base_domain = args or []
107+ base_domain = domain or []
108108 limit = limit or 0
109109 results = []
110110
111111 # Try regular search on each additional search field
112112 for rec_name in all_names :
113- domain = expression .AND ([base_domain , [(rec_name , operator , name )]])
113+ domain = Domain .AND ([base_domain , [(rec_name , operator , name )]])
114114 results = _extend_name_results (self , domain , results , limit )
115115
116116 # Try ordered word search on each of the search fields
117117 for rec_name in all_names :
118- domain = expression .AND (
118+ domain = Domain .AND (
119119 [base_domain , [(rec_name , operator , name .replace (" " , "%" ))]]
120120 )
121121 results = _extend_name_results (self , domain , results , limit )
@@ -126,16 +126,16 @@ def name_search(self, name="", args=None, operator="ilike", limit=100):
126126 if " " in name :
127127 unordered_domain = []
128128 for word in name .split ():
129- word_domain = expression .OR (
129+ word_domain = Domain .OR (
130130 [[(rec_name , operator , word )] for rec_name in all_names ]
131131 )
132132 unordered_domain = (
133- expression .AND ([unordered_domain , word_domain ])
133+ Domain .AND ([unordered_domain , word_domain ])
134134 if unordered_domain
135135 else word_domain
136136 )
137137 results = _extend_name_results (
138- self , expression .AND ([base_domain , unordered_domain ]), results , limit
138+ self , Domain .AND ([base_domain , unordered_domain ]), results , limit
139139 )
140140
141141 results = results [:limit ]
@@ -211,7 +211,7 @@ def check_name_search_domain(self):
211211 RecursionError ,
212212 ) as e :
213213 raise ValidationError (
214- self .env ._ ("Couldn't eval Name Search Domain (%s)" ) % e
214+ self .env ._ ("Couldn't eval Name Search Domain (%s)" , e )
215215 ) from e
216216 if not isinstance (name_search_domain , list ):
217217 raise ValidationError (
@@ -226,17 +226,26 @@ def write(self, vals):
226226 def _register_hook (self ):
227227 def make_smart_name_search (original_name_search ):
228228 def wrapper (
229- self , name = "" , args = None , operator = "ilike" , limit = 100 , ** kwargs
229+ self , name = "" , domain = None , operator = "ilike" , limit = 100 , ** kwargs
230230 ):
231231 original_results = original_name_search (
232- self , name , args , operator , limit , ** kwargs
232+ self ,
233+ name = name ,
234+ domain = domain ,
235+ operator = operator ,
236+ limit = limit ,
237+ ** kwargs ,
233238 )
234239 if not name or (limit and len (original_results ) >= limit ):
235240 return original_results
236241 seen_ids = {res [0 ] for res in original_results }
237242 remaining_limit = limit - len (original_results ) if limit else None
238243 smart_results = Base .name_search (
239- self , name = name , args = args , operator = operator , limit = remaining_limit
244+ self ,
245+ name = name ,
246+ domain = domain ,
247+ operator = operator ,
248+ limit = remaining_limit ,
240249 )
241250 additional_results = [
242251 (res_id , res_name )
0 commit comments