changeset 083558ade510 in sao:default
details: https://hg.tryton.org/sao?cmd=changeset;node=083558ade510
description:
        domain_parser should use rec_name for relation field and list

        in operator on relation field must use list of ids. So the related 
rec_name
        should be used instead because domain_parser always uses string as 
value.

        issue3540
        review271321002
diffstat:

 src/common.js |  18 +++++++++++++-----
 tests/sao.js  |  21 ++++++++++++++++++---
 2 files changed, 31 insertions(+), 8 deletions(-)

diffs (109 lines):

diff -r 51dd5b57b381 -r 083558ade510 src/common.js
--- a/src/common.js     Wed Apr 24 23:42:44 2019 +0200
+++ b/src/common.js     Wed Apr 24 23:45:06 2019 +0200
@@ -1665,12 +1665,16 @@
                     var operator = clause[1];
                     var value = clause[2];
                     var field = this.strings[clause[0].toLowerCase()];
+                    var field_name = field.name;
 
                     var target = null;
                     if (field.type == 'reference') {
                         var split = this.split_target_value(field, value);
                         target = split[0];
                         value = split[1];
+                        if (target) {
+                            field_name += '.rec_name';
+                        }
                     }
 
                     if (!operator) {
@@ -1694,8 +1698,8 @@
                             var lvalue = this.convert_value(field, values[0]);
                             var rvalue = this.convert_value(field, values[1]);
                             result.push([
-                                    this._clausify([field.name, '>=', lvalue]),
-                                    this._clausify([field.name, '<=', rvalue])
+                                    this._clausify([field_name, '>=', lvalue]),
+                                    this._clausify([field_name, '<=', rvalue])
                                     ]);
                             return;
                         }
@@ -1704,6 +1708,10 @@
                         value = value.map(function(v) {
                             return this.convert_value(field, v);
                         }.bind(this));
+                        if (~['many2one', 'one2many', 'many2many', 'one2one',
+                            'many2many', 'one2one'].indexOf(field.type)) {
+                            field_name += '.rec_name';
+                        }
                     } else {
                         value = this.convert_value(field, value);
                     }
@@ -1711,11 +1719,11 @@
                         value = this.likify(value);
                     }
                     if (target) {
-                        result.push(this._clausify([field.name + '.rec_name',
-                                    operator, value, target]));
+                        result.push(this._clausify(
+                            [field_name, operator, value, target]));
                     } else {
                         result.push(this._clausify(
-                                    [field.name, operator, value]));
+                            [field_name, operator, value]));
                     }
                 }
             }.bind(this));
diff -r 51dd5b57b381 -r 083558ade510 tests/sao.js
--- a/tests/sao.js      Wed Apr 24 23:42:44 2019 +0200
+++ b/tests/sao.js      Wed Apr 24 23:45:06 2019 +0200
@@ -1451,7 +1451,12 @@
                     ['spam', 'Spam'],
                     ['ham', 'Ham']
                 ]
-            }
+            },
+            'many2one': {
+                'string': "Many2One",
+                'name': 'many2one',
+                'type': 'many2one',
+            },
         });
         var c = function(value) {
             value.clause = true;
@@ -1492,6 +1497,9 @@
             ['OR', c(['name', 'ilike', '%John%']),
                 c(['name', 'ilike', '%Jane%'])
             ]],
+        [[c(['Many2One', null, 'John'])], [['many2one', 'ilike', '%John%']]],
+        [[c(['Many2One', null, ['John', 'Jane']])],
+            [['many2one.rec_name', 'in', ['John', 'Jane']]]],
         [[[c(['John'])]], [[['rec_name', 'ilike', '%John%']]]],
         ].forEach(function(test) {
             var value = test[0];
@@ -1690,7 +1698,12 @@
                     ['spam', 'Spam'],
                     ['ham', 'Ham']
                 ]
-            }
+            },
+            'many2one': {
+                'string': "Many2One",
+                'name': 'many2one',
+                'type': 'many2one',
+            },
         });
 
         [
@@ -1735,7 +1748,9 @@
         [[['selection', '!=', 'male']], 'Selection: !Male'],
         [[['reference', 'ilike', '%foo%']], 'Reference: foo'],
         [[['reference', 'ilike', '%bar%', 'spam']], 'Reference: Spam,bar'],
-        [[['reference', 'in', ['foo', 'bar']]], 'Reference: foo;bar']
+        [[['reference', 'in', ['foo', 'bar']]], 'Reference: foo;bar'],
+        [[['many2one', 'ilike', '%John%']], 'Many2One: John'],
+        [[['many2one.rec_name', 'in', ['John', 'Jane']]], 'Many2One: 
John;Jane'],
         ].forEach(function(test) {
             var value = test[0];
             var result = test[1];

Reply via email to