diff options
| author | Julien Mougenot <jum@odoo.com> | 2020-04-20 10:01:57 +0000 |
|---|---|---|
| committer | Julien Mougenot <jum@odoo.com> | 2020-04-29 15:30:27 +0000 |
| commit | 6fc3bee255b4f2be9fe5a296eb81a1ae879d7282 (patch) | |
| tree | f380d288c45abc4004a37a7a10db315db57b60b0 /addons/web | |
| parent | ea143795e9064823e5bed2c7ef817c52d2a0dff8 (diff) | |
[FIX] web: search many2one fields with correct value
Before this commit, searching a many2one field in the search bar would create a
domain with a parsed version of the input string. However the parser of m2o fields
returns a number (ID) and would consistently return 'NaN'.
Now, raw values are taken as is when searching with many2one fields.
Task 2239254
closes odoo/odoo#50410
X-original-commit: bac74010daae868da474de9439bc7027d9206e38
Signed-off-by: Aaron Bohy (aab) <aab@odoo.com>
Signed-off-by: Julien Mougenot (jum) <jum@odoo.com>
Diffstat (limited to 'addons/web')
| -rw-r--r-- | addons/web/static/src/js/control_panel/search_bar.js | 27 | ||||
| -rw-r--r-- | addons/web/static/tests/control_panel/search_bar_tests.js | 44 |
2 files changed, 62 insertions, 9 deletions
diff --git a/addons/web/static/src/js/control_panel/search_bar.js b/addons/web/static/src/js/control_panel/search_bar.js index a56c3ea0973..a86e22a10b8 100644 --- a/addons/web/static/src/js/control_panel/search_bar.js +++ b/addons/web/static/src/js/control_panel/search_bar.js @@ -239,16 +239,25 @@ odoo.define('web.SearchBar', function (require) { const { type } = this.props.fields[source.fieldName]; const parser = field_utils.parse[type]; let parsedValue; - if (['date', 'datetime'].includes(type)) { - const parsedDate = parser(rawValue, { type }, { timezone: true }); - const dateFormat = type === 'datetime' ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD'; - const momentValue = moment(parsedDate, dateFormat); - if (!momentValue.isValid()) { - throw new Error('Invalid date'); + switch (type) { + case 'date': + case 'datetime': { + const parsedDate = parser(rawValue, { type }, { timezone: true }); + const dateFormat = type === 'datetime' ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD'; + const momentValue = moment(parsedDate, dateFormat); + if (!momentValue.isValid()) { + throw new Error('Invalid date'); + } + parsedValue = parsedDate.toJSON(); + break; + } + case 'many2one': { + parsedValue = rawValue; + break; + } + default: { + parsedValue = parser(rawValue); } - parsedValue = parsedDate.toJSON(); - } else { - parsedValue = parser(rawValue); } return parsedValue; } diff --git a/addons/web/static/tests/control_panel/search_bar_tests.js b/addons/web/static/tests/control_panel/search_bar_tests.js index f8181bc0cf8..e58c2c3ae6d 100644 --- a/addons/web/static/tests/control_panel/search_bar_tests.js +++ b/addons/web/static/tests/control_panel/search_bar_tests.js @@ -484,5 +484,49 @@ odoo.define('web.search_bar_tests', function (require) { actionManager.destroy(); }); + + QUnit.test('select autocompleted many2one', async function (assert) { + assert.expect(5); + + const archs = Object.assign({}, this.archs, { + 'partner,false,search': ` + <search> + <field name="foo"/> + <field name="birthday"/> + <field name="birth_datetime"/> + <field name="bar" operator="child_of"/> + </search>`, + }); + const actionManager = await createActionManager({ + actions: this.actions, + archs, + data: this.data, + async mockRPC(route, { domain }) { + if (route === '/web/dataset/search_read') { + assert.step(JSON.stringify(domain)); + } + return this._super(...arguments); + }, + }); + await actionManager.doAction(1); + + await cpHelpers.editSearch(actionManager, "rec"); + await testUtils.dom.click(actionManager.el.querySelector('.o_searchview_autocomplete li:last-child')); + + await cpHelpers.removeFacet(actionManager, 0); + + await cpHelpers.editSearch(actionManager, "rec"); + await testUtils.dom.click(actionManager.el.querySelector('.o_expand')); + await testUtils.dom.click(actionManager.el.querySelector('.o_searchview_autocomplete li.o_menu_item.o_indent')); + + assert.verifySteps([ + '[]', + '[["bar","child_of","rec"]]', // Incomplete string -> Name search + '[]', + '[["bar","child_of",1]]', // Suggestion select -> Specific ID + ]); + + actionManager.destroy(); + }); }); }); |
