From ac6db521730e1bd8df8a1e09f92ddd02b4cb9917 Mon Sep 17 00:00:00 2001 From: Pierre Rousseau Date: Fri, 27 Jan 2023 12:49:49 +0000 Subject: [PATCH] [FIX] web: pivot view: use correct label for headers Before this revision, the pivot view used the wrong label for the headers in the case of the group by value was "0". This was due to the use of the falsy value of the group by value to determine if the label should be used or if the label should be "Total". closes odoo/odoo#112571 X-original-commit: 97db8c975643bb79e95f7506da03c7142651a3cf Signed-off-by: Mathieu Duckerts-Antoine Signed-off-by: Pierre Rousseau (pro) --- .../web/static/src/views/pivot/pivot_model.js | 10 ++++- .../static/tests/views/pivot_view_tests.js | 42 +++++++++++++++++++ 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/addons/web/static/src/views/pivot/pivot_model.js b/addons/web/static/src/views/pivot/pivot_model.js index 8fb8081ca0b..94e17f1fb44 100644 --- a/addons/web/static/src/views/pivot/pivot_model.js +++ b/addons/web/static/src/views/pivot/pivot_model.js @@ -1220,7 +1220,10 @@ export class PivotModel extends Model { rowIndex === 0 ? undefined : fields[colGroupBys[rowIndex - 1].split(":")[0]].string, - title: group.labels[group.labels.length - 1] || _t("Total"), + title: + group.labels.length + ? group.labels[group.labels.length - 1] + : _t("Total"), width: leafCount * measureCount * (2 * originCount - 1), }; row.push(cell); @@ -1271,7 +1274,10 @@ export class PivotModel extends Model { let rows = []; const group = tree.root; const rowGroupId = [group.values, []]; - const title = group.labels[group.labels.length - 1] || this.env._t("Total"); + const title = + group.labels.length + ? group.labels[group.labels.length - 1] + : this.env._t("Total"); const indent = group.labels.length; const isLeaf = !tree.directSubTrees.size; const rowGroupBys = this.metaData.fullRowGroupBys; diff --git a/addons/web/static/tests/views/pivot_view_tests.js b/addons/web/static/tests/views/pivot_view_tests.js index 50eef86b5af..7581bc9bba9 100644 --- a/addons/web/static/tests/views/pivot_view_tests.js +++ b/addons/web/static/tests/views/pivot_view_tests.js @@ -279,6 +279,48 @@ QUnit.module("Views", (hooks) => { ); }); + QUnit.test("Pivot with integer row group by with 0 as header", async function (assert) { + serverData.models.partner.records[0].foo = 0; + serverData.models.partner.records[1].foo = 0; + serverData.models.partner.records[2].foo = 0; + serverData.models.partner.records[3].foo = 0; + + const pivot = await makeView({ + type: "pivot", + resModel: "partner", + serverData, + arch: ` + + + + `, + }); + const { rows } = pivot.model.getTable(); + assert.strictEqual(rows.length, 2); + assert.strictEqual(rows[0].title, "Total"); + assert.strictEqual(rows[1].title, 0); + }); + + QUnit.test("Pivot with integer col group by with 0 as header", async function (assert) { + serverData.models.partner.records[0].foo = 0; + serverData.models.partner.records[1].foo = 0; + serverData.models.partner.records[2].foo = 0; + serverData.models.partner.records[3].foo = 0; + + const pivot = await makeView({ + type: "pivot", + resModel: "partner", + serverData, + arch: ` + + + + `, + }); + const { headers } = pivot.model.getTable(); + assert.strictEqual(headers[1][0].title, 0); + }); + QUnit.test( "pivot rendering with string attribute on non stored field", async function (assert) {