From 7f8b6542f0aa4eced280f41b1bb9610c3257d8ef Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Wed, 8 Jan 2014 16:27:22 +0100 Subject: [PATCH] [FIX] expression: allow exclusion of records with translated fields lp bug: https://launchpad.net/bugs/1071710 fixed bzr revid: chs@openerp.com-20140108152722-7f0dpsuv1skxbqub --- .../addons/base/test/test_osv_expression.yml | 21 +++++++++++++++++-- openerp/osv/expression.py | 4 ++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/openerp/addons/base/test/test_osv_expression.yml b/openerp/addons/base/test/test_osv_expression.yml index 6955025aaf4..e0061135d85 100644 --- a/openerp/addons/base/test/test_osv_expression.yml +++ b/openerp/addons/base/test/test_osv_expression.yml @@ -535,12 +535,29 @@ - !python {model: res.country}: | # first install french language - BLI = self.pool.get('base.language.install') - BLI.lang_install(cr, uid, [BLI.create(cr, uid, {'lang': 'fr_FR'})]) + Modules = self.pool.get('ir.module.module') + base = Modules.browse(cr, uid, Modules.search(cr, uid, [('name', '=', 'base')])[0]) + + # hack: mark module as installed to allow install of the translation + base_state = base.state + base.write({'state': 'installed'}) + base.update_translations('fr_FR') + base.write({'state': base_state}) + # tests be_id = self.search(cr, uid, [('name', '=', 'Belgium')])[0] ctx = {'lang': 'fr_FR'} not_be = self.search(cr, uid, [('name', '!=', 'Belgique')], context=ctx) assert be_id not in not_be, "Search match failed" + + # indirect search via m2o + Partners = self.pool.get('res.partner') + agrolait = Partners.search(cr, uid, [('name', '=', 'Agrolait')])[0] + + not_be = Partners.search(cr, uid, [('country_id', '!=', 'Belgium')]) + assert agrolait not in not_be, "Search match failed (m2o)" + + not_be = Partners.search(cr, uid, [('country_id', '!=', 'Belgique')], context=ctx) + assert agrolait not in not_be, "Search match failed (m2o)" diff --git a/openerp/osv/expression.py b/openerp/osv/expression.py index 67c53882063..b1717e91a58 100644 --- a/openerp/osv/expression.py +++ b/openerp/osv/expression.py @@ -1026,9 +1026,9 @@ class expression(object): right = '%%%s%%' % right inselect_operator = 'inselect' - if operator in NEGATIVE_TERM_OPERATORS: + if sql_operator in NEGATIVE_TERM_OPERATORS: # negate operator (fix lp:1071710) - operator = operator[4:] if operator[:3] == 'not' else '=' + sql_operator = sql_operator[4:] if sql_operator[:3] == 'not' else '=' inselect_operator = 'not inselect' subselect = '( SELECT res_id' \