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 7e668b79dc0..d4c96a15736 100644 --- a/addons/web/static/src/js/views/calendar/calendar_controller.js +++ b/addons/web/static/src/js/views/calendar/calendar_controller.js @@ -170,12 +170,12 @@ var CalendarController = AbstractController.extend({ var context = _.extend({}, this.context, event.options && event.options.context); context.default_name = data.name || null; - context['default_' + this.mapping.date_start] = data.start || null; + context['default_' + this.mapping.date_start] = data[this.mapping.date_start] || null; if (this.mapping.date_stop) { - context['default_' + this.mapping.date_stop] = data.stop || null; + context['default_' + this.mapping.date_stop] = data[this.mapping.date_stop] || null; } if (this.mapping.date_delay) { - context['default_' + this.mapping.date_delay] = data.duration || null; + context['default_' + this.mapping.date_delay] = data[this.mapping.date_delay] || null; } if (this.mapping.all_day) { context['default_' + this.mapping.all_day] = data[this.mapping.all_day] || null; 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 939e44446a8..cb371bfe6f9 100644 --- a/addons/web/static/src/js/views/calendar/calendar_model.js +++ b/addons/web/static/src/js/views/calendar/calendar_model.js @@ -181,7 +181,7 @@ return AbstractModel.extend({ // Check whether the date field is editable (i.e. if the events can be // dragged and dropped) this.editable = params.editable; - this.creatable = this.editable; + this.creatable = params.creatable; // display more button when there are too much event on one day this.eventLimit = params.eventLimit; diff --git a/addons/web/static/src/js/views/calendar/calendar_view.js b/addons/web/static/src/js/views/calendar/calendar_view.js index daef6f4fbb0..135224fb0cc 100644 --- a/addons/web/static/src/js/views/calendar/calendar_view.js +++ b/addons/web/static/src/js/views/calendar/calendar_view.js @@ -125,6 +125,7 @@ var CalendarView = AbstractView.extend({ this.loadParams.fields = fields; this.loadParams.fieldsInfo = viewInfo.fieldsInfo; this.loadParams.editable = !fields[mapping.date_start].readonly; + this.loadParams.creatable = true; this.loadParams.eventLimit = eventLimit; this.loadParams.fieldColor = attrs.color; diff --git a/addons/web/static/tests/views/calendar_tests.js b/addons/web/static/tests/views/calendar_tests.js index b81c1965b32..8aa1f692072 100644 --- a/addons/web/static/tests/views/calendar_tests.js +++ b/addons/web/static/tests/views/calendar_tests.js @@ -770,6 +770,81 @@ 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); + + this.data.event.fields.start.readonly = true; + + var calendar = createView({ + View: CalendarView, + model: 'event', + data: this.data, + arch: + ''+ + ''+ + '', + archs: archs, + viewOptions: { + initialDate: initialDate, + }, + }); + + assert.strictEqual(calendar.$('.fc-resizer').length, 0, "should not have resize button"); + + // click on an existing event to open the form view + + testUtils.intercept(calendar, 'do_action', function (event) { + assert.deepEqual(event.data.action, + { + type: "ir.actions.act_window", + res_id: 4, + res_model: "event", + views: [[false, "form"]], + target: "current", + context: {} + }, + "should open the form view"); + }); + calendar.$('.fc-event:contains(event 4) .fc-content').trigger('click'); + + // create a new event and edit it + + var $cell = calendar.$('.fc-day-grid .fc-row:eq(4) .fc-day:eq(2)'); + testUtils.triggerMouseEvent($cell, "mousedown"); + testUtils.triggerMouseEvent($cell, "mouseup"); + $('.modal-body input:first').val('coucou').trigger('input'); + + testUtils.intercept(calendar, 'do_action', function (event) { + assert.deepEqual(event.data.action, + { + type: "ir.actions.act_window", + res_model: "event", + views: [[false, "form"]], + target: "current", + context: { + "default_name": "coucou", + "default_start": "2016-12-27 00:00:00", + "default_stop": "2016-12-27 00:00:00", + "default_allday": true + } + }, + "should open the form view with the context default values"); + }); + + $('.modal button.btn:contains(Edit)').trigger('click'); + + calendar.destroy(); + + assert.strictEqual($('#ui-datepicker-div:empty').length, 0, "should have a clean body"); + }); + }); });