[FIX] mail: composer non-thread _compute_subject
When using the composer on a non-thread model a notification is sent instead of posting a message, as the model does not support the posting process. However there is currently a crash due to the default subject computation which is solved in this commit. Task-3254379 Part-of: odoo/odoo#117763
This commit is contained in:
committed by
Thibault Delavallée
parent
442467ceb8
commit
5ad9686b2f
@@ -195,8 +195,8 @@ class MailComposer(models.TransientModel):
|
||||
for composer in self:
|
||||
composer._evaluate_res_domain()
|
||||
|
||||
@api.depends('composition_mode', 'model', 'parent_id', 'res_domain',
|
||||
'res_ids', 'template_id')
|
||||
@api.depends('composition_mode', 'model', 'parent_id', 'record_name',
|
||||
'res_domain', 'res_ids', 'template_id')
|
||||
def _compute_subject(self):
|
||||
""" Computation is coming either form template, either from context.
|
||||
When having a template with a value set, copy it (in batch mode) or
|
||||
@@ -212,8 +212,11 @@ class MailComposer(models.TransientModel):
|
||||
if (not subject and composer.model and
|
||||
composer.composition_mode == 'comment' and
|
||||
not composer.composition_batch):
|
||||
res_ids = composer._evaluate_res_ids()
|
||||
subject = self.env[composer.model].browse(res_ids)._message_compute_subject()
|
||||
if composer.model_is_thread:
|
||||
res_ids = composer._evaluate_res_ids()
|
||||
subject = self.env[composer.model].browse(res_ids)._message_compute_subject()
|
||||
else:
|
||||
subject = composer.record_name
|
||||
composer.subject = subject
|
||||
|
||||
@api.depends('composition_mode', 'model', 'res_domain', 'res_ids',
|
||||
|
||||
@@ -1201,34 +1201,41 @@ class TestComposerResultsComment(TestMailComposer, CronMixinCase):
|
||||
@users('employee')
|
||||
def test_mail_composer_default_subject(self):
|
||||
""" Make sure the default subject is applied in the composer. """
|
||||
simple_record = self.env['mail.test.simple'].create({'name': 'TestSimple'})
|
||||
ticket_record = self.env['mail.test.ticket'].create({'name': 'TestTicket'})
|
||||
simple_record = self.env['mail.test.simple'].create({'name': 'TestA'})
|
||||
ticket_record = self.env['mail.test.ticket'].create({'name': 'Test1'})
|
||||
nonthread_record = self.env['mail.test.nothread'].create({'name': 'TestNoThread'})
|
||||
|
||||
# default behavior: use record name
|
||||
_, message = self.env['mail.compose.message'].with_context(
|
||||
self._get_web_context(simple_record, add_web=False, composition_mode='comment')
|
||||
).create({
|
||||
# default behavior: use the record name
|
||||
ctx = self._get_web_context(simple_record, add_web=False, default_composition_mode='comment')
|
||||
_, message = self.env['mail.compose.message'].with_context(ctx).create({
|
||||
'body': '<p>Test Body</p>',
|
||||
})._action_send_mail()
|
||||
self.assertEqual(message.subject, simple_record.name)
|
||||
|
||||
# overridden in model
|
||||
_, message = self.env['mail.compose.message'].with_context(
|
||||
self._get_web_context(ticket_record, add_web=False, composition_mode='comment')
|
||||
).create({
|
||||
# default behavior without thread: use record name
|
||||
ctx = self._get_web_context(nonthread_record, add_web=False, default_composition_mode='comment')
|
||||
_, message = self.env['mail.compose.message'].with_context(ctx).create({
|
||||
'body': '<p>Test Body</p>',
|
||||
'partner_ids': self.env.user.partner_id.ids,
|
||||
})._action_send_mail()
|
||||
self.assertEqual(message.record_name, nonthread_record.name)
|
||||
self.assertEqual(message.subject, nonthread_record.name)
|
||||
|
||||
# custom subject
|
||||
ctx = self._get_web_context(ticket_record, add_web=False, default_composition_mode='comment')
|
||||
_, message = self.env['mail.compose.message'].with_context(ctx).create({
|
||||
'body': '<p>Test Body</p>',
|
||||
})._action_send_mail()
|
||||
self.assertEqual(message.subject, ticket_record._message_compute_subject())
|
||||
self.assertIn(f'Ticket for {ticket_record.name}', message.subject)
|
||||
self.assertEqual(message.subject, f'Ticket for {ticket_record.name} on {ticket_record.datetime.strftime("%m/%d/%Y, %H:%M:%S")}')
|
||||
|
||||
# forced value
|
||||
_, message = self.env['mail.compose.message'].with_context(
|
||||
self._get_web_context(ticket_record, add_web=False, composition_mode='comment')
|
||||
).create({
|
||||
ctx = self._get_web_context(ticket_record, add_web=False, default_composition_mode='comment')
|
||||
_, message = self.env['mail.compose.message'].with_context(ctx).create({
|
||||
'body': '<p>Test Body</p>',
|
||||
'subject': 'Forced Subject',
|
||||
})._action_send_mail()
|
||||
self.assertEqual(message.subject, 'Forced Subject',)
|
||||
self.assertEqual(message.subject, 'Forced Subject')
|
||||
|
||||
@users('employee')
|
||||
@mute_logger('odoo.tests', 'odoo.addons.mail.models.mail_mail', 'odoo.models.unlink')
|
||||
|
||||
Reference in New Issue
Block a user