[IMP] website_slides: use new mail.composer.mixin

Using this mixin allows to hide details about jinja-based computation for
main fields used when posting messages or sending emails. Notably subject
and body computation that was duplicated in several addons are now done
in a mixin. It also eases their maintenance or evolution when qweb rendering
will be available. It also eases support of lang when necessary.

Task ID-2534550 (Template usage improvement)
Task ID-2477164 (Composer mixin)
COM PR odoo/odoo#70889
ENT PR odoo/enterprise#18352
UPG PR odoo/upgrade#2496
This commit is contained in:
Stéphane Debauche
2021-06-01 09:06:07 +00:00
committed by Thibault Delavallée
parent 088d5e8dd3
commit 300a79c738
3 changed files with 9 additions and 24 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
{
'name': 'eLearning',
'version': '2.3',
'version': '2.4',
'sequence': 125,
'summary': 'Manage and publish an eLearning platform',
'website': 'https://www.odoo.com/page/slides',
@@ -6,7 +6,6 @@ import re
from odoo import api, fields, models, _
from odoo.exceptions import UserError
from odoo.tools import formataddr
_logger = logging.getLogger(__name__)
@@ -15,35 +14,20 @@ emails_split = re.compile(r"[;,\n\r]+")
class SlideChannelInvite(models.TransientModel):
_name = 'slide.channel.invite'
_inherit = 'mail.composer.mixin'
_description = 'Channel Invitation Wizard'
# composer content
subject = fields.Char('Subject', compute='_compute_subject', readonly=False, store=True)
body = fields.Html('Contents', sanitize_style=True, compute='_compute_body', readonly=False, store=True)
attachment_ids = fields.Many2many('ir.attachment', string='Attachments')
template_id = fields.Many2one(
'mail.template', 'Use template',
domain="[('model', '=', 'slide.channel.partner')]")
# recipients
partner_ids = fields.Many2many('res.partner', string='Recipients')
# slide channel
channel_id = fields.Many2one('slide.channel', string='Slide channel', required=True)
@api.depends('template_id')
def _compute_subject(self):
for invite in self:
if invite.template_id:
invite.subject = invite.template_id.subject
elif not invite.subject:
invite.subject = False
@api.depends('template_id')
def _compute_body(self):
for invite in self:
if invite.template_id:
invite.body = invite.template_id.body_html
elif not invite.body:
invite.body = False
# Overrides of mail.composer.mixin
@api.depends('channel_id') # fake trigger otherwise not computed in new mode
def _compute_render_model(self):
self.render_model = 'slide.channel.partner'
@api.onchange('partner_ids')
def _onchange_partner_ids(self):
@@ -92,8 +76,8 @@ class SlideChannelInvite(models.TransientModel):
def _prepare_mail_values(self, slide_channel_partner):
""" Create mail specific for recipient """
subject = self.env['mail.render.mixin']._render_template(self.subject, 'slide.channel.partner', slide_channel_partner.ids, post_process=True)[slide_channel_partner.id]
body = self.env['mail.render.mixin']._render_template(self.body, 'slide.channel.partner', slide_channel_partner.ids, post_process=True)[slide_channel_partner.id]
subject = self._render_field('subject', slide_channel_partner.ids, post_process=True)[slide_channel_partner.id]
body = self._render_field('body', slide_channel_partner.ids, post_process=True)[slide_channel_partner.id]
# post the message
mail_values = {
'email_from': self.env.user.email_formatted,
@@ -14,6 +14,7 @@
context="{'force_email':True, 'show_email':True, 'no_create_edit': True}"/>
</group>
<group col="2">
<field name="render_model" invisible="1"/>
<field name="subject" placeholder="Subject..."/>
</group>
<field name="body" options="{'style-inline': true}"/>