Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 10 additions & 4 deletions mail_ux/models/mail_compose_message.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,14 @@ def _action_send_mail(self, auto_commit=False):
if not self.env.user.send_message_delay:
return super()._action_send_mail(auto_commit=auto_commit)

# Limpiamos __action_done porque odoo guarda una base automation ahi
# Al querer crear el mensaje programado falla por mala definicion de contexto (es un objeto y no un str, int, etc.)
# No es replicable en odoo porque no tienen base automation para schedulear un mensaje
self.with_context(__action_done={})._action_schedule_message()
self._action_schedule_message()
return self.env["mail.mail"].sudo(), self.env["mail.message"]

def _prepare_schedule_message_post_values(self, post_values):
"""send_context es un campo Json y base_automation deja en el contexto
claves privadas con recordsets (__action_done): no son serializables."""
values = super()._prepare_schedule_message_post_values(post_values)
values["send_context"] = {
key: value for key, value in (values.get("send_context") or {}).items() if not key.startswith("__")
}
return values
1 change: 1 addition & 0 deletions mail_ux/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import test_schedule_message
34 changes: 34 additions & 0 deletions mail_ux/tests/test_schedule_message.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
from odoo.tests.common import TransactionCase


class TestScheduleMessage(TransactionCase):
def test_send_context_without_private_keys(self):
"""send_context is a Json field: a private key holding recordsets
(base_automation's __action_done) makes the insert fail."""
self.env.user.send_message_delay = 60
partner = self.env["res.partner"].create({"name": "Test Schedule"})
composer = (
self.env["mail.compose.message"]
.with_context(
**{
"__action_done": {self.env.user: partner},
"lang": "en_US",
}
)
.create(
{
"model": "res.partner",
"res_ids": repr(partner.ids),
"subject": "Test",
"body": "<p>Test</p>",
}
)
)

composer._action_send_mail()

scheduled = self.env["mail.scheduled.message"].search(
[("model", "=", "res.partner"), ("res_id", "=", partner.id)]
)
self.assertEqual(len(scheduled), 1)
self.assertEqual(scheduled.send_context, {"lang": "en_US"})
Loading