diff options
| author | Christophe Simonis <chs@odoo.com> | 2015-07-28 13:56:16 +0200 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2015-07-28 13:56:16 +0200 |
| commit | 97073e2a7352c158ae03698437fdda9b1e9bf657 (patch) | |
| tree | bd840aa03f1a25ff942328814223aea7375a79ed /addons/analytic/models/analytic.py | |
| parent | f1099a6598fc7381ac43af41a13f44b3e7a62874 (diff) | |
| parent | 51040b6d60eac7a055321b5c33481bb7c4488295 (diff) | |
[MERGE] forward port of branch saas-6 up to 51040b6
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 346d1d00877..0235b5d2e1a 100644 --- a/addons/analytic/models/analytic.py +++ b/addons/analytic/models/analytic.py @@ -303,20 +303,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) def _track_subtype(self, cr, uid, ids, init_values, context=None): |
