summaryrefslogtreecommitdiff
path: root/addons/analytic/models/analytic.py
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2015-07-28 13:56:16 +0200
committerChristophe Simonis <chs@odoo.com>2015-07-28 13:56:16 +0200
commit97073e2a7352c158ae03698437fdda9b1e9bf657 (patch)
treebd840aa03f1a25ff942328814223aea7375a79ed /addons/analytic/models/analytic.py
parentf1099a6598fc7381ac43af41a13f44b3e7a62874 (diff)
parent51040b6d60eac7a055321b5c33481bb7c4488295 (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.py22
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):