diff --git a/README.md b/README.md
index cae134c9c5..887490c55b 100644
--- a/README.md
+++ b/README.md
@@ -40,7 +40,7 @@ addon | version | maintainers | summary
[base_user_empty_password](base_user_empty_password/) | 18.0.1.0.0 |
| Allows to empty password of users
[base_user_show_email](base_user_show_email/) | 18.0.1.0.0 | | Untangle user login and email
[cross_connect_client](cross_connect_client/) | 18.0.1.0.0 |
| Cross Connect Client allows to connect to a Cross Connect Server enabled odoo instance.
-[impersonate_login](impersonate_login/) | 18.0.1.1.0 |
| tools
+[impersonate_login](impersonate_login/) | 18.0.1.1.1 |
| tools
[password_security](password_security/) | 18.0.1.0.0 | | Allow admin to set password security requirements.
[user_log_view](user_log_view/) | 18.0.1.0.0 |
| Allow to see user's actions log
[users_ldap_mail](users_ldap_mail/) | 18.0.1.0.0 |
| LDAP mapping for user name and e-mail
diff --git a/impersonate_login/README.rst b/impersonate_login/README.rst
index 2b71b498b5..6341970cdb 100644
--- a/impersonate_login/README.rst
+++ b/impersonate_login/README.rst
@@ -11,7 +11,7 @@ Impersonate Login
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !! source digest: sha256:0f4564be316d51d716922597d0fbfc4ba6ee6b58b19243f17fc445dd6d9d3a4c
+ !! source digest: sha256:7a065218446f1a1c3d7c8df01e153960f15c80d7fc12534272a2e700896ca757
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
diff --git a/impersonate_login/__manifest__.py b/impersonate_login/__manifest__.py
index e7a9ef963f..3edddc524c 100644
--- a/impersonate_login/__manifest__.py
+++ b/impersonate_login/__manifest__.py
@@ -5,7 +5,7 @@
{
"name": "Impersonate Login",
"summary": "tools",
- "version": "18.0.1.1.0",
+ "version": "18.0.1.1.1",
"category": "Tools",
"website": "https://github.com/OCA/server-auth",
"author": "Akretion, Odoo Community Association (OCA)",
diff --git a/impersonate_login/models/model.py b/impersonate_login/models/model.py
index 726c57ccad..8b99ff27bc 100644
--- a/impersonate_login/models/model.py
+++ b/impersonate_login/models/model.py
@@ -9,8 +9,17 @@
class BaseModel(models.AbstractModel):
_inherit = "base"
+ def _keep_real_user_on_create_write(self):
+ # Avoid overriding the create_uid and write_uid
+ # when the model is abstract or transient
+ if self._abstract or self._transient:
+ return True
+ return False
+
def _prepare_create_values(self, vals_list):
result_vals_list = super()._prepare_create_values(vals_list)
+ if self._keep_real_user_on_create_write():
+ return result_vals_list
if (
request
and request.session.impersonate_from_uid
@@ -23,6 +32,8 @@ def _prepare_create_values(self, vals_list):
def write(self, vals):
"""Overwrite the write_uid with the impersonating user"""
res = super().write(vals)
+ if self._keep_real_user_on_create_write():
+ return res
if (
request
and request.session.impersonate_from_uid
diff --git a/impersonate_login/static/description/index.html b/impersonate_login/static/description/index.html
index 1cf66496f8..487b9f02d5 100644
--- a/impersonate_login/static/description/index.html
+++ b/impersonate_login/static/description/index.html
@@ -372,7 +372,7 @@
This module allows one user (for example, a member of the support team) diff --git a/impersonate_login/tests/test_impersonate_login.py b/impersonate_login/tests/test_impersonate_login.py index b6a4f352eb..667e13660c 100644 --- a/impersonate_login/tests/test_impersonate_login.py +++ b/impersonate_login/tests/test_impersonate_login.py @@ -263,3 +263,42 @@ def test_04_write_uid(self): self.assertEqual(contact.id, contact_id) self.assertEqual(contact.ref, "abc") self.assertEqual(contact.write_uid, self.admin_user) + + def test_05_create_uid_on_transient_model(self): + """Check the create_uid of records created + during an impersonated session on a transient model""" + # Login as admin + self.authenticate(user="admin", password="admin") + + # Impersonate demo user and create a wizard record + self._impersonate_user(self.demo_user) + + response = self.url_open( + "/web/dataset/call_kw/mail.wizard.invite/web_save", + data=json.dumps( + { + "params": { + "model": "mail.wizard.invite", + "method": "web_save", + "args": [ + [], + { + "res_model": "res.partner", + "message": "Hello", + }, + {}, + ], + "kwargs": {}, + }, + } + ), + headers={"Content-Type": "application/json"}, + ) + self.assertEqual(response.status_code, 200) + data = response.json() + result = data["result"] + settings_id = result[0]["id"] + + wizard = self.env["mail.wizard.invite"].browse(settings_id) + self.assertIn("Hello", wizard.message) + self.assertEqual(wizard.create_uid, self.demo_user)