From 683f29add12ccf5025eddb15fb0d86eca4b715c7 Mon Sep 17 00:00:00 2001 From: Mohammed Shekha Date: Mon, 21 Dec 2020 13:23:29 +0000 Subject: [PATCH] [FIX] web: No results to show item was not displayed in m2o before this commit: when m2o has can_create=false and user try to search something that doesn't exist then it should show 'No results to show' in m2o autocomplete, because of commit: https://github.com/odoo/odoo/commit/4f116a0f9be26b91d95e019cda1aa620faf6d620 this has been broken. after this commit: if user can not create m2o record and if user searches that doesn't exist in m2o model then it will display 'No results to show' task-2376435 closes odoo/odoo#78329 X-original-commit: a9e14acc3785c972bd037a8d4ca303c10dad265a Signed-off-by: Simon Genin (ges@odoo) --- .../src/legacy/js/fields/relational_fields.js | 10 +++---- .../web/static/src/legacy/scss/dropdown.scss | 4 +-- .../relational_fields/field_many2one_tests.js | 27 +++++++++++++++++++ 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/addons/web/static/src/legacy/js/fields/relational_fields.js b/addons/web/static/src/legacy/js/fields/relational_fields.js index b943a398aff..d02f46e17ad 100644 --- a/addons/web/static/src/legacy/js/fields/relational_fields.js +++ b/addons/web/static/src/legacy/js/fields/relational_fields.js @@ -663,13 +663,10 @@ var FieldMany2One = AbstractField.extend({ if (this.limit < values.length) { values = this._manageSearchMore(values, value, domain, context); } - if (!this.can_create) { - return values; - } // Additional options... - const canQuickCreate = !this.nodeOptions.no_quick_create; - const canCreateEdit = !this.nodeOptions.no_create_edit; + const canQuickCreate = this.can_create && !this.nodeOptions.no_quick_create; + const canCreateEdit = this.can_create && !this.nodeOptions.no_create_edit; if (value.length) { // "Quick create" option const nameExists = results.some((result) => result[1] === value); @@ -699,7 +696,8 @@ var FieldMany2One = AbstractField.extend({ // "No results" option if (!values.length) { values.push({ - label: _t("No results to show..."), + label: _t("No records"), + classname: 'o_m2o_no_result', }); } } else if (!this.value && (canQuickCreate || canCreateEdit)) { diff --git a/addons/web/static/src/legacy/scss/dropdown.scss b/addons/web/static/src/legacy/scss/dropdown.scss index d89e0c14a7f..a3a9b32e0e8 100644 --- a/addons/web/static/src/legacy/scss/dropdown.scss +++ b/addons/web/static/src/legacy/scss/dropdown.scss @@ -22,11 +22,11 @@ } } - &.o_m2o_dropdown_option, &.o_m2o_start_typing { + &.o_m2o_dropdown_option, &.o_m2o_start_typing, &.o_m2o_no_result { text-indent: $o-dropdown-hpadding * .5; } - &.o_m2o_start_typing { + &.o_m2o_start_typing, &.o_m2o_no_result { font-style: italic; cursor: default; a.ui-menu-item-wrapper, a.ui-state-active, a.ui-state-active:hover { diff --git a/addons/web/static/tests/legacy/fields/relational_fields/field_many2one_tests.js b/addons/web/static/tests/legacy/fields/relational_fields/field_many2one_tests.js index 5ef7d10c595..6e5a213a1fc 100644 --- a/addons/web/static/tests/legacy/fields/relational_fields/field_many2one_tests.js +++ b/addons/web/static/tests/legacy/fields/relational_fields/field_many2one_tests.js @@ -2585,6 +2585,33 @@ QUnit.module('fields', {}, function () { form.destroy(); }); + QUnit.test('many2one with can_create=false shows no result item when searched something that doesn\'t exist', async function (assert) { + assert.expect(2); + + const form = await createView({ + View: FormView, + model: 'partner', + data: this.data, + arch: + `
+ + + +
`, + }); + + await testUtils.dom.click(form.$('.o_field_many2one input')); + await testUtils.fields.editAndTrigger(form.$('.o_field_many2one[name="product_id"] input'), + 'abc', 'keydown'); + await testUtils.nextTick(); + assert.strictEqual($('.ui-autocomplete .o_m2o_dropdown_option:contains(Create)').length, 0, + "there shouldn't be any option to search and create"); + assert.strictEqual($('.ui-autocomplete .ui-menu-item a:contains(No records)').length, 1, + "there should be option for 'No records'"); + + form.destroy(); + }); + QUnit.test('pressing enter in a m2o in an editable list', async function (assert) { assert.expect(8); var M2O_DELAY = relationalFields.FieldMany2One.prototype.AUTOCOMPLETE_DELAY;