diff options
| author | Christophe Matthieu <chm@odoo.com> | 2017-03-28 15:49:35 +0200 |
|---|---|---|
| committer | Aaron Bohy <aab@odoo.com> | 2017-04-11 19:44:38 +0200 |
| commit | cd78695126596ad66adc087e4ed09e9cacebd7d5 (patch) | |
| tree | 05c0f02a5a79ca47324222fd14a953ccff326293 /addons/web/static/src | |
| parent | 7bb12de1c659546dccd74d36995639206c891338 (diff) | |
[FIX] web: with begin date is readonly event can be created but not modified
Diffstat (limited to 'addons/web/static/src')
4 files changed, 51 insertions, 46 deletions
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 0efb196ebcf..c36dbfab941 100644 --- a/addons/web/static/src/js/views/calendar/calendar_controller.js +++ b/addons/web/static/src/js/views/calendar/calendar_controller.js @@ -23,6 +23,7 @@ var CalendarController = AbstractController.extend({ confirm_on_delete: true, }), custom_events: _.extend({}, AbstractController.prototype.custom_events, { + quickCreate: '_onQuickCreate', openCreate: '_onOpenCreate', openEvent: '_onOpenEvent', dropRecord: '_onDropRecord', @@ -147,6 +148,33 @@ var CalendarController = AbstractController.extend({ this._updateRecord(event.data); }, /** + * Handles saving data coming from quick create box + * + * @private + * @param {OdooEvent} event + */ + _onQuickCreate: function (event) { + var self = this; + var data = this.model.calendarEventToRecord(event.data.data); + var options = event.data.options; + return this._rpc({ + model: this.model.modelName, + method: 'create', + args: [$.extend({}, this.quick.data_template, data)], + context: _.pick(options, 'context'), + }) + .then(function (id) { + self.quick.destroy(); + self.quick = null; + self.reload(id); + }, function () { + // This will occurs if there are some more fields required + data.disable_quick_create = true; + data.on_save = this.destroy.bind(this); + self._onOpenCreate({data: data}); + }); + }, + /** * @param {OdooEvent} event */ _onOpenCreate: function (event) { @@ -173,13 +201,14 @@ var CalendarController = AbstractController.extend({ if(!options.disable_quick_create && !event.data.disable_quick_create) { if (this.quick != null) { - return this.quick.close(); + this.quick.destroy(); + this.quick = null; + return; } - var model = this.modelName; - var quick = new QuickCreate(this, model, true, options, data, event.data); - quick.on('added', this, this.reload.bind(this)); - quick.open(); - quick.focus(); + 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 34723e63995..63d58db3ca9 100644 --- a/addons/web/static/src/js/views/calendar/calendar_model.js +++ b/addons/web/static/src/js/views/calendar/calendar_model.js @@ -161,6 +161,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 = params.creatable; // display more button when there are too much event on one day this.eventLimit = params.eventLimit; @@ -319,7 +320,7 @@ return AbstractModel.extend({ return { defaultView: (this.mode === "month")? "month" : ((this.mode === "week")? "agendaWeek" : ((this.mode === "day")? "agendaDay" : "agendaWeek")), header: false, - selectable: this.editable && this.create_right, + selectable: this.creatable && this.create_right, selectHelper: true, editable: this.editable, droppable: true, diff --git a/addons/web/static/src/js/views/calendar/calendar_quick_create.js b/addons/web/static/src/js/views/calendar/calendar_quick_create.js index 8bf2bc8235a..497d3c1c05b 100644 --- a/addons/web/static/src/js/views/calendar/calendar_quick_create.js +++ b/addons/web/static/src/js/views/calendar/calendar_quick_create.js @@ -20,14 +20,12 @@ var QuickCreate = Dialog.extend({ /** * @constructor * @param {Widget} parent - * @param {string} modelName - * @param {any} buttons - * @param {any} options - * @param {any} data_template - * @param {any} data_calendar + * @param {Object} buttons + * @param {Object} options + * @param {Object} data_template + * @param {Object} dataCalendar */ - init: function (parent, modelName, buttons, options, data_template, data_calendar) { - this.modelName = modelName; + init: function (parent, buttons, options, data_template, dataCalendar) { this._buttons = buttons || false; this.options = options; @@ -41,15 +39,15 @@ var QuickCreate = Dialog.extend({ size: 'small', buttons: this._buttons ? [ {text: _t("Create"), classes: 'btn-primary', click: function () { - if (!self._quickAdd()) { + if (!self._quickAdd(dataCalendar)) { self.focus(); } }}, {text: _t("Edit"), click: function () { - data_calendar.disable_quick_create = true; - data_calendar.title = self.$input.val().trim(); - data_calendar.on_save = self.destroy.bind(self); - self.trigger_up('openCreate', data_calendar); + dataCalendar.disable_quick_create = true; + dataCalendar.title = self.$input.val().trim(); + dataCalendar.on_save = self.destroy.bind(self); + self.trigger_up('openCreate', dataCalendar); }}, {text: _t("Cancel"), close: true}, ] : [], @@ -67,10 +65,6 @@ var QuickCreate = Dialog.extend({ this.slow_create(); return; } - this.on('added', this, function () { - self.close(); - }); - this.$input = this.$('input').keyup(function enterHandler (e) { if(e.keyCode === $.ui.keyCode.ENTER) { self.$input.off('keyup', enterHandler); @@ -113,29 +107,10 @@ var QuickCreate = Dialog.extend({ /** * Gathers data from the quick create dialog a launch quick_create(data) method */ - _quickAdd: function () { + _quickAdd: function (dataCalendar) { var val = this.$input.val().trim(); - return (val)? this._quickCreate({'name': val}, this.options) : false; - }, - /** - * Handles saving data coming from quick create box - */ - _quickCreate: function (data, options) { - var self = this; - return this._rpc({ - model: this.modelName, - method: 'create', - args: [$.extend({}, this.data_template, data)], - context: _.pick(options, 'context'), - }) - .then(function (id) { - self.trigger('added', id); - self.$input.val(""); - }, function (r, event) { - event.preventDefault(); - // This will occurs if there are some more fields required - self.slow_create(data); - }); + dataCalendar.title = val; + return (val)? this.trigger_up('quickCreate', {data: dataCalendar, options: this.options}) : false; }, }); 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 c5df8b7f8f7..a8e1a3f992d 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 = !this.controllerParams.read_only_mode && !fields[mapping.date_start].readonly; + this.loadParams.creatable = !this.controllerParams.read_only_mode; this.loadParams.eventLimit = eventLimit; this.loadParams.field_color = attrs.color; @@ -132,7 +133,6 @@ var CalendarView = AbstractView.extend({ this.loadParams.mode = attrs.mode; this.loadParams.scale_zoom = attrs.scale_zoom; this.loadParams.initialDate = params.initialDate || new Date(); - }, }); |
