diff --git a/addons/account/views/account_journal_dashboard_view.xml b/addons/account/views/account_journal_dashboard_view.xml index 0908fe41964..80b80c15f16 100644 --- a/addons/account/views/account_journal_dashboard_view.xml +++ b/addons/account/views/account_journal_dashboard_view.xml @@ -107,7 +107,7 @@ Reconciliation
- Reconciliation Models + Reconciliation Models
diff --git a/addons/account/views/account_journal_views.xml b/addons/account/views/account_journal_views.xml index da59fad4dbb..f446d3490f7 100644 --- a/addons/account/views/account_journal_views.xml +++ b/addons/account/views/account_journal_views.xml @@ -34,7 +34,7 @@
diff --git a/addons/crm/views/res_partner_views.xml b/addons/crm/views/res_partner_views.xml index 5f09112bc10..933fc1fdf59 100644 --- a/addons/crm/views/res_partner_views.xml +++ b/addons/crm/views/res_partner_views.xml @@ -39,7 +39,7 @@ name="action_view_opportunity" icon="fa-star" groups="sales_team.group_sale_salesman" - context="{'default_partner_id': active_id, 'default_type':'opportunity'}"> + context="{'default_partner_id': id, 'default_type':'opportunity'}"> diff --git a/addons/event/views/event_event_views.xml b/addons/event/views/event_event_views.xml index 85655d46376..6f695d0188d 100644 --- a/addons/event/views/event_event_views.xml +++ b/addons/event/views/event_event_views.xml @@ -14,7 +14,7 @@
@@ -42,7 +42,7 @@ type="action" class="oe_stat_button" icon="fa-mobile" - context="{'default_event_id': active_id}"> + context="{'default_event_id': id}">
Registration Desk
diff --git a/addons/event/views/event_tag_views.xml b/addons/event/views/event_tag_views.xml index b7367350a60..ef697e892c2 100644 --- a/addons/event/views/event_tag_views.xml +++ b/addons/event/views/event_tag_views.xml @@ -24,7 +24,7 @@

