diff --git a/addons/web/static/src/views/relational_model.js b/addons/web/static/src/views/relational_model.js index 4d953a020f0..eb9cf7327d0 100644 --- a/addons/web/static/src/views/relational_model.js +++ b/addons/web/static/src/views/relational_model.js @@ -30,6 +30,7 @@ const preloadedDataRegistry = registry.category("preloadedData"); const { CREATE, UPDATE, DELETE, FORGET, LINK_TO, DELETE_ALL, REPLACE_WITH } = x2ManyCommands; const QUICK_CREATE_FIELD_TYPES = ["char", "boolean", "many2one", "selection"]; +const AGGREGATABLE_FIELD_TYPES = ["float", "integer", "monetary"]; // types that can be aggregated in grouped views const DEFAULT_HANDLE_FIELD = "sequence"; const DEFAULT_QUICK_CREATE_FIELDS = { display_name: { string: "Display name", type: "char" }, @@ -2411,7 +2412,9 @@ export class DynamicGroupList extends DynamicList { default: { // other optional aggregated fields if (key in this.fields) { - groupParams.aggregates[key] = value; + if (AGGREGATABLE_FIELD_TYPES.includes(this.fields[key].type)) { + groupParams.aggregates[key] = value; + } } } } diff --git a/addons/web/static/tests/views/list_view_tests.js b/addons/web/static/tests/views/list_view_tests.js index aa5d588fc14..017ac527e4f 100644 --- a/addons/web/static/tests/views/list_view_tests.js +++ b/addons/web/static/tests/views/list_view_tests.js @@ -2777,6 +2777,36 @@ QUnit.module("Views", (hooks) => { assert.deepEqual(getNodesTextContent(target.querySelectorAll(".o_list_number")), cellVals); }); + QUnit.test("date field aggregates in grouped lists", async function (assert) { + // this test simulates a scenario where a date field has a group_operator + // and the web_read_group thus return a value for that field for each group + await makeView({ + type: "list", + resModel: "foo", + serverData, + groupBy: ["m2o"], + arch: ` + + + + `, + async mockRPC(route, args, performRPC) { + if (args.method === "web_read_group") { + const res = await performRPC(...arguments); + res.groups[0].date = "2021-03-15"; + res.groups[1].date = "2021-02-11"; + return res; + } + }, + }); + + assert.containsN(target, ".o_group_header", 2); + assert.deepEqual(getNodesTextContent(target.querySelectorAll(".o_group_header")), [ + `Value 1 (3) `, + `Value 2 (1) `, + ]); + }); + QUnit.test( "hide aggregated value in grouped lists when no data provided by RPC call", async function (assert) {