summaryrefslogtreecommitdiff
path: root/addons/web/static/src
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/static/src')
-rw-r--r--addons/web/static/src/js/fields/relational_fields.js28
-rw-r--r--addons/web/static/src/js/views/basic/basic_model.js11
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);