summaryrefslogtreecommitdiff
path: root/addons/web/static
diff options
context:
space:
mode:
authorGéry Debongnie <ged@odoo.com>2018-05-28 16:32:33 +0200
committerGéry Debongnie <ged@odoo.com>2018-05-29 09:34:55 +0200
commit20454038d08913404b5a039ef06182227052d2da (patch)
tree6013068bd887cbe035d9ba912262628ad3438eb2 /addons/web/static
parent59636caebae77a527b1e62f85b6a741d4ef029d9 (diff)
[IMP] web: small optimization in calendar view
In some cases, the calendar view sends a trivial domain, such as ["partner_id", "not in", []] This is clearly not really useful, and it could hurt performances in some cases (for example, if the partner_id field is a related on a large table, and non stored). This is clearly not a complete fix, but it is easy, safe and does not hurt.
Diffstat (limited to 'addons/web/static')
-rw-r--r--addons/web/static/src/js/views/calendar/calendar_model.js4
-rw-r--r--addons/web/static/tests/views/calendar_tests.js22
2 files changed, 24 insertions, 2 deletions
diff --git a/addons/web/static/src/js/views/calendar/calendar_model.js b/addons/web/static/src/js/views/calendar/calendar_model.js
index 240beb9f1dc..63a35171a30 100644
--- a/addons/web/static/src/js/views/calendar/calendar_model.js
+++ b/addons/web/static/src/js/views/calendar/calendar_model.js
@@ -373,7 +373,9 @@ return AbstractModel.extend({
domain.push([field, 'in', authorizedValues[field]]);
}
for (var field in avoidValues) {
- domain.push([field, 'not in', avoidValues[field]]);
+ if (avoidValues[field].length > 0) {
+ domain.push([field, 'not in', avoidValues[field]]);
+ }
}
return domain;
diff --git a/addons/web/static/tests/views/calendar_tests.js b/addons/web/static/tests/views/calendar_tests.js
index f24039f2d8d..f1356558a23 100644
--- a/addons/web/static/tests/views/calendar_tests.js
+++ b/addons/web/static/tests/views/calendar_tests.js
@@ -1208,7 +1208,20 @@ QUnit.module('Views', {
});
QUnit.test('"all" filter', function (assert) {
- assert.expect(3);
+ assert.expect(6);
+
+ var interval = [
+ ["start", "<=", "2016-12-17 23:59:59"],
+ ["stop", ">=", "2016-12-11 00:00:00"],
+ ];
+
+ var domains = [
+ interval.concat([["partner_ids", "in", [2,1]]]),
+ interval.concat([["partner_ids", "in", [1]]]),
+ interval,
+ ];
+
+ var i = 0;
var calendar = createView({
View: CalendarView,
@@ -1230,6 +1243,13 @@ QUnit.module('Views', {
viewOptions: {
initialDate: initialDate,
},
+ mockRPC: function (route, args) {
+ if (args.method === 'search_read' && args.model === 'event') {
+ assert.deepEqual(args.kwargs.domain, domains[i]);
+ i++;
+ }
+ return this._super.apply(this, arguments);
+ },
});
assert.strictEqual(calendar.$('.fc-event').length, 9,