summaryrefslogtreecommitdiff
path: root/addons/web/static/src
diff options
context:
space:
mode:
authorAaron Bohy <aab@odoo.com>2017-08-14 15:58:48 +0200
committerAaron Bohy <aab@odoo.com>2017-08-16 13:03:33 +0200
commitab2e71d9fc2486f248fd6518237ac4b54cf45bd5 (patch)
tree051dfe1bc9a6c0c27c2572bc13367a59083b1156 /addons/web/static/src
parentb5b8e66b900e78dc3228946e15d517f91a214703 (diff)
[FIX] web: Kanban: notify environment of ids changes
In grouped Kanban views, the list of res_ids of the displayed records may change for several reasons: 1) 'Load more' is clicked for a column 2) a record is moved from a column to another 3) a record is moved inside a column (resequence) 4) a column is moved 5) a column is (un)archived 6) a column is (un)folded 7) a record is created/destroyed directly from the Kanban. When this happens, the environment must be notified of the new list of res_ids (the order matters). Before this rev., this wasn't the case. As a consequence, when a record was opened in a Form view after one of the 5 operations above, the pager could display unexpected values. Note that before the new views, cases 2, 3 and 4 weren't handled, and case 7 already worked before this commit.
Diffstat (limited to 'addons/web/static/src')
-rw-r--r--addons/web/static/src/js/views/basic/basic_model.js1
-rw-r--r--addons/web/static/src/js/views/kanban/kanban_controller.js13
-rw-r--r--addons/web/static/src/js/views/kanban/kanban_model.js14
3 files changed, 26 insertions, 2 deletions
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 e8409487abc..d55109bde01 100644
--- a/addons/web/static/src/js/views/basic/basic_model.js
+++ b/addons/web/static/src/js/views/basic/basic_model.js
@@ -3360,6 +3360,7 @@ var BasicModel = AbstractModel.extend({
list.data = data;
list.res_ids = ids;
}
+ self._updateParentResIDs(list);
return list;
});
},
diff --git a/addons/web/static/src/js/views/kanban/kanban_controller.js b/addons/web/static/src/js/views/kanban/kanban_controller.js
index 6870dbbbe24..91ada3a2629 100644
--- a/addons/web/static/src/js/views/kanban/kanban_controller.js
+++ b/addons/web/static/src/js/views/kanban/kanban_controller.js
@@ -107,7 +107,10 @@ var KanbanController = BasicController.extend({
* @returns {Deferred}
*/
_resequenceRecords: function (column_id, ids) {
- return this.model.resequence(this.modelName, ids, column_id);
+ var self = this;
+ return this.model.resequence(this.modelName, ids, column_id).then(function () {
+ self._updateEnv();
+ });
},
/**
* In grouped mode, set 'Create' button as btn-default if there is no column
@@ -181,6 +184,7 @@ var KanbanController = BasicController.extend({
.then(function (db_id) {
var data = self.model.get(db_id);
self.renderer.updateColumn(db_id, data);
+ self._updateEnv();
});
}
},
@@ -218,6 +222,7 @@ var KanbanController = BasicController.extend({
this.model.loadMore(column.db_id).then(function (db_id) {
var data = self.model.get(db_id);
self.renderer.updateColumn(db_id, data);
+ self._updateEnv();
});
},
/**
@@ -325,9 +330,12 @@ var KanbanController = BasicController.extend({
* @param {OdooEvent} event
*/
_onResequenceColumn: function (event) {
+ var self = this;
var state = this.model.get(this.handle, {raw: true});
var model = state.fields[state.groupedBy[0]].relation;
- this.model.resequence(model, event.data.ids, this.handle);
+ this.model.resequence(model, event.data.ids, this.handle).then(function () {
+ self._updateEnv();
+ });
},
/**
* @param {OdooEvent} event
@@ -338,6 +346,7 @@ var KanbanController = BasicController.extend({
this.model.toggleGroup(column.db_id).then(function (db_id) {
var data = self.model.get(db_id);
self.renderer.updateColumn(db_id, data);
+ self._updateEnv();
});
},
/**
diff --git a/addons/web/static/src/js/views/kanban/kanban_model.js b/addons/web/static/src/js/views/kanban/kanban_model.js
index 91e4801d241..e21a1376e51 100644
--- a/addons/web/static/src/js/views/kanban/kanban_model.js
+++ b/addons/web/static/src/js/views/kanban/kanban_model.js
@@ -147,6 +147,7 @@ var KanbanModel = BasicModel.extend({
return this.notifyChanges(recordID, changes).then(function () {
return self.save(recordID);
}).then(function () {
+ var resID = self.localData[recordID].res_id;
// Remove record from its current group
var old_group;
for (var i = 0; i < parent.data.length; i++) {
@@ -155,11 +156,14 @@ var KanbanModel = BasicModel.extend({
if (index >= 0) {
old_group.data.splice(index, 1);
old_group.count--;
+ old_group.res_ids = _.without(old_group.res_ids, resID);
+ self._updateParentResIDs(old_group);
break;
}
}
// Add record to its new group
new_group.data.push(recordID);
+ new_group.res_ids.push(resID);
new_group.count++;
return [old_group.id, new_group.id];
});
@@ -197,6 +201,16 @@ var KanbanModel = BasicModel.extend({
data.data = _.sortBy(data.data, function (d) {
return _.indexOf(resIDs, self.localData[d].res_id);
});
+ data.res_ids = [];
+ _.each(data.data, function (d) {
+ var dataPoint = self.localData[d];
+ if (dataPoint.type === 'record') {
+ data.res_ids.push(dataPoint.res_id);
+ } else {
+ data.res_ids = data.res_ids.concat(dataPoint.res_ids);
+ }
+ });
+ self._updateParentResIDs(data);
return parentID;
});
},