summaryrefslogtreecommitdiff
path: root/addons/analytic/models/analytic.py
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2015-07-27 14:56:49 +0200
committerChristophe Simonis <chs@odoo.com>2015-07-27 14:56:49 +0200
commit9d6786bc4324fa94d4c73db70ccc83dec58c18c8 (patch)
tree71ae5b4f4b6ef4f476625bc29accfa6ffa21fb22 /addons/analytic/models/analytic.py
parent809f19c9b795964c0ea3821feb8d4ee82d1c1cbc (diff)
parent5e6ec89659b639942c4ca7774b0598a0b85a67be (diff)
[MERGE] forward port of branch 8.0 up to 5e6ec89
Diffstat (limited to 'addons/analytic/models/analytic.py')
-rw-r--r--addons/analytic/models/analytic.py22
1 files changed, 12 insertions, 10 deletions
diff --git a/addons/analytic/models/analytic.py b/addons/analytic/models/analytic.py
index 925f628efcc..199ef9da00c 100644
--- a/addons/analytic/models/analytic.py
+++ b/addons/analytic/models/analytic.py
@@ -305,20 +305,22 @@ class account_analytic_account(osv.osv):
args=[]
if context is None:
context={}
+ account_ids = []
if name:
account_ids = self.search(cr, uid, [('code', '=', name)] + args, limit=limit, context=context)
if not account_ids:
dom = []
- for name2 in name.split('/'):
- name = name2.strip()
- account_ids = self.search(cr, uid, dom + [('name', operator, name)], limit=limit, context=context)
- if not account_ids: break
- dom = [('parent_id','in',account_ids)]
- if account_ids and args:
- # final filtering according to domain (args)
- account_ids = self.search(cr, uid, [('id', 'in', account_ids)] + args, limit=limit, context=context)
- else:
- account_ids = self.search(cr, uid, args, limit=limit, context=context)
+ if '/' in name:
+ for name2 in name.split('/'):
+ # intermediate search without limit and args - could be expensive for large tables if `name` is not selective
+ account_ids = self.search(cr, uid, dom + [('name', operator, name2.strip())], limit=None, context=context)
+ if not account_ids: break
+ dom = [('parent_id','in',account_ids)]
+ if account_ids and args:
+ # final filtering according to domain (args)4
+ account_ids = self.search(cr, uid, [('id', 'in', account_ids)] + args, limit=limit, context=context)
+ if not account_ids:
+ return super(account_analytic_account, self).name_search(cr, uid, name, args, operator=operator, context=context, limit=limit)
return self.name_get(cr, uid, account_ids, context=context)
class account_analytic_line(osv.osv):