diff --git a/addons/web/static/src/js/views/kanban/kanban_controller.js b/addons/web/static/src/js/views/kanban/kanban_controller.js index 7b12e6f034c..9e97ec40686 100644 --- a/addons/web/static/src/js/views/kanban/kanban_controller.js +++ b/addons/web/static/src/js/views/kanban/kanban_controller.js @@ -239,15 +239,16 @@ var KanbanController = BasicController.extend({ * @private */ _onButtonNew: function () { - var data = this.model.get(this.handle, {raw: true}); - if (data.groupedBy.length > 0 && data.count > 0 && this.on_create === 'quick_create') { + var state = this.model.get(this.handle, {raw: true}); + var hasColumns = state.groupedBy.length > 0 && state.data.length > 0; + if (hasColumns && this.on_create === 'quick_create') { // Activate the quick create in the first column this.renderer.addQuickCreate(); } else if (this.on_create && this.on_create !== 'quick_create') { // Execute the given action this.do_action(this.on_create, { on_close: this.reload.bind(this), - additional_context: data.context, + additional_context: state.context, }); } else { // Open the form view diff --git a/addons/web/static/tests/views/kanban_tests.js b/addons/web/static/tests/views/kanban_tests.js index f10c459baf2..9e6d6e9e30f 100644 --- a/addons/web/static/tests/views/kanban_tests.js +++ b/addons/web/static/tests/views/kanban_tests.js @@ -576,7 +576,6 @@ QUnit.module('Views', { return this._super.apply(this, arguments); }, }); - kanban.renderButtons(); assert.strictEqual(kanban.$('.o_kanban_group:first .o_kanban_record').length, 2, "there should be 2 records in first column"); @@ -608,6 +607,48 @@ QUnit.module('Views', { kanban.destroy(); }); + QUnit.test('quick create record in empty grouped kanban', function (assert) { + assert.expect(3); + + var kanban = createView({ + View: KanbanView, + model: 'partner', + data: this.data, + arch: '' + + '' + + '' + + '
' + + '
' + + '
', + groupBy: ['product_id'], + mockRPC: function (route, args) { + if (args.method === 'read_group') { + // override read_group to return empty groups, as this is + // the case for several models (e.g. project.task grouped + // by stage_id) + var result = [ + {__domain: [['product_id', '=', 3]], product_id_count: 0}, + {__domain: [['product_id', '=', 5]], product_id_count: 0}, + ]; + return $.when(result); + } + return this._super.apply(this, arguments); + }, + }); + + assert.strictEqual(kanban.$('.o_kanban_group').length, 2, + "there should be 2 columns"); + assert.strictEqual(kanban.$('.o_kanban_record').length, 0, + "both columns should be empty"); + + kanban.$buttons.find('.o-kanban-button-new').click(); + + assert.strictEqual(kanban.$('.o_kanban_group:first .o_kanban_quick_create').length, 1, + "should have opened the quick create in the first column"); + + kanban.destroy(); + }); + QUnit.test('many2many_tags in kanban views', function (assert) { assert.expect(12);