summaryrefslogtreecommitdiff
path: root/addons/web/static
diff options
context:
space:
mode:
authorDavid Monjoie <dmo@odoo.com>2017-06-29 08:52:43 +0200
committerDavid Monjoie <dmo@odoo.com>2017-07-03 08:15:28 +0200
commit2e2ab4e954cd5da8c0c06d393b334cefc7627315 (patch)
tree433ca500463b6a19329dac2e3707f8c8e035604c /addons/web/static
parent537181d4e3baad55db1fb83ea3c9e1ad9104e3fb (diff)
[FIX] web: don't read events if no filter is enabled
Previously, enabling some filters created a domain of which events to display, but disabling all filters resulted in a domain of [] which, instead of showing no events at all, actually showed all events.
Diffstat (limited to 'addons/web/static')
-rw-r--r--addons/web/static/src/js/views/calendar/calendar_model.js13
-rw-r--r--addons/web/static/tests/views/calendar_tests.js11
2 files changed, 17 insertions, 7 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 cb371bfe6f9..ded7938605f 100644
--- a/addons/web/static/src/js/views/calendar/calendar_model.js
+++ b/addons/web/static/src/js/views/calendar/calendar_model.js
@@ -393,16 +393,19 @@ return AbstractModel.extend({
this.data.fc_options = this._getFullCalendarOptions();
var defs = _.map(this.data.filters, this._loadFilter.bind(this));
-
return $.when.apply($, defs).then(function () {
- return self._rpc({
+ var eventsDef = $.Deferred().resolve([]);
+ var filterDomain = self._getFilterDomain();
+ if (filterDomain.length || _.isEmpty(self.data.filters)) {
+ eventsDef = self._rpc({
model: self.modelName,
method: 'search_read',
context: self.data.context,
fields: self.fieldNames,
- domain: self.data.domain.concat(self._getRangeDomain()).concat(self._getFilterDomain())
- })
- .then(function (events) {
+ domain: self.data.domain.concat(self._getRangeDomain()).concat(filterDomain)
+ });
+ }
+ return eventsDef.then(function (events) {
self.data.data = _.map(events, self._recordToCalendarEvent.bind(self));
return $.when(
self._loadColors(self.data, self.data.data),
diff --git a/addons/web/static/tests/views/calendar_tests.js b/addons/web/static/tests/views/calendar_tests.js
index 725eb831080..011843eefee 100644
--- a/addons/web/static/tests/views/calendar_tests.js
+++ b/addons/web/static/tests/views/calendar_tests.js
@@ -143,7 +143,7 @@ QUnit.module('Views', {
};
QUnit.test('simple calendar rendering', function (assert) {
- assert.expect(19);
+ assert.expect(22);
var calendar = createView({
View: CalendarView,
@@ -200,6 +200,13 @@ QUnit.module('Views', {
assert.strictEqual($attendeesFilter.find('.o_calendar_filter_item').length, 3, "should display 3 filter items for 'attendees' who use write_model (2 saved + Everything)");
assert.ok($attendeesFilter.find('.o_field_many2one').length, "should display one2many search bar for 'attendees' filter");
+ assert.strictEqual(calendar.$('.fc-event').length, 6,
+ "should display 6 events ('event 5' counts for 2 because it spans two weeks and thus generate two fc-event elements)");
+ calendar.$('.o_calendar_filter .o_checkbox input').first().click(); // Disable first filter
+ assert.strictEqual(calendar.$('.fc-event').length, 4, "should now only display 4 event");
+ calendar.$('.o_calendar_filter .o_checkbox input').eq(1).click(); // Disable second filter
+ assert.strictEqual(calendar.$('.fc-event').length, 0, "should not display any event anymore");
+
// test search bar in filter
$sidebar.find('input[type="text"]').trigger('click');
@@ -208,7 +215,7 @@ QUnit.module('Views', {
assert.strictEqual($sidebar.find('.o_calendar_filter:has(h3:contains(attendees)) .o_calendar_filter_item').length, 4, "should display 4 filter items for 'attendees'");
$sidebar.find('input[type="text"]').trigger('click');
assert.strictEqual($('ul.ui-autocomplete li:not(.o_m2o_dropdown_option)').text(), "partner 4", "should display the last choice in one2many autocomplete"); // TODO: remove :not(.o_m2o_dropdown_option) because can't have "create & edit" choice
- $sidebar.find('.o_calendar_filter_item[data-id="1"] .o_remove').trigger('click');
+ $sidebar.find('.o_calendar_filter_item .o_remove').first().trigger('click');
assert.ok($('.modal button.btn:contains(Ok)').length, "should display the confirm message");
$('.modal button.btn:contains(Ok)').trigger('click');
assert.strictEqual($sidebar.find('.o_calendar_filter:has(h3:contains(attendees)) .o_calendar_filter_item').length, 3, "click on remove then should display 3 filter items for 'attendees'");