diff options
| author | Christophe Simonis <chs@odoo.com> | 2015-07-27 14:56:49 +0200 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2015-07-27 14:56:49 +0200 |
| commit | 9d6786bc4324fa94d4c73db70ccc83dec58c18c8 (patch) | |
| tree | 71ae5b4f4b6ef4f476625bc29accfa6ffa21fb22 /addons/analytic/models/analytic.py | |
| parent | 809f19c9b795964c0ea3821feb8d4ee82d1c1cbc (diff) | |
| parent | 5e6ec89659b639942c4ca7774b0598a0b85a67be (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.py | 22 |
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): |
