summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorLucas Perais (lpe) <lpe@odoo.com>2018-04-13 10:49:35 +0200
committerLucas Perais (lpe) <lpe@odoo.com>2018-04-17 13:43:46 +0200
commitdf02dc37fd2febd3fc899792ee25c80c0149d255 (patch)
tree99ba801510ba04076ba247e04c9a84574054511e /addons
parentb5d026be7f68f092fdded58429097f02d3fc44ae (diff)
[FIX] web: pivot: correctly save and restore groupbys on rows and cols
On a pivot view expand a field in column another one in row Then put a domain in the search view Save the whole thing (ir.filter) as favorite Before this commit, the ir.filter was not saved the right way when a domain was present (Let alone its restoration) This was because of - the internal default groupbys of the pivot model was not updated, and what we got in the params was overwritten by what existed before - a slight typo in the code made the row updated with the col values OPW 1835865 OPW 1829925 closes #24215
Diffstat (limited to 'addons')
-rw-r--r--addons/web/static/src/js/views/pivot/pivot_model.js3
-rw-r--r--addons/web/static/tests/views/pivot_tests.js41
2 files changed, 43 insertions, 1 deletions
diff --git a/addons/web/static/src/js/views/pivot/pivot_model.js b/addons/web/static/src/js/views/pivot/pivot_model.js
index 1c76c41ab71..6eddd44ffe7 100644
--- a/addons/web/static/src/js/views/pivot/pivot_model.js
+++ b/addons/web/static/src/js/views/pivot/pivot_model.js
@@ -250,6 +250,7 @@ var PivotModel = AbstractModel.extend({
this.data.colGroupBys = params.context.pivot_column_groupby || this.data.colGroupBys;
this.data.groupedBy = params.context.pivot_row_groupby || this.data.groupedBy;
this.data.measures = this._processMeasures(params.context.pivot_measures) || this.data.measures;
+ this.defaultGroupedBy = this.data.groupedBy.length ? this.data.groupedBy : this.defaultGroupedBy;
}
if ('domain' in params) {
this.data.domain = params.domain;
@@ -278,7 +279,7 @@ var PivotModel = AbstractModel.extend({
self._updateTree(old_col_root, self.data.main_col.root);
new_groupby_length = self._getHeaderDepth(self.data.main_col.root) - 1;
- self.data.main_row.groupbys = old_col_root.groupbys.slice(0, new_groupby_length);
+ self.data.main_row.groupbys = old_row_root.groupbys.slice(0, new_groupby_length);
});
},
/**
diff --git a/addons/web/static/tests/views/pivot_tests.js b/addons/web/static/tests/views/pivot_tests.js
index 3e77d7aa8b9..198fd0189ae 100644
--- a/addons/web/static/tests/views/pivot_tests.js
+++ b/addons/web/static/tests/views/pivot_tests.js
@@ -960,4 +960,45 @@ QUnit.module('Views', {
pivot.destroy();
});
+
+ QUnit.test('Row and column groupbys plus a domain', function (assert) {
+ assert.expect(3);
+
+ var pivot = createView({
+ View: PivotView,
+ model: "partner",
+ data: this.data,
+ arch: '<pivot>' +
+ '<field name="foo" type="measure"/>' +
+ '</pivot>',
+ });
+
+ // Set a column groupby
+ pivot.$('thead .o_pivot_header_cell_closed').click();
+ pivot.$('.o_field_selection li[data-field=customer] a').click();
+
+ // Set a Row groupby
+ pivot.$('tbody .o_pivot_header_cell_closed').click();
+ pivot.$('.o_pivot_field_menu li[data-field=product_id] a').click();
+
+ // Set a domain
+ pivot.update({domain: [['product_id', '=', 41]]});
+
+ var expectedContext = {pivot_column_groupby: ['customer'],
+ pivot_measures: ['foo'],
+ pivot_row_groupby: ['product_id']};
+
+ // Mock 'save as favorite'
+ assert.deepEqual(pivot.getContext(), expectedContext,
+ 'The pivot view should have the right context');
+
+ var $xpadHeader = pivot.$('tbody .o_pivot_header_cell_closed[data-original-title=Product]');
+ assert.equal($xpadHeader.length, 1,
+ 'There should be only one product line because of the domain');
+
+ assert.equal($xpadHeader.text(), 'xpad',
+ 'The product should be the right one');
+
+ pivot.destroy();
+ });
});});