[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:
committed by
Thibault Delavallée
parent
088d5e8dd3
commit
300a79c738
@@ -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}"/>
|
||||
|
||||
Reference in New Issue
Block a user