- + diff --git a/addons/gamification/views/gamification_badge_views.xml b/addons/gamification/views/gamification_badge_views.xml index a93180ca8df..59be2bfdd02 100644 --- a/addons/gamification/views/gamification_badge_views.xml +++ b/addons/gamification/views/gamification_badge_views.xml @@ -89,7 +89,7 @@ - + diff --git a/addons/hr/views/hr_employee_views.xml b/addons/hr/views/hr_employee_views.xml index 5943da1864d..c77e23841dd 100644 --- a/addons/hr/views/hr_employee_views.xml +++ b/addons/hr/views/hr_employee_views.xml @@ -198,7 +198,7 @@ - + diff --git a/addons/hr_attendance/views/hr_employee_view.xml b/addons/hr_attendance/views/hr_employee_view.xml index 198f4b28765..587a55ef66f 100644 --- a/addons/hr_attendance/views/hr_employee_view.xml +++ b/addons/hr_attendance/views/hr_employee_view.xml @@ -31,7 +31,7 @@ icon="fa-history" type="action" invisible="total_overtime == 0.0" - context="{'search_default_employee_id': active_id}" + context="{'search_default_employee_id': id}" groups="hr_attendance.group_hr_attendance_user">
diff --git a/addons/hr_holidays/views/hr_views.xml b/addons/hr_holidays/views/hr_views.xml index 1ba3b805242..d928483343d 100644 --- a/addons/hr_holidays/views/hr_views.xml +++ b/addons/hr_holidays/views/hr_views.xml @@ -173,7 +173,7 @@
-
diff --git a/addons/lunch/views/lunch_product_views.xml b/addons/lunch/views/lunch_product_views.xml index f6bb5329124..ff65717920f 100644 --- a/addons/lunch/views/lunch_product_views.xml +++ b/addons/lunch/views/lunch_product_views.xml @@ -226,7 +226,7 @@
diff --git a/addons/mail_group/views/mail_group_views.xml b/addons/mail_group/views/mail_group_views.xml index 748ad4aac2f..1e0f896e06b 100644 --- a/addons/mail_group/views/mail_group_views.xml +++ b/addons/mail_group/views/mail_group_views.xml @@ -64,7 +64,7 @@
diff --git a/addons/mrp/views/mrp_workcenter_views.xml b/addons/mrp/views/mrp_workcenter_views.xml index b1685bc71ec..1fb4f106354 100644 --- a/addons/mrp/views/mrp_workcenter_views.xml +++ b/addons/mrp/views/mrp_workcenter_views.xml @@ -302,7 +302,7 @@
@@ -65,7 +65,7 @@
-
@@ -82,7 +82,7 @@
diff --git a/addons/payment/views/res_partner_views.xml b/addons/payment/views/res_partner_views.xml index f3ae16144af..53a6bbed775 100644 --- a/addons/payment/views/res_partner_views.xml +++ b/addons/payment/views/res_partner_views.xml @@ -12,7 +12,7 @@
diff --git a/addons/project/views/project_sharing_project_task_views.xml b/addons/project/views/project_sharing_project_task_views.xml index 087bb14e480..3c01d609251 100644 --- a/addons/project/views/project_sharing_project_task_views.xml +++ b/addons/project/views/project_sharing_project_task_views.xml @@ -204,7 +204,7 @@ diff --git a/addons/purchase/views/product_views.xml b/addons/purchase/views/product_views.xml index abb6c31bffa..486d7d4f312 100644 --- a/addons/purchase/views/product_views.xml +++ b/addons/purchase/views/product_views.xml @@ -43,7 +43,7 @@ - + purchase.group_purchase_manager @@ -77,6 +77,9 @@ {'default_product_tmpl_id': product_tmpl_id, 'product_template_invisible_variant': True, 'tree_view_ref':'purchase.product_supplierinfo_tree_view2'} + + {'model': 'product.product', 'active_id': id, 'tree_view_ref':'purchase.product_supplierinfo_tree_view2'} + diff --git a/addons/sale_product_configurator/views/product_template_views.xml b/addons/sale_product_configurator/views/product_template_views.xml index cc13d7bc67b..32d407e2db7 100644 --- a/addons/sale_product_configurator/views/product_template_views.xml +++ b/addons/sale_product_configurator/views/product_template_views.xml @@ -13,7 +13,7 @@ diff --git a/addons/sale_project/views/project_task_views.xml b/addons/sale_project/views/project_task_views.xml index 7c879808b15..6d279810c0c 100644 --- a/addons/sale_project/views/project_task_views.xml +++ b/addons/sale_project/views/project_task_views.xml @@ -59,8 +59,8 @@ invisible="not display_sales_stat_buttons or sale_order_count == 0" groups="sales_team.group_sale_salesman_all_leads" context="{ - 'create_for_project_id': active_id, - 'default_project_id': active_id, + 'create_for_project_id': id, + 'default_project_id': id, 'default_partner_id': partner_id }">
@@ -80,8 +80,8 @@ invisible="not display_sales_stat_buttons or sale_order_count != 0" groups="sales_team.group_sale_salesman_all_leads" context="{ - 'create_for_project_id': active_id, - 'default_project_id': active_id, + 'create_for_project_id': id, + 'default_project_id': id, 'default_partner_id': partner_id }">
diff --git a/addons/sale_timesheet/views/project_task_views.xml b/addons/sale_timesheet/views/project_task_views.xml index 98bc0ae1883..ae381d78d90 100644 --- a/addons/sale_timesheet/views/project_task_views.xml +++ b/addons/sale_timesheet/views/project_task_views.xml @@ -7,10 +7,10 @@ - {'create_for_project_id': active_id, 'default_project_id': active_id, 'default_partner_id': partner_id, 'default_analytic_account_id': analytic_account_id} + {'create_for_project_id': id, 'default_project_id': id, 'default_partner_id': partner_id, 'default_analytic_account_id': analytic_account_id} - {'create_for_project_id': active_id, 'default_project_id': active_id, 'default_partner_id': partner_id, 'default_analytic_account_id': analytic_account_id} + {'create_for_project_id': id, 'default_project_id': id, 'default_partner_id': partner_id, 'default_analytic_account_id': analytic_account_id} diff --git a/addons/sales_team/views/crm_team_views.xml b/addons/sales_team/views/crm_team_views.xml index 717347af5d9..993e93995f1 100644 --- a/addons/sales_team/views/crm_team_views.xml +++ b/addons/sales_team/views/crm_team_views.xml @@ -86,7 +86,7 @@ 'kanban_view_ref': 'sales_team.crm_team_member_view_kanban_from_team', 'form_view_ref': 'sales_team.crm_team_member_view_form_from_team', 'tree_view_ref': 'sales_team.crm_team_member_view_tree_from_team', - 'default_crm_team_id': active_id, + 'default_crm_team_id': id, }"/> diff --git a/addons/survey/views/survey_question_views.xml b/addons/survey/views/survey_question_views.xml index f78d47d19a4..9dfb60be351 100644 --- a/addons/survey/views/survey_question_views.xml +++ b/addons/survey/views/survey_question_views.xml @@ -140,7 +140,7 @@
- + @@ -154,7 +154,7 @@ - diff --git a/addons/survey/views/survey_survey_views.xml b/addons/survey/views/survey_survey_views.xml index 51d17fcadee..2dfd3d490e4 100644 --- a/addons/survey/views/survey_survey_views.xml +++ b/addons/survey/views/survey_survey_views.xml @@ -64,7 +64,7 @@ - + @@ -154,7 +154,7 @@ placeholder="Pick a Badge..." invisible="not certification_give_badge or certification_badge_id" required="certification_give_badge" - domain="[('survey_id', '=', active_id), ('survey_id', '!=', False)]" + domain="[('survey_id', '=', id), ('survey_id', '!=', False)]" context="{'default_name': title, 'default_description': 'Congratulations, you have succeeded this certification', 'default_rule_auth': 'nobody', diff --git a/addons/web/static/src/model/relational_model/record.js b/addons/web/static/src/model/relational_model/record.js index 3108bd812ee..c0c90c200bc 100644 --- a/addons/web/static/src/model/relational_model/record.js +++ b/addons/web/static/src/model/relational_model/record.js @@ -999,7 +999,11 @@ export class Record extends DataPoint { this._isEvalContextReady = true; if (!this._parentRecord || this._parentRecord._isEvalContextReady) { - this._updateChildrenContext(); + for (const [fieldName, value] of Object.entries(toRaw(this.data))) { + if (["one2many", "many2many"].includes(this.fields[fieldName].type)) { + value._updateContext(getFieldContext(this, fieldName)); + } + } } } @@ -1117,12 +1121,4 @@ export class Record extends DataPoint { await this.model.hooks.onRecordChanged(this, this._getChanges()); } } - - _updateChildrenContext() { - for (const [fieldName, value] of Object.entries(toRaw(this.data))) { - if (["one2many", "many2many"].includes(this.fields[fieldName].type)) { - value._updateContext(getFieldContext(this, fieldName)); - } - } - } } diff --git a/addons/web/static/src/model/relational_model/static_list.js b/addons/web/static/src/model/relational_model/static_list.js index 872a472eb83..788eee8276e 100644 --- a/addons/web/static/src/model/relational_model/static_list.js +++ b/addons/web/static/src/model/relational_model/static_list.js @@ -90,6 +90,7 @@ export class StaticList extends DataPoint { context, uid: context.uid, allowed_company_ids: context.allowed_company_ids, + current_company_id: this.config.currentCompanyId, parent: this._parent.evalContext, }; } @@ -955,7 +956,7 @@ export class StaticList extends DataPoint { _updateContext(context) { Object.assign(this.context, context); for (const record of Object.values(this._cache)) { - record._updateChildrenContext(); + record._setEvalContext(); } } } diff --git a/addons/web/static/src/model/relational_model/utils.js b/addons/web/static/src/model/relational_model/utils.js index 253649ebc49..9017c2650fc 100644 --- a/addons/web/static/src/model/relational_model/utils.js +++ b/addons/web/static/src/model/relational_model/utils.js @@ -343,9 +343,9 @@ export function getBasicEvalContext(config) { context: config.context, uid, allowed_company_ids, - active_id: config.resId || false, - active_ids: config.resId ? [config.resId] : [], - active_model: config.resModel, + active_id: config.resId || false, // deprecated, will be removed in v18 + active_ids: config.resId ? [config.resId] : [], // deprecated, will be removed in v18 + active_model: config.resModel, // deprecated, will be removed in v18 current_company_id: config.currentCompanyId, }; } diff --git a/addons/web/static/tests/views/fields/many2many_field_tests.js b/addons/web/static/tests/views/fields/many2many_field_tests.js index 6e29617f3d8..d4860f8d92d 100644 --- a/addons/web/static/tests/views/fields/many2many_field_tests.js +++ b/addons/web/static/tests/views/fields/many2many_field_tests.js @@ -1991,12 +1991,13 @@ QUnit.module("Fields", (hooks) => { }); QUnit.test("many2many basic keys in field evalcontext -- in list", async (assert) => { - assert.expect(6); + assert.expect(5); serverData.models.partner_type.fields.partner_id = { string: "Partners", type: "many2one", relation: "partner", }; + serverData.models.partner.records.push({ id: 7, display_name: "default partner" }); serverData.views = { "partner_type,false,form": `
`, }; @@ -2024,13 +2025,12 @@ QUnit.module("Fields", (hooks) => { serverData, arch: ` - + `, mockRPC(route, args) { if (args.method === "onchange") { - assert.strictEqual(args.kwargs.context.default_partner_id, 1); - assert.strictEqual(args.kwargs.context.model, "partner"); - assert.deepEqual(args.kwargs.context.ids, [1]); + assert.strictEqual(args.kwargs.context.uid, 7); + assert.deepEqual(args.kwargs.context.allowed_company_ids, [3]); assert.strictEqual(args.kwargs.context.company_id, 3); } }, @@ -2042,17 +2042,18 @@ QUnit.module("Fields", (hooks) => { assert.containsOnce(target, ".modal .o_field_many2one"); assert.strictEqual( target.querySelector(".modal .o_field_many2one input").value, - "first record" + "default partner" ); }); QUnit.test("many2many basic keys in field evalcontext -- in form", async (assert) => { - assert.expect(6); + assert.expect(5); serverData.models.partner_type.fields.partner_id = { string: "Partners", type: "many2one", relation: "partner", }; + serverData.models.partner.records.push({ id: 7, display_name: "default partner" }); serverData.views = { "partner_type,false,form": `
`, }; @@ -2081,13 +2082,12 @@ QUnit.module("Fields", (hooks) => { serverData, arch: `
- + `, mockRPC(route, args) { if (args.method === "onchange") { - assert.strictEqual(args.kwargs.context.default_partner_id, 1); - assert.strictEqual(args.kwargs.context.model, "partner"); - assert.deepEqual(args.kwargs.context.ids, [1]); + assert.strictEqual(args.kwargs.context.default_partner_id, 7); + assert.deepEqual(args.kwargs.context.allowed_company_ids, [3]); assert.strictEqual(args.kwargs.context.company_id, 3); } }, @@ -2099,19 +2099,20 @@ QUnit.module("Fields", (hooks) => { assert.containsOnce(target, ".modal .o_field_many2one"); assert.strictEqual( target.querySelector(".modal .o_field_many2one input").value, - "first record" + "default partner" ); }); QUnit.test( "many2many basic keys in field evalcontext -- in a x2many in form", async (assert) => { - assert.expect(6); + assert.expect(5); serverData.models.partner_type.fields.partner_id = { string: "Partners", type: "many2one", relation: "partner", }; + serverData.models.partner.records.push({ id: 7, display_name: "default partner" }); serverData.views = { "partner_type,false,form": `
`, }; @@ -2144,15 +2145,14 @@ QUnit.module("Fields", (hooks) => {
- +
`, mockRPC(route, args) { if (args.method === "onchange") { - assert.strictEqual(args.kwargs.context.default_partner_id, 1); - assert.strictEqual(args.kwargs.context.model, "partner"); - assert.deepEqual(args.kwargs.context.ids, [1]); + assert.strictEqual(args.kwargs.context.default_partner_id, 7); + assert.deepEqual(args.kwargs.context.allowed_company_ids, [3]); assert.strictEqual(args.kwargs.context.company_id, 3); } }, @@ -2164,7 +2164,7 @@ QUnit.module("Fields", (hooks) => { assert.containsOnce(target, ".modal .o_field_many2one"); assert.strictEqual( target.querySelector(".modal .o_field_many2one input").value, - "first record" + "default partner" ); } ); diff --git a/addons/web/static/tests/views/form/form_view_tests.js b/addons/web/static/tests/views/form/form_view_tests.js index a65bb7c1c75..172c5700122 100644 --- a/addons/web/static/tests/views/form/form_view_tests.js +++ b/addons/web/static/tests/views/form/form_view_tests.js @@ -1118,7 +1118,7 @@ QUnit.module("Views", (hooks) => { arch: `
`, @@ -7340,7 +7340,7 @@ QUnit.module("Views", (hooks) => {
-
@@ -7879,8 +7879,8 @@ QUnit.module("Views", (hooks) => { assert.containsOnce(target, ".o_field_widget[name=timmy] .o_tag"); }); - QUnit.test("check if id and active_id are defined", async function (assert) { - assert.expect(2); + QUnit.test("check if id is available in evaluation context", async function (assert) { + assert.expect(1); let checkOnchange = false; await makeView({ @@ -7889,7 +7889,7 @@ QUnit.module("Views", (hooks) => { serverData, arch: ` - + @@ -7901,11 +7901,6 @@ QUnit.module("Views", (hooks) => { false, "current_id should be false" ); - assert.strictEqual( - args.kwargs.context.default_trululu, - false, - "default_trululu should be false" - ); } }, }); diff --git a/addons/web/static/tests/webclient/helpers.js b/addons/web/static/tests/webclient/helpers.js index b93f8889a7d..b2fb7732a69 100644 --- a/addons/web/static/tests/webclient/helpers.js +++ b/addons/web/static/tests/webclient/helpers.js @@ -344,7 +344,7 @@ export function getActionManagerServerData() {
-
diff --git a/addons/website_event_meet/views/event_event_views.xml b/addons/website_event_meet/views/event_event_views.xml index cab93328ff8..d6f30d1c016 100644 --- a/addons/website_event_meet/views/event_event_views.xml +++ b/addons/website_event_meet/views/event_event_views.xml @@ -8,7 +8,7 @@ - diff --git a/addons/website_event_track/views/event_track_tag_views.xml b/addons/website_event_track/views/event_track_tag_views.xml index 58cc2b5b2c2..9c07bea2536 100644 --- a/addons/website_event_track/views/event_track_tag_views.xml +++ b/addons/website_event_track/views/event_track_tag_views.xml @@ -8,7 +8,7 @@ - + diff --git a/addons/website_sale/views/product_views.xml b/addons/website_sale/views/product_views.xml index 0c75212cb62..4c8d413d8c9 100644 --- a/addons/website_sale/views/product_views.xml +++ b/addons/website_sale/views/product_views.xml @@ -153,7 +153,7 @@ diff --git a/addons/website_sale/views/website_views.xml b/addons/website_sale/views/website_views.xml index 442b7365b05..39dd2f7d51f 100644 --- a/addons/website_sale/views/website_views.xml +++ b/addons/website_sale/views/website_views.xml @@ -8,7 +8,7 @@ - + diff --git a/addons/website_slides/views/slide_channel_views.xml b/addons/website_slides/views/slide_channel_views.xml index e7f67997305..00dded3cc35 100644 --- a/addons/website_slides/views/slide_channel_views.xml +++ b/addons/website_slides/views/slide_channel_views.xml @@ -73,7 +73,7 @@
- + @@ -128,7 +128,7 @@ invisible="channel_type == 'training' or promote_strategy != 'specific'" required="channel_type != 'training' and promote_strategy == 'specific'" string="Content" - domain="[('channel_id', '=', active_id), ('is_category', '=', False)]"/> + domain="[('channel_id', '=', id), ('is_category', '=', False)]"/> diff --git a/addons/website_slides_forum/views/slide_channel_views.xml b/addons/website_slides_forum/views/slide_channel_views.xml index 27072bd2557..e02e3484a97 100644 --- a/addons/website_slides_forum/views/slide_channel_views.xml +++ b/addons/website_slides_forum/views/slide_channel_views.xml @@ -15,7 +15,7 @@ - +
diff --git a/odoo/addons/base/models/ir_ui_view.py b/odoo/addons/base/models/ir_ui_view.py index 9e248f40bc4..5dc29cf4d84 100644 --- a/odoo/addons/base/models/ir_ui_view.py +++ b/odoo/addons/base/models/ir_ui_view.py @@ -2875,6 +2875,9 @@ class NameManager: view._raise_view_error(msg) info = self.available_fields[name].get('info') if info is None: + if name in ['active_id', 'active_ids', 'active_model']: + _logger.warning("Using active_id, active_ids and active_model in expressions is deprecated, found %s", name) + continue msg = _( "Field %(name)r used in %(use)s must be present in view but is missing.", name=name, use=use, diff --git a/odoo/addons/base/views/ir_ui_menu_views.xml b/odoo/addons/base/views/ir_ui_menu_views.xml index ce9a29f4fe9..ddc17a5ac57 100644 --- a/odoo/addons/base/views/ir_ui_menu_views.xml +++ b/odoo/addons/base/views/ir_ui_menu_views.xml @@ -26,7 +26,7 @@ - + diff --git a/odoo/addons/base/views/ir_ui_view_views.xml b/odoo/addons/base/views/ir_ui_view_views.xml index f0062de9619..1f47917d914 100644 --- a/odoo/addons/base/views/ir_ui_view_views.xml +++ b/odoo/addons/base/views/ir_ui_view_views.xml @@ -35,7 +35,7 @@ - + diff --git a/odoo/addons/base/views/res_company_views.xml b/odoo/addons/base/views/res_company_views.xml index bbaf2b2c3a9..54d3a7f7b24 100644 --- a/odoo/addons/base/views/res_company_views.xml +++ b/odoo/addons/base/views/res_company_views.xml @@ -46,7 +46,7 @@ - + diff --git a/odoo/addons/base/views/res_partner_views.xml b/odoo/addons/base/views/res_partner_views.xml index c1fe1049540..a9ca458e15f 100644 --- a/odoo/addons/base/views/res_partner_views.xml +++ b/odoo/addons/base/views/res_partner_views.xml @@ -244,7 +244,7 @@ - + diff --git a/odoo/tools/view_validation.py b/odoo/tools/view_validation.py index 0b45e0f4cd4..410f016532a 100644 --- a/odoo/tools/view_validation.py +++ b/odoo/tools/view_validation.py @@ -25,11 +25,8 @@ IGNORED_IN_EXPRESSION = { 'uid', 'context', 'context_today', - 'active_id', - 'active_ids', 'allowed_company_ids', 'current_company_id', - 'active_model', 'time', 'datetime', 'relativedelta',