From a026a9e9b17dccc40c80c1fa20943c8e4413eff7 Mon Sep 17 00:00:00 2001 From: "Hubert Van de Walle (huvw)" Date: Wed, 18 Oct 2023 18:01:53 +0200 Subject: [PATCH] [FIX] web: missing pivot measures when using favorites Steps to reproduce ================== - Go to budget analysis - Switch to the pivot view - Unselect the first three measures - Save the current search and set it as default - In the measures dropdown, there is only two measures remaining Cause of the issue ================== - When `context.pivot_measures` is used, the measures are computed from it and those that comes from the metaData are missing. opw-3544823 closes odoo/odoo#139315 X-original-commit: b11266cc377fa4753a0ee609258d9919f1ba5496 Signed-off-by: Julien Mougenot (jum) Signed-off-by: Hubert Van De Walle --- .../web/static/src/views/pivot/pivot_model.js | 18 ++++++----- .../static/tests/views/pivot_view_tests.js | 32 +++++++++++++++++++ 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/addons/web/static/src/views/pivot/pivot_model.js b/addons/web/static/src/views/pivot/pivot_model.js index 353efcbd592..e631e35c150 100644 --- a/addons/web/static/src/views/pivot/pivot_model.js +++ b/addons/web/static/src/views/pivot/pivot_model.js @@ -702,9 +702,8 @@ export class PivotModel extends Model { */ async load(searchParams) { this.searchParams = searchParams; - - const activeMeasures = - processMeasure(searchParams.context.pivot_measures) || this.metaData.activeMeasures; + const processedMeasures = processMeasure(searchParams.context.pivot_measures); + const activeMeasures = processedMeasures || this.metaData.activeMeasures; const metaData = this._buildMetaData({ activeMeasures }); if (!this.reload) { metaData.rowGroupBys = @@ -726,11 +725,14 @@ export class PivotModel extends Model { metaData.expandedColGroupBys = []; } - metaData.measures = computeReportMeasures( - metaData.fields, - metaData.fieldAttrs, - metaData.activeMeasures - ); + const allActivesMeasures = new Set(this.metaData.activeMeasures); + if (processedMeasures) { + processedMeasures.forEach((e) => allActivesMeasures.add(e)); + } + + metaData.measures = computeReportMeasures(metaData.fields, metaData.fieldAttrs, [ + ...allActivesMeasures, + ]); const config = { metaData, data: this.data }; return this._loadData(config); } diff --git a/addons/web/static/tests/views/pivot_view_tests.js b/addons/web/static/tests/views/pivot_view_tests.js index e7d628325f0..6060f329cc9 100644 --- a/addons/web/static/tests/views/pivot_view_tests.js +++ b/addons/web/static/tests/views/pivot_view_tests.js @@ -285,6 +285,38 @@ QUnit.module("Views", (hooks) => { ); }); + QUnit.test( + "all measures should be displayed with a pivot_measures context", + async function (assert) { + assert.expect(1); + + serverData.models.partner.fields.bouh = { + string: "bouh", + type: "integer", + group_operator: "sum", + }; + + await makeView({ + type: "pivot", + resModel: "partner", + serverData, + context: { pivot_measures: ["foo"] }, + arch: ` + + + + `, + }); + + await click(target.querySelector(".o_pivot_buttons button.dropdown-toggle")); + const measures = Array.from( + target.querySelectorAll(".o_pivot_buttons .dropdown-menu .dropdown-item") + ).map((e) => e.textContent); + + assert.deepEqual(measures, ["bouh", "Foo", "Count"]); + } + ); + QUnit.test("pivot rendering with widget", async function (assert) { await makeView({ type: "pivot",