diff options
Diffstat (limited to 'addons/web/static/src')
| -rw-r--r-- | addons/web/static/src/js/fields/relational_fields.js | 28 | ||||
| -rw-r--r-- | addons/web/static/src/js/views/basic/basic_model.js | 11 |
2 files changed, 29 insertions, 10 deletions
diff --git a/addons/web/static/src/js/fields/relational_fields.js b/addons/web/static/src/js/fields/relational_fields.js index d7e65f5c4bf..e9fa7dd09d1 100644 --- a/addons/web/static/src/js/fields/relational_fields.js +++ b/addons/web/static/src/js/fields/relational_fields.js @@ -588,6 +588,25 @@ var FieldX2Many = AbstractField.extend({ isSet: function () { return true; }, + /** + * @override + * @param {Object} record + * @param {OdooEvent} [ev] an event that triggered the reset action + * @returns {Deferred} + */ + reset: function (record, ev) { + if (ev && ev.target === this && ev.data.changes && this.view.arch.tag === 'tree' && this.editable) { + var command = ev.data.changes[this.name]; + if (command.operation === 'UPDATE') { + var state = record.data[this.name]; + var fieldNames = state.getFieldNames(); + this.renderer.confirmChange(state, command.id, fieldNames); + return $.when(); + } + } + return this._super.apply(this, arguments); + }, + //-------------------------------------------------------------------------- // Private @@ -833,15 +852,6 @@ var FieldOne2Many = FieldX2Many.extend({ */ reset: function (record, ev) { var self = this; - if (ev && ev.target === this && ev.data.changes && self.view.arch.tag === 'tree' && this.editable) { - var command = ev.data.changes[this.name]; - if (command.operation === 'UPDATE') { - var state = record.data[this.name]; - var fieldNames = state.getFieldNames(); - this.renderer.confirmChange(state, command.id, fieldNames); - return $.when(); - } - } return this._super.apply(this, arguments).then(function () { if (ev && ev.target === self && ev.data.changes && self.view.arch.tag === 'tree') { if (ev.data.changes[self.name].operation === 'CREATE') { diff --git a/addons/web/static/src/js/views/basic/basic_model.js b/addons/web/static/src/js/views/basic/basic_model.js index cde2d2479ac..17cb4d277c2 100644 --- a/addons/web/static/src/js/views/basic/basic_model.js +++ b/addons/web/static/src/js/views/basic/basic_model.js @@ -1847,8 +1847,17 @@ var BasicModel = AbstractModel.extend({ // of a 'delete' and a 'link' commands with the exact diff // because 1) performance-wise it doesn't change anything // and 2) to guard against concurrent updates (policy: force - // an complete override of the actual value of the m2m) + // a complete override of the actual value of the m2m) commands[fieldName].push(x2ManyCommands.replace_with(relIds)); + // generate update commands for records that have been + // updated (it may happen with editable lists) + _.each(relData, function (relRecord) { + if (!_.isEmpty(relRecord._changes)) { + var changes = self._generateChanges(relRecord); + var command = x2ManyCommands.update(relRecord.res_id, changes); + commands[fieldName].push(command); + } + }); } else if (type === 'one2many') { var removedIds = _.difference(list.res_ids, relIds); var addedIds = _.difference(relIds, list.res_ids); |
