From daf05d48ac76d500aa1285184bdddc4c67641d58 Mon Sep 17 00:00:00 2001 From: Aaron Bohy Date: Wed, 4 Oct 2023 10:53:39 +0200 Subject: [PATCH] [IMP] *: views: deprecate active_* keys from evalContext This commit aims to simplify the evaluation context used to evaluate expressions used in views (invisible, required, readonly, domain and context attributes). For now, the evaluation context is typically the current record (there's a key for each field in the view). In addition to that, there're static keys (that may conflict with field names): uid, allowed_company_ids, current_company_id, active_id, active_ids and active_model. The motivation of this commit is at some point to get rid of the 3 active_* keys, because they are misleading and basically useless. The notion of active_* exists, but it is something else: when you are in a form view (let's say the form of a partner) and you open its opportunities (by clicking on the stat button), the list view of opportunies shows up and in the context, there're 3 keys active_*, referring to the record from which we came. One can easily access those information with context.get("active_*"), in python or in view archs. However, almost all `active_id` found in archs were actually used to refer to the id of the current record. Indeed, for now, in the evaluation context of a record, the value of the `active_id` key is always the id of the record. So this commit adapts them to directly use `id` instead. There was no use of active_ids, and a single use of active_model which was removed (active_model is the res_model of the view, so it isn't really necessary). This commit doesn't drop the support of those keys, it deprecates them. They will be removed for v18. A warning will be displayed if they are used. closes odoo/odoo#136665 Related: odoo/enterprise#47917 Signed-off-by: Raphael Collet --- .../views/account_journal_dashboard_view.xml | 2 +- .../account/views/account_journal_views.xml | 2 +- addons/account/views/partner_view.xml | 4 +-- .../views/res_country_view.xml | 2 +- addons/calendar/views/res_partner_views.xml | 2 +- addons/crm/views/res_partner_views.xml | 2 +- addons/event/views/event_event_views.xml | 4 +-- addons/event/views/event_tag_views.xml | 2 +- .../views/gamification_badge_views.xml | 2 +- addons/hr/views/hr_employee_views.xml | 2 +- .../hr_attendance/views/hr_employee_view.xml | 2 +- addons/hr_holidays/views/hr_views.xml | 4 +-- addons/hr_recruitment/views/hr_job_views.xml | 4 +-- .../views/hr_department_views.xml | 2 +- .../hr_timesheet/views/hr_employee_views.xml | 2 +- addons/lunch/views/lunch_orders_views.xml | 3 +- addons/lunch/views/lunch_product_views.xml | 4 +-- addons/mail_group/views/mail_group_views.xml | 8 ++--- .../maintenance/views/maintenance_views.xml | 2 +- addons/mrp/views/mrp_workcenter_views.xml | 2 +- addons/mrp/views/stock_picking_views.xml | 6 ++-- addons/payment/views/res_partner_views.xml | 2 +- .../point_of_sale/views/res_partner_view.xml | 2 +- .../product/views/product_category_views.xml | 2 +- .../views/project_collaborator_views.xml | 2 +- .../project_sharing_project_task_views.xml | 2 +- addons/project/views/res_partner_views.xml | 2 +- addons/purchase/views/product_views.xml | 5 ++- .../views/product_template_views.xml | 2 +- .../sale_project/views/project_task_views.xml | 8 ++--- .../views/project_task_views.xml | 4 +-- addons/sales_team/views/crm_team_views.xml | 2 +- addons/survey/views/survey_question_views.xml | 4 +-- addons/survey/views/survey_survey_views.xml | 4 +-- .../src/model/relational_model/record.js | 14 +++----- .../src/model/relational_model/static_list.js | 3 +- .../src/model/relational_model/utils.js | 6 ++-- .../views/fields/many2many_field_tests.js | 36 +++++++++---------- .../tests/views/form/form_view_tests.js | 15 +++----- addons/web/static/tests/webclient/helpers.js | 2 +- .../views/event_event_views.xml | 2 +- .../views/event_track_tag_views.xml | 2 +- addons/website_sale/views/product_views.xml | 2 +- addons/website_sale/views/website_views.xml | 2 +- .../views/slide_channel_views.xml | 4 +-- .../views/slide_channel_views.xml | 2 +- odoo/addons/base/models/ir_ui_view.py | 3 ++ odoo/addons/base/views/ir_ui_menu_views.xml | 2 +- odoo/addons/base/views/ir_ui_view_views.xml | 2 +- odoo/addons/base/views/res_company_views.xml | 2 +- odoo/addons/base/views/res_partner_views.xml | 2 +- odoo/tools/view_validation.py | 3 -- 52 files changed, 101 insertions(+), 107 deletions(-) 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',