diff --git a/addons/web/static/src/views/list/list_renderer.js b/addons/web/static/src/views/list/list_renderer.js index 72d4cc81916..aa0fc36b19c 100644 --- a/addons/web/static/src/views/list/list_renderer.js +++ b/addons/web/static/src/views/list/list_renderer.js @@ -527,6 +527,17 @@ export class ListRenderer extends Component { return aggregates; } + formatAggregateValue(group, column) { + const { widget, type, rawAttrs } = column; + const aggregateValue = group.aggregates[column.name]; + const formatter = formatters.get(widget, false) || formatters.get(type, false); + const formatOptions = { + digits: rawAttrs.digits ? JSON.parse(rawAttrs.digits) : undefined, + escape: true, + }; + return formatter ? formatter(aggregateValue, formatOptions) : aggregateValue; + } + getGroupLevel(group) { return this.props.list.groupBy.length - group.list.groupBy.length - 1; } diff --git a/addons/web/static/src/views/list/list_renderer.xml b/addons/web/static/src/views/list/list_renderer.xml index d2f32c704da..b791eb54623 100644 --- a/addons/web/static/src/views/list/list_renderer.xml +++ b/addons/web/static/src/views/list/list_renderer.xml @@ -160,7 +160,7 @@ - + diff --git a/addons/web/static/tests/views/list_view_tests.js b/addons/web/static/tests/views/list_view_tests.js index 7680a04d910..379e7332840 100644 --- a/addons/web/static/tests/views/list_view_tests.js +++ b/addons/web/static/tests/views/list_view_tests.js @@ -14619,4 +14619,21 @@ QUnit.module("Views", (hooks) => { assert.containsN(target, ".o_data_row", 3); }); + + QUnit.test("Formatted group operator", async function (assert) { + serverData.models.foo.records[0].qux = 0.4; + serverData.models.foo.records[1].qux = 0.2; + serverData.models.foo.records[2].qux = 0.01; + serverData.models.foo.records[3].qux = 0.48; + await makeView({ + type: "list", + resModel: "foo", + serverData, + arch: '', + groupBy: ["bar"], + }); + const [td1, td2] = target.querySelectorAll("td.o_list_number"); + assert.strictEqual(td1.textContent, "48%"); + assert.strictEqual(td2.textContent, "61%"); + }); });