[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.
This commit is contained in:
David Monjoie
2017-07-03 08:15:28 +02:00
parent 537181d4e3
commit 2e2ab4e954
2 changed files with 17 additions and 7 deletions
@@ -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),
@@ -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'");