summaryrefslogtreecommitdiff
path: root/addons/web/static/src
diff options
context:
space:
mode:
authorChristophe Matthieu <chm@odoo.com>2017-03-28 15:49:35 +0200
committerAaron Bohy <aab@odoo.com>2017-04-11 19:44:38 +0200
commitcd78695126596ad66adc087e4ed09e9cacebd7d5 (patch)
tree05c0f02a5a79ca47324222fd14a953ccff326293 /addons/web/static/src
parent7bb12de1c659546dccd74d36995639206c891338 (diff)
[FIX] web: with begin date is readonly event can be created but not modified
Diffstat (limited to 'addons/web/static/src')
-rw-r--r--addons/web/static/src/js/views/calendar/calendar_controller.js41
-rw-r--r--addons/web/static/src/js/views/calendar/calendar_model.js3
-rw-r--r--addons/web/static/src/js/views/calendar/calendar_quick_create.js51
-rw-r--r--addons/web/static/src/js/views/calendar/calendar_view.js2
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();
-
},
});