[FIX] web: reload progressbar values after archiving records
Before this, the progressbar values were not updated (both count and progress) after archiving all the records of a column. Multiple things have been done here to update it. Firstly, a optimization had been done to avoid reloading the progressbar when updating a column ; this optimization was not correct due to this precise use case. This will update the progressbar. Secondly, the `aggregateValues` are reset when putting empty groups back in the datapoint. This attribute is used to compute the counter if a `sum_field` is set on the progressbar widget. It needs to be reset because the loop that computes it won't iterate on empty groups. Eventually, the mockRPC of the progressbar route was not taking the `group_by` argument into account (probably a typo).
This commit is contained in:
@@ -3842,6 +3842,10 @@ var BasicModel = AbstractModel.extend({
|
||||
var emptyGroupsIDs = _.difference(_.pluck(previousGroups, 'id'), list.data);
|
||||
_.each(emptyGroupsIDs, function (groupID) {
|
||||
list.data.push(groupID);
|
||||
var emptyGroup = self.localData[groupID];
|
||||
// this attribute hasn't been updated in the previous
|
||||
// loop for empty groups
|
||||
emptyGroup.aggregateValues = {};
|
||||
});
|
||||
}
|
||||
return $.when.apply($, defs).then(function () {
|
||||
|
||||
@@ -348,9 +348,8 @@ var KanbanModel = BasicModel.extend({
|
||||
return $.when();
|
||||
},
|
||||
/**
|
||||
* Reloads all progressbar data if the given id is a record's one. This is
|
||||
* done after given deferred and insures that the given deferred's result is
|
||||
* not lost.
|
||||
* Reloads all progressbar data. This is done after given deferred and
|
||||
* insures that the given deferred's result is not lost.
|
||||
*
|
||||
* @private
|
||||
* @param {string} recordID
|
||||
@@ -359,9 +358,6 @@ var KanbanModel = BasicModel.extend({
|
||||
*/
|
||||
_reloadProgressBarGroupFromRecord: function (recordID, def) {
|
||||
var element = this.localData[recordID];
|
||||
if (element.type !== 'record') {
|
||||
return def;
|
||||
}
|
||||
|
||||
// If we updated a record, then we must potentially update columns'
|
||||
// progressbars, so we need to load groups info again
|
||||
|
||||
@@ -740,7 +740,7 @@ var MockServer = Class.extend({
|
||||
*/
|
||||
_mockReadProgressBar: function (model, kwargs) {
|
||||
var domain = kwargs.domain;
|
||||
var groupBy = kwargs.groupBy;
|
||||
var groupBy = kwargs.group_by;
|
||||
var progress_bar = kwargs.progress_bar;
|
||||
|
||||
var records = this._getRecords(model, domain || []);
|
||||
|
||||
@@ -2550,6 +2550,47 @@ QUnit.module('Views', {
|
||||
kanban.destroy();
|
||||
});
|
||||
|
||||
QUnit.test('column progressbars on archiving records update counter', function (assert) {
|
||||
assert.expect(4);
|
||||
|
||||
// add active field on partner model and make all records active
|
||||
this.data.partner.fields.active = {string: 'Active', type: 'char', default: true};
|
||||
|
||||
var kanban = createView({
|
||||
View: KanbanView,
|
||||
model: 'partner',
|
||||
data: this.data,
|
||||
arch:
|
||||
'<kanban>' +
|
||||
'<field name="active"/>' +
|
||||
'<field name="bar"/>' +
|
||||
'<field name="int_field"/>' +
|
||||
'<progressbar field="foo" colors=\'{"yop": "success", "gnap": "warning", "blip": "danger"}\' sum_field="int_field"/>' +
|
||||
'<templates><t t-name="kanban-box">' +
|
||||
'<div>' +
|
||||
'<field name="name"/>' +
|
||||
'</div>' +
|
||||
'</t></templates>' +
|
||||
'</kanban>',
|
||||
groupBy: ['bar'],
|
||||
});
|
||||
|
||||
assert.strictEqual(kanban.$('.o_kanban_group:eq(1) .o_kanban_counter_side').text(), "36",
|
||||
"counter should contain the correct value");
|
||||
assert.strictEqual(kanban.$('.o_kanban_group:eq(1) .o_kanban_counter_progress > .progress-bar:first').data('originalTitle'), "1 yop",
|
||||
"the counter progressbars should be correctly displayed");
|
||||
|
||||
// archive all records of the second columns
|
||||
kanban.$('.o_kanban_group:eq(1) .o_column_archive').click();
|
||||
|
||||
assert.strictEqual(kanban.$('.o_kanban_group:eq(1) .o_kanban_counter_side').text(), "0",
|
||||
"counter should contain the correct value");
|
||||
assert.strictEqual(kanban.$('.o_kanban_group:eq(1) .o_kanban_counter_progress > .progress-bar:first').data('originalTitle'), "0 yop",
|
||||
"the counter progressbars should have been correctly updated");
|
||||
|
||||
kanban.destroy();
|
||||
});
|
||||
|
||||
QUnit.test('drag & drop records grouped by m2o with progressbar', function (assert) {
|
||||
assert.expect(4);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user