diff --git a/addons/web/static/src/views/kanban/kanban_controller.js b/addons/web/static/src/views/kanban/kanban_controller.js index 442478af692..a0ea23a47ad 100644 --- a/addons/web/static/src/views/kanban/kanban_controller.js +++ b/addons/web/static/src/views/kanban/kanban_controller.js @@ -249,7 +249,13 @@ export class KanbanController extends Component { if (!create) { return false; } - return list.isGrouped ? list.groups.length > 0 || !createGroup : true; + if (list.isGrouped) { + if (list.groupByField.type !== "many2one") { + return true; + } + return list.groups.length || !createGroup; + } + return true; } get canQuickCreate() { diff --git a/addons/web/static/tests/views/kanban/kanban_view_tests.js b/addons/web/static/tests/views/kanban/kanban_view_tests.js index ab5aeaaf520..076abc679d3 100644 --- a/addons/web/static/tests/views/kanban/kanban_view_tests.js +++ b/addons/web/static/tests/views/kanban/kanban_view_tests.js @@ -592,6 +592,35 @@ QUnit.module("Views", (hooks) => { assert.verifySteps(["rendered"]); }); + QUnit.test("basic grouped rendering with no record", async (assert) => { + serverData.models.partner.records = []; + + await makeView({ + type: "kanban", + resModel: "partner", + serverData, + arch: ` + + + + +
+ +
+
+
+
`, + groupBy: ["bar"], + }); + assert.containsOnce(target, ".o_kanban_grouped"); + assert.containsOnce(target, ".o_view_nocontent"); + assert.containsOnce( + target, + ".o_control_panel_main_buttons .d-none.d-xl-inline-flex button.o-kanban-button-new", + "There should be a 'New' button even though there is no column when groupby is not a many2one" + ); + }); + QUnit.test( "basic grouped rendering with active field (archivable by default)", async (assert) => {