summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/views/basic/basic_controller.js
diff options
context:
space:
mode:
authorOlivier Dony <odo@openerp.com>2017-05-16 18:23:03 +0200
committerOlivier Dony <odo@openerp.com>2017-05-16 18:23:15 +0200
commit5f4db9df6640100302ab7967344e12ab877089cb (patch)
tree934f0ceb590fb72846c12cb046d96ff609554951 /addons/web/static/src/js/views/basic/basic_controller.js
parentcbca7e13132fe807ac918d9b3c2fcbbb3a12a103 (diff)
parent5afe894f440eff3b58134d14fa7c9b43b19fe88b (diff)
[MERGE] Forward-port saas-16 up to 5afe894f440eff3b58134d14fa7c9b43b19fe88b
Diffstat (limited to 'addons/web/static/src/js/views/basic/basic_controller.js')
-rw-r--r--addons/web/static/src/js/views/basic/basic_controller.js65
1 files changed, 45 insertions, 20 deletions
diff --git a/addons/web/static/src/js/views/basic/basic_controller.js b/addons/web/static/src/js/views/basic/basic_controller.js
index b7cd40d9e7c..1e0187b348e 100644
--- a/addons/web/static/src/js/views/basic/basic_controller.js
+++ b/addons/web/static/src/js/views/basic/basic_controller.js
@@ -19,7 +19,8 @@ var _t = core._t;
var BasicController = AbstractController.extend(FieldManagerMixin, {
custom_events: _.extend({}, AbstractController.prototype.custom_events, FieldManagerMixin.custom_events, {
reload: '_onReload',
- sidebar_data_asked: '_onSidebarDataAsked'
+ sidebar_data_asked: '_onSidebarDataAsked',
+ translate: '_onTranslate',
}),
/**
* @override
@@ -118,13 +119,18 @@ var BasicController = AbstractController.extend(FieldManagerMixin, {
var self = this;
recordID = recordID || this.handle;
return this.canBeDiscarded(recordID).then(function (needDiscard) {
+ if (options && options.readonlyIfRealDiscard && !needDiscard) {
+ return;
+ }
+
if (needDiscard) { // Just some optimization
self.model.discardChanges(recordID);
}
- if (options && options.readonlyIfRealDiscard && !needDiscard) {
+ if (self.model.isNew(recordID)) {
+ self._abandonRecord(recordID);
return;
}
- self._setMode('readonly', recordID);
+ return self._confirmSave(recordID);
});
},
/**
@@ -164,6 +170,8 @@ var BasicController = AbstractController.extend(FieldManagerMixin, {
* @param {string} [recordID] - default to main recordID
* @param {Object} [options]
* @returns {Deferred}
+ * Resolved with the list of field names (whose value has been modified)
+ * Rejected if the record can't be saved
*/
saveRecord: function (recordID, options) {
// Some field widgets can't detect (all) their changes immediately or
@@ -286,7 +294,7 @@ var BasicController = AbstractController.extend(FieldManagerMixin, {
var self = this;
function doIt() {
return self.model
- .deleteRecords(ids, self.modelName, self.handle)
+ .deleteRecords(ids, self.modelName)
.then(self._onDeletedRecords.bind(self, ids));
}
if (this.confirmOnDelete) {
@@ -362,6 +370,8 @@ var BasicController = AbstractController.extend(FieldManagerMixin, {
* if true, the record will only be 'locally' saved: its changes
* will move from the _changes key to the data key
* @returns {Deferred}
+ * Resolved with the list of field names (whose value has been modified)
+ * Rejected if the record can't be saved
*/
_saveRecord: function (recordID, options) {
recordID = recordID || this.handle;
@@ -371,22 +381,24 @@ var BasicController = AbstractController.extend(FieldManagerMixin, {
savePoint: false,
});
- var def = $.Deferred();
// Check if the view is in a valid state for saving
// Note: it is the model's job to do nothing if there is nothing to save
if (this.canBeSaved(recordID)) {
- def = this.model.save(recordID, { // Save then leave edit mode
+ var self = this;
+ var def = this.model.save(recordID, { // Save then leave edit mode
reload: options.reload,
savePoint: options.savePoint,
});
- } else {
- def.reject(); // Cannot be saved, do nothing at all
- }
-
- if (options.stayInEdit) {
+ if (!options.stayInEdit) {
+ def = def.then(function (fieldNames) {
+ return self._confirmSave(recordID).then(function () {
+ return fieldNames;
+ });
+ });
+ }
return def;
} else {
- return def.then(this._setMode.bind(this, 'readonly', recordID));
+ return $.Deferred().reject(); // Cannot be saved
}
},
/**
@@ -397,17 +409,13 @@ var BasicController = AbstractController.extend(FieldManagerMixin, {
* @private
* @param {string} mode - 'readonly' or 'edit'
* @param {string} [recordID]
+ * @returns {Deferred}
*/
_setMode: function (mode, recordID) {
- recordID = recordID || this.handle;
- // If trying to make a temporary record readonly, discard the record
- if (mode === 'readonly' && this.model.isNew(recordID)) {
- this._abandonRecord(recordID);
- return;
- }
- if (recordID === this.handle) {
- this.update({mode: mode}, {reload: false});
+ if ((recordID || this.handle) === this.handle) {
+ return this.update({mode: mode}, {reload: false});
}
+ return $.when();
},
/**
* Helper method, to get the current environment variables from the model
@@ -497,6 +505,23 @@ var BasicController = AbstractController.extend(FieldManagerMixin, {
var sidebarEnv = this._getSidebarEnv();
event.data.callback(sidebarEnv);
},
+ /**
+ * open the translation view for the current field
+ *
+ * @private
+ * @param {OdooEvent} event
+ */
+ _onTranslate: function (event) {
+ var record = this.model.get(event.data.id, {raw: true});
+ this._rpc({
+ route: '/web/dataset/call_button',
+ params: {
+ model: 'ir.translation',
+ method: 'translate_fields',
+ args: [record.model, record.res_id, event.data.fieldName, record.getContext()],
+ }
+ }).then(this.do_action.bind(this));
+ },
});
return BasicController;