From 247a32f74ce53b158d96632a7bad230904cfddfc Mon Sep 17 00:00:00 2001 From: Sergi Almacellas Abellana Date: Sun, 14 Apr 2019 14:17:39 +0200 Subject: [PATCH] Add domain inversion for reference fields issue7877 review45831002 --- CHANGELOG | 1 + src/common.js | 21 +++++++++++++++------ tests/sao.js | 4 ++++ 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 86e0c784e8..d71131096f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,4 @@ +* Add domain inversion for reference fields * Add list-form view * Support HTML widget * Use locale format for data export diff --git a/src/common.js b/src/common.js index 9dc627d38a..360e242b66 100644 --- a/src/common.js +++ b/src/common.js @@ -2339,13 +2339,22 @@ }, unique_value: function(domain) { if ((domain instanceof Array) && - (domain.length == 1) && - !domain[0][0].contains('.') && - (domain[0][1] == '=')) { - return [true, domain[0][1], domain[0][2]]; - } else { - return [false, null, null]; + (domain.length == 1)) { + domain = domain[0]; + var name = domain[0]; + var value = domain[2]; + var count = 0; + if (domain.length == 4 && name.endsWith('.id')) { + count = 1; + var model = domain[3]; + value = [model, value]; + } + if ((name.split('.').length - 1) == count && + (domain[1] == '=')) { + return [true, domain[1], value]; + } } + return [false, null, null]; }, parse: function(domain) { var And = Sao.common.DomainInversion.And; diff --git a/tests/sao.js b/tests/sao.js index 39f6c3989d..ebb27917c8 100644 --- a/tests/sao.js +++ b/tests/sao.js @@ -2201,6 +2201,10 @@ QUnit.ok(!unique_value(domain)[0]); domain = [['a.b', '=', 1]]; QUnit.ok(!unique_value(domain)[0]); + domain = [['a.id', '=', 1, 'model']]; + QUnit.ok(compare(unique_value(domain), [true, '=', ['model', 1]])); + domain = [['a.b.id', '=', 1, 'model']]; + QUnit.ok(compare(unique_value(domain), [false, null, null])); }); QUnit.test('DomainInversion evaldomain', function() {