[FIX] website_slides: prevent error when no completed_template selected
Current behavior : If no completed template (`completed_template_id`) is selected in the options of an elearning course, an error occurs when a user completes this course. Steps : - Install elearning - (*with demo data*) Go to a course (e.g. Basics of Gardening) - Remove the selected "Completion Email" then save - Complete the course Reason : We are trying to access a `record_email_values` value here [1] but no value is assigned to `record_email_values` unless we have a completed_template [2]. [1] : https://github.com/odoo/odoo/blob/f4d83f31c12cb13d626bcaaa619c0f3be680cdbc/addons/website_slides/models/slide_channel.py#L110 [2] : https://github.com/odoo/odoo/blob/f4d83f31c12cb13d626bcaaa619c0f3be680cdbc/addons/website_slides/models/slide_channel.py#L105-L106 OPW-2753078 closes odoo/odoo#86771 X-original-commit: 444132f446c4dc8914f1238f96c4af98550e27a9 Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com> Signed-off-by: Claude Thibault (thcl) <thcl@odoo.com>
This commit is contained in:
@@ -110,11 +110,12 @@ class ChannelUsersRelation(models.Model):
|
||||
for record in self:
|
||||
template = record.channel_id.completed_template_id
|
||||
if template:
|
||||
records = template_to_records.setdefault(template, self.env['slide.channel.partner'])
|
||||
records += record
|
||||
template_to_records.setdefault(template, self.env['slide.channel.partner'])
|
||||
template_to_records[template] += record
|
||||
|
||||
record_email_values = dict()
|
||||
for template, records in template_to_records.items():
|
||||
record_email_values = template.generate_email(self.ids, ['subject', 'body_html', 'email_from', 'partner_to'])
|
||||
record_email_values.update(template.generate_email(records.ids, ['subject', 'body_html', 'email_from', 'partner_to']))
|
||||
|
||||
mail_mail_values = []
|
||||
for record in self:
|
||||
|
||||
@@ -88,6 +88,52 @@ class TestSlidesManagement(slides_common.SlidesCase):
|
||||
for mail in created_mails)
|
||||
)
|
||||
|
||||
def test_mail_completed_with_different_templates(self):
|
||||
""" When the completion email is generated, it must take into account different templates. """
|
||||
|
||||
mail_template = self.env['mail.template'].create({
|
||||
'model_id': self.env['ir.model']._get('slide.channel.partner').id,
|
||||
'name': 'test template',
|
||||
'partner_to': '{{ object.partner_id.id }}',
|
||||
'body_html': '<p>TestBodyTemplate2</p>',
|
||||
'subject': 'ATestSubject'
|
||||
})
|
||||
channel_2 = self.env['slide.channel'].create({
|
||||
'name': 'Test Course 2',
|
||||
'slide_ids': [(0, 0, {
|
||||
'name': 'Test Slide 2'
|
||||
})],
|
||||
'completed_template_id': mail_template.id
|
||||
})
|
||||
self.channel.completed_template_id.body_html = '<p>TestBodyTemplate</p>'
|
||||
|
||||
all_channels = self.channel | channel_2
|
||||
all_channels.sudo()._action_add_members(self.user_officer.partner_id)
|
||||
|
||||
with self.mock_mail_gateway():
|
||||
self.env['slide.slide.partner'].create([
|
||||
{'channel_id': self.channel.id,
|
||||
'completed': True,
|
||||
'partner_id': self.user_officer.partner_id.id,
|
||||
'slide_id': slide.id,
|
||||
}
|
||||
for slide in all_channels.slide_content_ids
|
||||
])
|
||||
slide_created_mails = self._new_mails.filtered(lambda m: m.model == 'slide.channel.partner')
|
||||
# 2 mails should be generated from two different templates:
|
||||
# the default template and the new one
|
||||
self.assertEqual(len(slide_created_mails), 2)
|
||||
|
||||
self.assertEqual(
|
||||
slide_created_mails.mapped('body'),
|
||||
['<p>TestBodyTemplate</p>', '<p>TestBodyTemplate2</p>']
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
slide_created_mails.mapped('subject'),
|
||||
['Congratulation! You completed %s' % self.channel.name, 'ATestSubject']
|
||||
)
|
||||
|
||||
|
||||
class TestSequencing(slides_common.SlidesCase):
|
||||
|
||||
|
||||
Reference in New Issue
Block a user