Vo Minh Thu (OpenERP) has proposed merging 
lp:~openerp-dev/openobject-server/trunk-bug-1049653-translatable-unaccent-vmt 
into lp:openobject-server.

Requested reviews:
  OpenERP Core Team (openerp)
Related bugs:
  Bug #1049653 in OpenERP Server: "--unaccent option does not work"
  https://bugs.launchpad.net/openobject-server/+bug/1049653

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-server/trunk-bug-1049653-translatable-unaccent-vmt/+merge/131206
-- 
https://code.launchpad.net/~openerp-dev/openobject-server/trunk-bug-1049653-translatable-unaccent-vmt/+merge/131206
Your team OpenERP R&D Team is subscribed to branch 
lp:~openerp-dev/openobject-server/trunk-bug-1049653-translatable-unaccent-vmt.
=== modified file 'openerp/addons/base/test/test_osv_expression.yml'
--- openerp/addons/base/test/test_osv_expression.yml	2012-10-19 04:28:56 +0000
+++ openerp/addons/base/test/test_osv_expression.yml	2012-10-24 15:09:20 +0000
@@ -445,10 +445,15 @@
     !record {model: res.company, id: ymltest_unaccent_company}:
         name: Hélène
 -
-    Test the unaccent-enabled 'ilike'.
+    Unaccent. Create a user with an accent in its name (which is inherits'd from res.partner).
+-
+    !record {model: res.users, id: ymltest_unaccent_user}:
+        name: Pénélope
+        login: pp
+-
+    Test the unaccent-enabled 'ilike' on company.
 -
     !python {model: res.company}: |
-        if self.pool.has_unaccent:
             ids = self.search(cr, uid, [('name','ilike','Helene')], {})
             assert ids == [ref('ymltest_unaccent_company')]
             ids = self.search(cr, uid, [('name','ilike','hélène')], {})
@@ -458,6 +463,23 @@
             ids = self.search(cr, uid, [('name','not ilike','hélène')], {})
             assert ref('ymltest_unaccent_company') not in ids
 -
+    Test the unaccent-enabled 'ilike' on user.
+-
+    !python {model: res.partner}: |
+        self._columns['name'].translate = True
+-
+    Test the unaccent-enabled 'ilike' on user.
+-
+    !python {model: res.users}: |
+            ids = self.search(cr, uid, [('name','ilike','Penelope')], {})
+            assert ids == [ref('ymltest_unaccent_user')]
+            ids = self.search(cr, uid, [('name','ilike','pénélope')], {})
+            assert ids == [ref('ymltest_unaccent_user')]
+            ids = self.search(cr, uid, [('name','not ilike','Penelope')], {})
+            assert ref('ymltest_unaccent_user') not in ids
+            ids = self.search(cr, uid, [('name','not ilike','pénélope')], {})
+            assert ref('ymltest_unaccent_user') not in ids
+-
     Check that =like/=ilike expressions (no wildcard variants of like/ilike) are working on an untranslated field.
 -
     !python {model: res.partner }: |

=== modified file 'openerp/osv/expression.py'
--- openerp/osv/expression.py	2012-10-18 12:47:50 +0000
+++ openerp/osv/expression.py	2012-10-24 15:09:20 +0000
@@ -659,11 +659,18 @@
                              '    FROM "' + working_table._table + '"'       \
                              '   WHERE "' + left + '" ' + sql_operator + ' ' +" (" + instr + "))"
                     else:
-                        subselect += '     AND value ' + sql_operator + instr +   \
-                             ') UNION ('                \
-                             '  SELECT id'              \
-                             '    FROM "' + working_table._table + '"'       \
-                             '   WHERE "' + left + '" ' + sql_operator + instr + ")"
+                        if self.has_unaccent and sql_operator in ('ilike', 'not ilike'):
+                            subselect += '     AND unaccent(value) ' + sql_operator + ' unaccent(' + instr +   \
+                                 ')) UNION ('                \
+                                 '  SELECT id'              \
+                                 '    FROM "' + working_table._table + '"'       \
+                                 '   WHERE unaccent("' + left + '") ' + sql_operator + ' unaccent(' + instr + '))'
+                        else:
+                            subselect += '     AND value ' + sql_operator + instr +   \
+                                 ') UNION ('                \
+                                 '  SELECT id'              \
+                                 '    FROM "' + working_table._table + '"'       \
+                                 '   WHERE "' + left + '" ' + sql_operator + instr + ")"
 
                     params = [working_table._name + ',' + left,
                               context.get('lang', False) or 'en_US',

_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help   : https://help.launchpad.net/ListHelp

Reply via email to