From d9e3aab69b5ecdddee1ed492cb442b33f191868a Mon Sep 17 00:00:00 2001 From: Martin Trigaux Date: Thu, 12 Aug 2021 05:41:54 +0000 Subject: [PATCH] [FIX] mail: convert res_model_id to selection Following the removal of read access on ir.model (odoo/odoo#69120), the mail.activity.type model was not accessible to non-admin users due to the res_model_id many2one field. Before this commit, a project user could not access the Activity Type menu. Convert it to a selection field with the selection values being computed in sudo. closes odoo/odoo#74981 Related: odoo/enterprise#20214 Related: odoo/upgrade#2734 Signed-off-by: Martin Trigaux (mat) --- .../tests/test_mail_activity_mixin.py | 2 +- addons/crm/data/mail_activity_demo.xml | 8 +-- addons/crm/tests/common.py | 2 +- addons/crm/tests/test_crm_activity.py | 4 +- addons/crm/views/mail_activity_views.xml | 2 +- addons/fleet/data/mail_data.xml | 2 +- addons/fleet/views/mail_activity_views.xml | 2 +- addons/hr/models/hr_plan.py | 2 +- addons/hr_expense/data/mail_data.xml | 2 +- .../hr_expense/views/mail_activity_views.xml | 2 +- addons/hr_holidays/data/mail_data.xml | 8 +-- .../hr_holidays/views/mail_activity_views.xml | 2 +- .../views/mail_activity_views.xml | 2 +- addons/mail/models/ir_actions.py | 2 +- addons/mail/models/ir_model.py | 3 + addons/mail/models/mail_activity.py | 56 +++++++++---------- addons/mail/views/mail_activity_views.xml | 18 +++--- addons/maintenance/data/mail_data.xml | 2 +- .../maintenance/views/mail_activity_views.xml | 2 +- .../point_of_sale/views/pos_session_view.xml | 2 +- .../data/product_expiry_data.xml | 2 +- addons/project/views/mail_activity_views.xml | 2 +- addons/sale/data/mail_data_various.xml | 2 +- addons/sale/views/crm_team_views.xml | 2 +- addons/sale/views/mail_activity_views.xml | 2 +- addons/sale_crm/views/crm_lead_views.xml | 2 +- .../sales_team/views/mail_activity_views.xml | 4 +- addons/test_mail/data/data.xml | 6 +- addons/website_slides/data/mail_data.xml | 2 +- 29 files changed, 76 insertions(+), 73 deletions(-) diff --git a/addons/calendar/tests/test_mail_activity_mixin.py b/addons/calendar/tests/test_mail_activity_mixin.py index c34688bec96..16bffc4264e 100644 --- a/addons/calendar/tests/test_mail_activity_mixin.py +++ b/addons/calendar/tests/test_mail_activity_mixin.py @@ -22,7 +22,7 @@ class TestMailActivityMixin(MailCommon): cls.activity_type_1 = cls.env['mail.activity.type'].create({ 'name': 'Calendar Activity Test Default', 'summary': 'default activity', - 'res_model_id': cls.env['ir.model']._get('base.res_partner').id, + 'res_model': 'res.partner', }) cls.env['ir.model.data'].create({ 'name': cls.activity_type_1.name.lower().replace(' ', '_'), diff --git a/addons/crm/data/mail_activity_demo.xml b/addons/crm/data/mail_activity_demo.xml index 48b51a5ba69..33a44207475 100644 --- a/addons/crm/data/mail_activity_demo.xml +++ b/addons/crm/data/mail_activity_demo.xml @@ -3,26 +3,26 @@ Follow-up Quote fa-file-text-o - + crm.lead 30 Make Quote fa-file-text-o - + crm.lead 15 Call for Demo fa-phone - + crm.lead 10 Email: Welcome Demo fa-envelope - + crm.lead diff --git a/addons/crm/tests/common.py b/addons/crm/tests/common.py index f52775ad57d..9527089281d 100644 --- a/addons/crm/tests/common.py +++ b/addons/crm/tests/common.py @@ -216,7 +216,7 @@ class TestCrmCommon(TestSalesCommon, MailCase): cls.activity_type_1 = cls.env['mail.activity.type'].create({ 'name': 'Lead Test Activity 1', 'summary': 'ACT 1 : Presentation, barbecue, ... ', - 'res_model_id': cls.env['ir.model']._get('crm.crm_lead').id, + 'res_model': 'crm.lead', 'category': 'meeting', 'delay_count': 5, }) diff --git a/addons/crm/tests/test_crm_activity.py b/addons/crm/tests/test_crm_activity.py index 9993df60e49..f5f669e8641 100644 --- a/addons/crm/tests/test_crm_activity.py +++ b/addons/crm/tests/test_crm_activity.py @@ -17,13 +17,13 @@ class TestCrmMailActivity(TestCrmCommon): 'name': 'Initial Contact', 'delay_count': 5, 'summary': 'ACT 1 : Presentation, barbecue, ... ', - 'res_model_id': cls.env['ir.model']._get('crm.lead').id, + 'res_model': 'crm.lead', }) cls.activity_type_2 = cls.env['mail.activity.type'].create({ 'name': 'Call for Demo', 'delay_count': 6, 'summary': 'ACT 2 : I want to show you my ERP !', - 'res_model_id': cls.env['ir.model']._get('crm.lead').id, + 'res_model': 'crm.lead', }) for activity_type in cls.activity_type_1 + cls.activity_type_2: cls.env['ir.model.data'].create({ diff --git a/addons/crm/views/mail_activity_views.xml b/addons/crm/views/mail_activity_views.xml index 6b489ee8807..ddb514e84eb 100644 --- a/addons/crm/views/mail_activity_views.xml +++ b/addons/crm/views/mail_activity_views.xml @@ -1,7 +1,7 @@ - ['|', ('res_model_id', '=', False), ('res_model_id.model', 'in', ['crm.lead', 'res.partner'])] + ['|', ('res_model', '=', False), ('res_model', 'in', ['crm.lead', 'res.partner'])] {'default_res_model': 'crm.lead'} diff --git a/addons/fleet/data/mail_data.xml b/addons/fleet/data/mail_data.xml index 0fb2cbc3c96..969438a86fd 100644 --- a/addons/fleet/data/mail_data.xml +++ b/addons/fleet/data/mail_data.xml @@ -4,7 +4,7 @@ Contract to Renew fa-car - + fleet.vehicle.log.contract diff --git a/addons/fleet/views/mail_activity_views.xml b/addons/fleet/views/mail_activity_views.xml index 2ef3f878519..fa33e0b6ab3 100644 --- a/addons/fleet/views/mail_activity_views.xml +++ b/addons/fleet/views/mail_activity_views.xml @@ -5,7 +5,7 @@ Activity Types mail.activity.type tree,form - ['|', ('res_model_id', '=', False), ('res_model_id.model', '=', 'fleet.vehicle.log.contract')] + ['|', ('res_model', '=', False), ('res_model', '=', 'fleet.vehicle.log.contract')] {'default_res_model': 'fleet.vehicle.log.contract'} Expense Approval fa-dollar - + hr.expense.sheet diff --git a/addons/hr_expense/views/mail_activity_views.xml b/addons/hr_expense/views/mail_activity_views.xml index 0b82127292c..7bd40e3b2d7 100644 --- a/addons/hr_expense/views/mail_activity_views.xml +++ b/addons/hr_expense/views/mail_activity_views.xml @@ -5,7 +5,7 @@ Activity Types mail.activity.type tree,form - ['|', ('res_model_id', '=', False), ('res_model_id.model', '=', 'hr.expense.sheet')] + ['|', ('res_model', '=', False), ('res_model', '=', 'hr.expense.sheet')] {'default_res_model': 'hr.expense.sheet'} Time Off Approval fa-sun-o - + hr.leave Time Off Second Approve fa-sun-o - + hr.leave Allocation Approval fa-sun-o - + hr.leave.allocation Allocation Second Approve fa-sun-o - + hr.leave.allocation diff --git a/addons/hr_holidays/views/mail_activity_views.xml b/addons/hr_holidays/views/mail_activity_views.xml index 5502e95fadd..6305a4c5648 100644 --- a/addons/hr_holidays/views/mail_activity_views.xml +++ b/addons/hr_holidays/views/mail_activity_views.xml @@ -5,7 +5,7 @@ Activity Types mail.activity.type tree,form - ['|', ('res_model_id', '=', False), ('res_model_id.model', 'in', ['hr.leave', 'hr.leave.allocation'])] + ['|', ('res_model', '=', False), ('res_model', 'in', ['hr.leave', 'hr.leave.allocation'])] {'default_res_model': 'hr.leave'} diff --git a/addons/hr_recruitment/views/mail_activity_views.xml b/addons/hr_recruitment/views/mail_activity_views.xml index 949b4911fb4..bd566f0590b 100644 --- a/addons/hr_recruitment/views/mail_activity_views.xml +++ b/addons/hr_recruitment/views/mail_activity_views.xml @@ -5,7 +5,7 @@ Activity Types mail.activity.type tree,form - ['|', ('res_model_id', '=', False), ('res_model_id.model', '=', 'hr.applicant')] + ['|', ('res_model', '=', False), ('res_model', '=', 'hr.applicant')] {'default_res_model': 'hr.applicant'} - + - + - - + domain="[('model_id.model', '=', res_model)]" + attrs="{'invisible': [('res_model', '=', False)]}" + context="{'default_model': res_model}"/>