diff --git a/account.py b/account.py index 1757019379..9e4ea20b93 100644 --- a/account.py +++ b/account.py @@ -359,19 +359,13 @@ class AccountTemplate(ModelSQL, ModelView): res[template.id] = template.name return res - def search_rec_name(self, cursor, user, name, args, context=None): - args2 = [] - i = 0 - while i < len(args): - ids = self.search(cursor, user, [ - ('code', args[i][1], args[i][2]), - ], limit=1, context=context) - if ids: - args2.append(('code', args[i][1], args[i][2])) - else: - args2.append((self._rec_name, args[i][1], args[i][2])) - i += 1 - return args2 + def search_rec_name(self, cursor, user, name, clause, context=None): + ids = self.search(cursor, user, [ + ('code',) + clause[1:], + ], limit=1, context=context) + if ids: + return [('code',) + clause[1:]] + return [(self._rec_name,) + clause[1:]] def _get_account_value(self, cursor, user, template, context=None, account=None): @@ -862,19 +856,13 @@ class Account(ModelSQL, ModelView): res[account.id] = account.name return res - def search_rec_name(self, cursor, user, name, args, context=None): - args2 = [] - i = 0 - while i < len(args): - ids = self.search(cursor, user, [ - ('code', args[i][1], args[i][2]), - ], limit=1, context=context) - if ids: - args2.append(('code', args[i][1], args[i][2])) - else: - args2.append((self._rec_name, args[i][1], args[i][2])) - i += 1 - return args2 + def search_rec_name(self, cursor, user, name, clause, context=None): + ids = self.search(cursor, user, [ + ('code',) + clause[1:], + ], limit=1, context=context) + if ids: + return [('code',) + clause[1:]] + return [(self._rec_name,) + clause[1:]] def copy(self, cursor, user, ids, default=None, context=None): if default is None: @@ -1065,17 +1053,12 @@ class AccountDeferral(ModelSQL, ModelView): deferral.fiscalyear.rec_name return res - def search_rec_name(self, cursor, user, name, args, context=None): - args2 = [] - i = 0 - while i < len(args): - ids = self.search(cursor, user, ['OR', - ('account.rec_name', args[i][1], args[i][2]), - ('fiscalyear.rec_name', args[i][1], args[i][2]), - ], context=context) - args2.append(('id', 'in', ids)) - i += 1 - return args2 + def search_rec_name(self, cursor, user, name, clause, context=None): + ids = self.search(cursor, user, ['OR', + ('account.rec_name',) + clause[1:], + ('fiscalyear.rec_name',) + clause[1:], + ], context=context) + return [('id', 'in', ids)] def write(self, cursor, user, ids, vals, context=None): self.raise_user_error(cursor, 'write_deferral', context=context) diff --git a/journal.py b/journal.py index 0e0096c863..d9ee94fa5d 100644 --- a/journal.py +++ b/journal.py @@ -150,19 +150,13 @@ class Journal(ModelSQL, ModelView): types = type_obj.browse(cursor, user, type_ids, context=context) return [(x.code, x.name) for x in types] - def search_rec_name(self, cursor, user, name, args, context=None): - args2 = [] - i = 0 - while i < len(args): - ids = self.search(cursor, user, [ - ('code', args[i][1], args[i][2]), - ], limit=1, context=context) - if ids: - args2.append(('code', args[i][1], args[i][2])) - else: - args2.append((self._rec_name, args[i][1], args[i][2])) - i += 1 - return args2 + def search_rec_name(self, cursor, user, name, clause, context=None): + ids = self.search(cursor, user, [ + ('code',) + clause[1:], + ], limit=1, order=[], context=context) + if ids: + return [('code',) + clause[1:]] + return [(self._rec_name,) + clause[1:]] Journal() diff --git a/move.py b/move.py index 6dfec9cc02..758312e15a 100644 --- a/move.py +++ b/move.py @@ -156,17 +156,12 @@ class Move(ModelSQL, ModelView): return False return True - def search_rec_name(self, cursor, user, name, args, context=None): - args2 = [] - i = 0 - while i < len(args): - ids = self.search(cursor, user, ['OR', - ('reference', args[i][1], args[i][2]), - (self._rec_name, args[i][1], args[i][2]), - ], context=context) - args2.append(('id', 'in', ids)) - i += 1 - return args2 + def search_rec_name(self, cursor, user, name, clause, context=None): + ids = self.search(cursor, user, ['OR', + ('reference',) + clause[1:], + (self._rec_name,) + clause[1:], + ], context=context) + return [('id', 'in', ids)] def write(self, cursor, user, ids, vals, context=None): res = super(Move, self).write(cursor, user, ids, vals, context=context) @@ -965,16 +960,10 @@ class Line(ModelSQL, ModelView): name: value, }, context=context) - def search_move_field(self, cursor, user, name, args, context=None): - args2 = [] - i = 0 - while i < len(args): - field = args[i][0] - if args[i][0] == 'move_state': - field = 'state' - args2.append(('move.' + field, args[i][1], args[i][2])) - i += 1 - return args2 + def search_move_field(self, cursor, user, name, clause, context=None): + if name == 'move_state': + name = 'state' + return [('move.' + name,) + clause[1:]] def query_get(self, cursor, user, obj='l', context=None): ''' diff --git a/party.py b/party.py index db08b95e16..208e4d6fec 100644 --- a/party.py +++ b/party.py @@ -125,10 +125,8 @@ class Party(ModelSQL, ModelView): res[name][party_id] = sum return res - def search_receivable_payable(self, cursor, user_id, name, args, + def search_receivable_payable(self, cursor, user_id, name, clause, context=None): - if not len(args): - return [] move_line_obj = self.pool.get('account.move.line') company_obj = self.pool.get('company.company') user_obj = self.pool.get('res.user') @@ -167,22 +165,21 @@ class Party(ModelSQL, ModelView): line_query, _ = move_line_obj.query_get(cursor, user_id, context=context) - cursor.execute('SELECT l.party ' \ - 'FROM account_move_line AS l, ' \ - 'account_account AS a ' \ - 'WHERE a.id = l.account ' \ - 'AND a.active ' \ - 'AND a.kind = %s ' \ - 'AND l.party IS NOT NULL ' \ - 'AND l.reconciliation IS NULL ' \ + cursor.execute('SELECT l.party ' + 'FROM account_move_line AS l, ' + 'account_account AS a ' + 'WHERE a.id = l.account ' + 'AND a.active ' + 'AND a.kind = %s ' + 'AND l.party IS NOT NULL ' + 'AND l.reconciliation IS NULL ' 'AND ' + line_query + ' ' \ + today_query + \ - 'AND a.company = %s ' \ - 'GROUP BY l.party ' \ - 'HAVING ' + \ - 'AND'.join('(SUM((COALESCE(l.debit, 0) - COALESCE(l.credit, 0))) ' \ - + ' ' + x[1] + ' %s) ' for x in args), - [code] + today_value + [company_id] + [x[2] for x in args]) + 'AND a.company = %s ' + 'GROUP BY l.party ' + 'HAVING (SUM((COALESCE(l.debit, 0) - COALESCE(l.credit, 0))) ' \ + + clause[1] + ' %s)', + [code] + today_value + [company_id] + [clause[2]]) return [('id', 'in', [x[0] for x in cursor.fetchall()])] Party() diff --git a/tax.py b/tax.py index 6b2782a81c..7fd8fdab27 100644 --- a/tax.py +++ b/tax.py @@ -248,18 +248,12 @@ class Code(ModelSQL, ModelView): res[code.id] = code.name return res - def search_rec_name(self, cursor, user, name, args, context=None): - args2 = [] - i = 0 - while i < len(args): - ids = self.search(cursor, user, [('code', args[i][1], args[i][2])], - context=context) - if ids: - args2.append(('code', args[i][1], args[i][2])) - else: - args2.append(('name', args[i][1], args[i][2])) - i += 1 - return args2 + def search_rec_name(self, cursor, user, name, clause, context=None): + ids = self.search(cursor, user, [('code',) + clause[1:]], limit=1, + order=[], context=context) + if ids: + return [('code',) + clause[1:]] + return [('name',) + clause[1:]] def delete(self, cursor, user, ids, context=None): if isinstance(ids, (int, long)):