Search on translated field will search only on translated value

This commit is contained in:
Cédric Krier
2009-01-28 14:08:55 +01:00
parent e025d706f1
commit 7644610aeb
2 changed files with 47 additions and 16 deletions
+1
View File
@@ -1,3 +1,4 @@
* Search on translated field will search only on translated value
* Add active field on ir.action to allow better override of reports
* Add depends attributes on Column
* Make Modified Preorder Tree Traversal respects the default order of the model
+46 -16
View File
@@ -2785,28 +2785,58 @@ class ORM(object):
oper = 'OR'
if args[i][1] in ('not like', 'not ilike', '!='):
oper = 'AND'
query1 = '(SELECT res_id FROM ir_translation ' \
'WHERE name = %s AND lang = %s ' \
'AND type = %s ' \
'AND fuzzy = false ' \
'AND (value ' + args[i][1] + ' %s ' \
+ oper +' value ' + args[i][1] + ' %s))'
query2 = [table._name + ',' + args[i][0],
context.get('language') or 'en_US',
'model', exprs[0] % args[i][2],
exprs[1] % args[i][2]]
query1 += ' UNION '
if self._name == 'ir.model':
table_join = 'LEFT JOIN "ir_translation" ' \
'ON (ir_translation.name = ' \
'ir_model.model||\',%s\' ' \
'AND ir_translation.res_id = 0' \
'AND ir_translation.lang = %%s ' \
'AND ir_translation.type = \'model\' ' \
'AND ir_translation.fuzzy = false)' % \
(args[i][0],)
elif self._name == 'ir.model.field':
if args[i][0] == 'field_description':
ttype = 'field'
else:
ttype = 'help'
table_join = 'LEFT JOIN "ir_model" ' \
'ON ir_model.id = ir_model_field.model ' \
'LEFT JOIN "ir_translation" ' \
'ON (ir_translation.name = ' \
'ir_model.model||\',\'||%s.name ' \
'AND ir_translation.res_id = 0' \
'AND ir_translation = %%s ' \
'AND ir_translation.type = \'%s\' ' \
'AND ir_translation.fuzzy = false)' % \
(table._table, ttype)
else:
table_join = 'LEFT JOIN "ir_translation" ' \
'ON (ir_translation.res_id = %s.id ' \
'AND ir_translation.name = \'%s,%s\' ' \
'AND ir_translation.lang = %%s ' \
'AND ir_translation.type = \'model\' ' \
'AND ir_translation.fuzzy = false)' % \
(table._table, table._name, args[i][0])
table_join_args = [context.get('language') or 'en_US']
table_query = ''
table_args = []
if table.table_query(context):
table_query, table_args = table.table_query(context)
table_query = '(' + table_query + ') AS '
query1 += '(SELECT id FROM ' + table_query + \
'"' + table._table + '" ' \
'WHERE ("' + args[i][0] + '" ' + \
args[i][1] + ' %s ' + oper + ' "' + args[i][0] + '" ' + \
trans_field = 'COALESCE(NULLIF(' \
'ir_translation.value, \'\'), ' \
+ table._table + '.' + args[i][0] + ')'
query1 = '(SELECT ' + table._table + '.id ' \
'FROM ' + table_query + '"' + table._table + '" ' \
+ table_join + ' ' \
'WHERE (' + trans_field + ' ' + \
args[i][1] + ' %s ' + oper + ' ' + trans_field + ' ' + \
args[i][1] + ' %s))'
query2 += table_args + [exprs[0] % args[i][2],
query2 = table_args + table_join_args + [exprs[0] % args[i][2],
exprs[1] % args[i][2]]
args[i] = ('id', 'inselect', (query1, query2), table)
else: