diff --git a/addons/web/static/src/legacy/js/control_panel/groupby_menu.js b/addons/web/static/src/legacy/js/control_panel/groupby_menu.js index 0c47d9e566a..1052985eb91 100644 --- a/addons/web/static/src/legacy/js/control_panel/groupby_menu.js +++ b/addons/web/static/src/legacy/js/control_panel/groupby_menu.js @@ -43,7 +43,7 @@ odoo.define('web.GroupByMenu', function (require) { * @returns {boolean} */ _validateField(field) { - return (field.sortable || (field.type === "many2many" && field.store)) && + return (field.type === "many2many" ? field.store : field.sortable) && field.name !== "id" && GROUPABLE_TYPES.includes(field.type); } diff --git a/addons/web/static/tests/legacy/control_panel/groupby_menu_tests.js b/addons/web/static/tests/legacy/control_panel/groupby_menu_tests.js index 29e0be4f521..039c7a88b30 100644 --- a/addons/web/static/tests/legacy/control_panel/groupby_menu_tests.js +++ b/addons/web/static/tests/legacy/control_panel/groupby_menu_tests.js @@ -19,6 +19,7 @@ odoo.define('web.groupby_menu_tests', function (require) { float_field: { string: "Float", type: "float", group_operator: 'sum' }, foo: { string: "Foo", type: "char", store: true, sortable: true }, m2m: { string: "Many2Many", type: "many2many", store: true}, + m2m_not_stored: { string: "Many2Many not stored", type: "many2many" }, }; patchWithCleanup(browser, { setTimeout: (fn) => fn(), @@ -41,7 +42,11 @@ odoo.define('web.groupby_menu_tests', function (require) { }); QUnit.test('simple rendering with no groupby', async function (assert) { - assert.expect(6); + assert.expect(3); + + // Manually make m2m_not_stored to be sortable. + // Even if it's sortable, it should not be included in the add custom groupby options. + this.fields.m2m_not_stored.sortable = true; const params = { cpModelConfig: { searchMenuTypes }, @@ -56,10 +61,10 @@ odoo.define('web.groupby_menu_tests', function (require) { await cpHelpers.toggleAddCustomGroup(controlPanel); const optionEls = controlPanel.el.querySelectorAll('.o_add_custom_group_menu select option'); - assert.strictEqual(optionEls[0].innerText.trim(), 'Birthday'); - assert.strictEqual(optionEls[1].innerText.trim(), 'Date'); - assert.strictEqual(optionEls[2].innerText.trim(), 'Foo'); - assert.strictEqual(optionEls[3].innerText.trim(), 'Many2Many'); + assert.deepEqual( + [...optionEls].map((el) => el.innerText.trim()), + ['Birthday', 'Date', 'Foo', 'Many2Many'] + ); }); QUnit.test('simple rendering with a single groupby', async function (assert) {