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];