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 be288f1126d..7a4b60a4446 100644 --- a/addons/web/static/src/js/views/kanban/kanban_controller.js +++ b/addons/web/static/src/js/views/kanban/kanban_controller.js @@ -8,9 +8,9 @@ odoo.define('web.KanbanController', function (require) { */ var BasicController = require('web.BasicController'); -var core = require('web.core'); var Context = require('web.Context'); -var form_common = require('web.view_dialogs'); +var core = require('web.core'); +var view_dialogs = require('web.view_dialogs'); var _t = core._t; var qweb = core.qweb; @@ -297,38 +297,37 @@ var KanbanController = BasicController.extend({ _onQuickCreateRecord: function (event) { var self = this; var column = event.target; - var data = this.model.get(column.db_id); + var name = event.data.value; + var state = this.model.get(this.handle, {raw: true}); + var columnState = this.model.get(column.db_id, {raw: true}); + var context = columnState.getContext(); + context['default_' + state.groupedBy[0]] = columnState.res_id; + + this._rpc(state.model, "name_create") + .args([name]) + .withContext(context) + .exec() + .then(add_record) + .fail(function (error, event) { + event.preventDefault(); + new view_dialogs.FormViewDialog(self, { + res_model: state.model, + context: _.extend({default_name: name}, context), + title: _t("Create"), + disable_multiple_selection: true, + on_saved: function(record) { + add_record([record.res_id]); + }, + }).open(); + }); + function add_record(records) { return self.model - .addRecordToGroup(data.id, records[0]) + .addRecordToGroup(columnState.id, records[0]) .then(function (db_id) { column.addRecord(self.model.get(db_id), {position: 'before'}); }); } - data.context['default_' + data.groupedBy[0]] = column.id; - - this._rpc(data.model, "name_create") - .args([event.data.value]) - .withContext(data.context) - .exec() - .then( - add_record, - function (event) { - event.preventDefault(); - var popup = new form_common.SelectCreatePopup(this); - popup.select_element( - data.model, - { - title: _t("Create: "), - initial_view: "form", - disable_multiple_selection: true, - }, - [], - { default_name: event.data.value } - ); - popup.on("elements_selected", null, add_record); - } - ); }, /** * @param {OdooEvent} event diff --git a/addons/web/static/test/views/kanban_tests.js b/addons/web/static/test/views/kanban_tests.js index 7043c1690d4..25b3504eb89 100644 --- a/addons/web/static/test/views/kanban_tests.js +++ b/addons/web/static/test/views/kanban_tests.js @@ -357,6 +357,69 @@ QUnit.module('Views', { kanban.destroy(); }); + QUnit.test('quick create fail in grouped', function (assert) { + assert.expect(7); + + var kanban = createView({ + View: KanbanView, + model: 'partner', + data: this.data, + arch: '' + + '' + + '' + + '
' + + '
' + + '
', + archs: { + 'partner,false,form': '
' + + '' + + '' + + '', + }, + groupBy: ['product_id'], + mockRPC: function (route, args) { + if (args.method === 'name_create') { + return $.Deferred().reject({ + code: 200, + data: {}, + message: 'Odoo server error', + }); + } + 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"); + + kanban.$buttons.find('.o-kanban-button-new').click(); // Click on 'Create' + assert.ok(kanban.$('.o_kanban_group:first() > div:nth(1)').hasClass('o_kanban_quick_create'), + "clicking on create should open the quick_create in the first column"); + + kanban.$('.o_kanban_quick_create input') + .val('test') + .trigger($.Event('keypress', {keyCode: $.ui.keyCode.ENTER})); + + assert.strictEqual($('.modal .o_form_view.o_form_editable').length, 1, + "a form view dialog should have been opened (in edit)"); + assert.strictEqual($('.modal .o_form_field_many2one input').val(), 'hello', + "the correct product_id should already be set"); + + // specify a name and save + $('.modal .o_form_input[name=foo]').val('test').trigger('input'); + $('.modal-footer .btn-primary').click(); + + assert.strictEqual($('.modal').length, 0, "the modal should be closed"); + assert.strictEqual(kanban.$('.o_kanban_group:first .o_kanban_record').length, 3, + "there should be 3 records in first column"); + var $firstRecord = kanban.$('.o_kanban_group:first .o_kanban_record:first'); + assert.strictEqual($firstRecord.text(), 'test', + "the first record of the first column should be the new one"); + + kanban.destroy(); + }); + QUnit.test('many2manytags are correctly fetched and displayed', function (assert) { assert.expect(3);