From 14d97ec28a9850c5ff9f8f63667f0ae17b773d7a Mon Sep 17 00:00:00 2001 From: sofiagvaladze Date: Wed, 28 Dec 2022 14:44:11 +0000 Subject: [PATCH] [IMP] base,auth_password_policy: add form view for changing password Purpose: The form view is more intuitive then list view in case user wants to change the password only for one user. task - 3105178 closes odoo/odoo#109869 Signed-off-by: Kevin Baptiste --- .../auth_password_policy/views/res_users.xml | 10 +++++ addons/hr/tests/test_self_user_access.py | 2 +- odoo/addons/base/models/res_users.py | 28 +++++++++++++- odoo/addons/base/views/res_users_views.xml | 38 ++++++++++++++++--- 4 files changed, 71 insertions(+), 7 deletions(-) diff --git a/addons/auth_password_policy/views/res_users.xml b/addons/auth_password_policy/views/res_users.xml index 568f0d34259..ee1c0ece9aa 100644 --- a/addons/auth_password_policy/views/res_users.xml +++ b/addons/auth_password_policy/views/res_users.xml @@ -19,4 +19,14 @@ + + Change Password User + + change.password.user + + + password_meter + + + diff --git a/addons/hr/tests/test_self_user_access.py b/addons/hr/tests/test_self_user_access.py index a3cb1c63075..428dab0466b 100644 --- a/addons/hr/tests/test_self_user_access.py +++ b/addons/hr/tests/test_self_user_access.py @@ -87,7 +87,7 @@ class TestSelfAccessProfile(TestHrCommon): }) view = self.env.ref('hr.res_users_view_form_profile') available_actions = james.get_views([(view.id, 'form')], {'toolbar': True})['views']['form']['toolbar']['action'] - change_password_action = self.env.ref("base.change_password_wizard_action") + change_password_action = self.env.ref("base.change_password_action_server") self.assertFalse(any(x['id'] == change_password_action.id for x in available_actions)) diff --git a/odoo/addons/base/models/res_users.py b/odoo/addons/base/models/res_users.py index 2d0925f9d83..fbb0e2167bd 100644 --- a/odoo/addons/base/models/res_users.py +++ b/odoo/addons/base/models/res_users.py @@ -1796,6 +1796,32 @@ class UsersView(models.Model): }) return res + def action_change_password(self): + if len(self) == 1: + view_id = self.env.ref('base.change_password_user_form_view').id + return { + 'name': _('Change Password'), + 'view_mode': 'form', + 'target': 'new', + 'res_model': 'change.password.user', + 'type': 'ir.actions.act_window', + 'view_id': view_id, + 'views': [(view_id, 'form')], + 'context': { + 'default_user_id': self.id, + 'default_user_login': self.login, + }, + } + else: + return { + 'name': _('Change Passwords'), + 'view_mode': 'form', + 'target': 'new', + 'res_model': 'change.password.wizard', + 'type': 'ir.actions.act_window', + 'views': [[False, 'form']], + } + class CheckIdentity(models.TransientModel): """ Wizard used to re-check the user's credentials (password) @@ -1854,7 +1880,7 @@ class ChangePasswordUser(models.TransientModel): _name = 'change.password.user' _description = 'User, Change Password Wizard' - wizard_id = fields.Many2one('change.password.wizard', string='Wizard', required=True, ondelete='cascade') + wizard_id = fields.Many2one('change.password.wizard', string='Wizard', ondelete='cascade') user_id = fields.Many2one('res.users', string='User', required=True, ondelete='cascade') user_login = fields.Char(string='User Login', readonly=True) new_passwd = fields.Char(string='New Password', default='') diff --git a/odoo/addons/base/views/res_users_views.xml b/odoo/addons/base/views/res_users_views.xml index 1d9f0206389..0ba5eaca74b 100644 --- a/odoo/addons/base/views/res_users_views.xml +++ b/odoo/addons/base/views/res_users_views.xml @@ -39,17 +39,45 @@ - + - + + + Change Password User + change.password.user + +
+ + + + + + + + + +
+
+ +
+
+ + Change Password - change.password.wizard - form - new + ir.actions.server + + + code + +if records: + action = records.action_change_password() +