diff --git a/addons/sale_expense/__manifest__.py b/addons/sale_expense/__manifest__.py index 7126a91a46c..7b6f43e2c37 100644 --- a/addons/sale_expense/__manifest__.py +++ b/addons/sale_expense/__manifest__.py @@ -16,6 +16,7 @@ This module allow to reinvoice employee expense, by setting the SO directly on t 'depends': ['sale_management', 'hr_expense'], 'data': [ 'data/digest_data.xml', + 'views/assets.xml', 'views/product_view.xml', 'views/hr_expense_views.xml', 'views/sale_order_views.xml', diff --git a/addons/sale_expense/static/src/js/sale_order_many2one.js b/addons/sale_expense/static/src/js/sale_order_many2one.js new file mode 100644 index 00000000000..9d63d1ea800 --- /dev/null +++ b/addons/sale_expense/static/src/js/sale_order_many2one.js @@ -0,0 +1,21 @@ +odoo.define('sale_expense.sale_order_many2one', function (require) { +"use strict"; + +var FieldMany2One = require('web.relational_fields').FieldMany2One; +var FieldRegistry = require('web.field_registry'); + + +var OrderField = FieldMany2One.extend({ + /** + * hide the search more option from the dropdown menu + * @override + * @private + * @returns {Object} + */ + _manageSearchMore: function (values) { + return values; + } +}); +FieldRegistry.add('sale_order_many2one', OrderField); +return OrderField; +}); diff --git a/addons/sale_expense/static/tests/sale_order_many2one_tests.js b/addons/sale_expense/static/tests/sale_order_many2one_tests.js new file mode 100644 index 00000000000..62a8bb735c2 --- /dev/null +++ b/addons/sale_expense/static/tests/sale_order_many2one_tests.js @@ -0,0 +1,79 @@ +odoo.define('sale_expense.field_many_to_one_tests', function (require) { +"use strict"; + +var FormView = require('web.FormView'); +var testUtils = require('web.test_utils'); + +var createView = testUtils.createView; + + +QUnit.module('sale_expense', { + beforeEach: function () { + this.data = { + 'hr.expense': { + fields: { + name: { string: "Description", type: "char" }, + sale_order_id: { string: "Reinvoice Customer", type: 'many2one', relation: 'sale.order' }, + }, + records: [] + }, + 'sale.order': { + fields: { + name: { string: "Name", type: "char" }, + }, + records: [{ + id: 1, + name: "SO1", + }, { + id: 2, + name: "SO2", + }, { + id: 3, + name: "SO3" + }, { + id: 4, + name: "SO4" + }, { + id: 5, + name: "SO5" + }, { + id: 6, + name: "SO6" + }, { + id: 7, + name: "SO7" + }, { + id: 8, + name: "SO8" + }, { + id: 9, + name: "SO9" + }] + }, + }; + }, +}, function () { + QUnit.test('sale order many2one without search more option', async function (assert) { + assert.expect(3); + var form = await createView({ + View: FormView, + model: 'hr.expense', + data: this.data, + arch: + '
' + }); + var $dropdown = form.$('.o_field_many2one input').autocomplete('widget'); + await testUtils.fields.many2one.clickOpenDropdown('sale_order_id'); + assert.containsN($dropdown, 'li:not(.o_m2o_dropdown_option)', 8, 'autocomplete should contains 8 suggestions'); + assert.containsN($dropdown, 'li.o_m2o_dropdown_option', 1, 'autocomplete should contain only one option'); + assert.containsNone($dropdown, 'li.o_m2o_dropdown_option:contains("Search More...")', "Should not display the 'Search More... option'"); + form.destroy(); + }); +}); +}); diff --git a/addons/sale_expense/views/assets.xml b/addons/sale_expense/views/assets.xml new file mode 100644 index 00000000000..3b7f317b252 --- /dev/null +++ b/addons/sale_expense/views/assets.xml @@ -0,0 +1,14 @@ + +