diff --git a/addons/web/static/src/js/views/calendar/calendar_controller.js b/addons/web/static/src/js/views/calendar/calendar_controller.js
index 11390793c68..d46cb1c5241 100644
--- a/addons/web/static/src/js/views/calendar/calendar_controller.js
+++ b/addons/web/static/src/js/views/calendar/calendar_controller.js
@@ -54,7 +54,6 @@ var CalendarController = AbstractController.extend({
// Public
//--------------------------------------------------------------------------
-
/**
* Render the buttons according to the CalendarView.buttons template and
* add listeners on it. Set this.$buttons with the produced jQuery element
@@ -154,10 +153,10 @@ var CalendarController = AbstractController.extend({
_onQuickCreate: function (event) {
var self = this;
this.model.createRecord(event)
- .then(function (id) {
+ .then(function () {
self.quick.destroy();
self.quick = null;
- self.reload(id);
+ self.reload();
}, function (error, errorEvent) {
// This will occurs if there are some more fields required
// Preventdefaulting the error event will prevent the traceback window
@@ -205,7 +204,6 @@ var CalendarController = AbstractController.extend({
if(!options.disableQuickCreate && !event.data.disableQuickCreate && this.quickAddPop) {
this.quick = new QuickCreate(this, true, options, data, event.data);
- this.quick.on('added', this, this.reload.bind(this));
this.quick.open();
this.quick.focus();
return;
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 4374421d7b3..b32374057bb 100644
--- a/addons/web/static/src/js/views/calendar/calendar_model.js
+++ b/addons/web/static/src/js/views/calendar/calendar_model.js
@@ -322,6 +322,7 @@ return AbstractModel.extend({
// List authorized values for every field
// fields with an active 'all' filter are skipped
var authorizedValues = {};
+ var avoidValues = {};
_.each(this.data.filters, function (filter) {
// Skip 'all' filters because they do not affect the domain
@@ -329,11 +330,20 @@ return AbstractModel.extend({
// Loop over subfilters to complete authorizedValues
_.each(filter.filters, function (f) {
- if (!authorizedValues[filter.fieldName])
- authorizedValues[filter.fieldName] = [];
+ if (filter.write_model) {
+ if (!authorizedValues[filter.fieldName])
+ authorizedValues[filter.fieldName] = [];
- if (f.active) {
- authorizedValues[filter.fieldName].push(f.value);
+ if (f.active) {
+ authorizedValues[filter.fieldName].push(f.value);
+ }
+ } else {
+ if (!avoidValues[filter.fieldName])
+ avoidValues[filter.fieldName] = [];
+
+ if (!f.active) {
+ avoidValues[filter.fieldName].push(f.value);
+ }
}
});
});
@@ -343,6 +353,9 @@ return AbstractModel.extend({
for (var field in authorizedValues) {
domain.push([field, 'in', authorizedValues[field]]);
}
+ for (var field in avoidValues) {
+ 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 d40e66317ed..8d41fba39e3 100644
--- a/addons/web/static/tests/views/calendar_tests.js
+++ b/addons/web/static/tests/views/calendar_tests.js
@@ -31,15 +31,15 @@ QUnit.module('Views', {
event: {
fields: {
id: {string: "ID", type: "integer"},
- user_id: {string: "user", type: "many2one", relation: 'user'},
- partner_id: {string: "user", type: "many2one", relation: 'partner', related: 'user_id.partner_id'},
+ user_id: {string: "user", type: "many2one", relation: 'user', default: session.uid},
+ partner_id: {string: "user", type: "many2one", relation: 'partner', related: 'user_id.partner_id', default: 1},
name: {string: "name", type: "char"},
start_date: {string: "start date", type: "date"},
stop_date: {string: "stop date", type: "date"},
start: {string: "start datetime", type: "datetime"},
stop: {string: "stop datetime", type: "datetime"},
allday: {string: "allday", type: "boolean"},
- partner_ids: {string: "attendees", type: "one2many", relation: 'partner'},
+ partner_ids: {string: "attendees", type: "one2many", relation: 'partner', default: [[6, 0, [1]]]},
type: {string: "type", type: "integer"},
},
records: [
@@ -1085,7 +1085,6 @@ QUnit.module('Views', {
assert.strictEqual($('#ui-datepicker-div:empty').length, 0, "should have a clean body");
});
-
QUnit.test('readonly date_start field', function (assert) {
assert.expect(4);
@@ -1207,6 +1206,305 @@ QUnit.module('Views', {
calendar.destroy();
});
+ QUnit.test('create event with filters', function (assert) {
+ assert.expect(7);
+
+ this.data.event.fields.user_id.default = 5;
+ this.data.event.fields.partner_id.default = 3;
+ this.data.user.records.push({id: 5, display_name: "user 5", partner_id: 3});
+
+ var calendar = createView({
+ View: CalendarView,
+ model: 'event',
+ data: this.data,
+ arch:
+ '