mirror of https://github.com/OCA/social.git
[ADD] email_template_qweb
parent
0311dfda03
commit
9b83f6f182
|
@ -0,0 +1,71 @@
|
|||
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
|
||||
:alt: License: AGPL-3
|
||||
|
||||
========================
|
||||
QWeb for email templates
|
||||
========================
|
||||
|
||||
This module was written to allow you to write email templates in QWeb instead
|
||||
of jinja2. The advantage here is that with QWeb, you can make use of
|
||||
inheritance and the ``call`` statement, which allows you to reuse designs and
|
||||
snippets in multiple templates, making your development process simpler.
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
To use this module, you need to:
|
||||
|
||||
* Select `QWeb` in the field `Body templating engine`
|
||||
* Select a QWeb view to be used to render the body field
|
||||
* Apart from QWeb's standard variables, you also have access to ``object`` and
|
||||
``email_template``, which are browse records of the current object and the
|
||||
email template in use, respectively.
|
||||
|
||||
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
|
||||
:alt: Try me on Runbot
|
||||
:target: https://runbot.odoo-community.org/runbot/149/8.0
|
||||
|
||||
Demo data contains an example on how to separate corporate identity from a
|
||||
template's content.
|
||||
|
||||
For further information, please visit:
|
||||
|
||||
* https://www.odoo.com/forum/help-1
|
||||
|
||||
Bug Tracker
|
||||
===========
|
||||
|
||||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/server-tools/issues>`_.
|
||||
In case of trouble, please check there if your issue has already been reported.
|
||||
If you spotted it first, help us smashing it by providing a detailed and welcomed feedback
|
||||
`here <https://github.com/OCA/server-tools/issues/new?body=module:%20email_template_qweb%0Aversion:%209.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Contributors
|
||||
------------
|
||||
|
||||
* Holger Brunn <hbrunn@therp.nl>
|
||||
* Dave Lasley <dave@laslabs.com>
|
||||
|
||||
Do not contact contributors directly about help with questions or problems concerning
|
||||
this addon, but use the `forum <https://www.odoo.com/forum/help-1>`_,
|
||||
the `community mailing list <mailto:community@mail.odoo.com>`_,
|
||||
or the `appropriate specialized mailinglist <https://odoo-community.org/groups>`_ for help,
|
||||
and the bug tracker linked in `Bug Tracker`_ above for technical issues.
|
||||
|
||||
Maintainer
|
||||
----------
|
||||
|
||||
.. image:: https://odoo-community.org/logo.png
|
||||
:alt: Odoo Community Association
|
||||
:target: https://odoo-community.org
|
||||
|
||||
This module is maintained by the OCA.
|
||||
|
||||
OCA, or the Odoo Community Association, is a nonprofit organization whose
|
||||
mission is to support the collaborative development of Odoo features and
|
||||
promote its widespread use.
|
||||
|
||||
To contribute to this module, please visit https://odoo-community.org.
|
|
@ -0,0 +1,4 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# © 2016 Therp BV <http://therp.nl>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
from . import models
|
|
@ -0,0 +1,21 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# © 2016 Therp BV <http://therp.nl>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
{
|
||||
"name": "QWeb for email templates",
|
||||
"version": "9.0.1.0.0",
|
||||
"author": "Therp BV,Odoo Community Association (OCA)",
|
||||
"license": "AGPL-3",
|
||||
"category": "Marketing",
|
||||
"summary": "Use the QWeb templating mechanism for emails",
|
||||
"depends": [
|
||||
'mail',
|
||||
],
|
||||
"demo": [
|
||||
"demo/ir_ui_view.xml",
|
||||
"demo/mail_template.xml",
|
||||
],
|
||||
"data": [
|
||||
"views/mail_template.xml",
|
||||
],
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<odoo>
|
||||
<template id="view_email_template_corporate_identity">
|
||||
<body>
|
||||
<html>
|
||||
<img style="float: right" t-attf-src="data:image;base64,{{env.user.company_id.logo}}" />
|
||||
<!-- if some template calling us sets this variable,
|
||||
we print a h1 tag /-->
|
||||
<h1 t-if="email_heading"><t t-esc="email_heading" /></h1>
|
||||
<t t-raw="0" />
|
||||
<!-- use some standard footer if the user doesn't have
|
||||
a signature /-->
|
||||
<footer t-if="not email_use_user_signature">
|
||||
<p>
|
||||
<a t-att-href="env.user.company_id.website">
|
||||
<t t-esc="env.user.company_id.name" />
|
||||
</a>
|
||||
</p>
|
||||
<p><t t-esc="env.user.company_id.phone" /></p>
|
||||
</footer>
|
||||
<footer t-if="email_use_user_signature">
|
||||
<t t-raw="env.user.signature" />
|
||||
</footer>
|
||||
</html>
|
||||
</body>
|
||||
</template>
|
||||
<template id="view_email_template_demo1">
|
||||
<!-- because we can simply call the ci here, we don't need to
|
||||
repeat it /-->
|
||||
<t t-call="email_template_qweb.view_email_template_corporate_identity">
|
||||
<!-- the template we call uses this as title if we set it /-->
|
||||
<t t-set="email_heading" t-value="email_template.subject" />
|
||||
<h2>Dear <t t-esc="object.name" />,</h2>
|
||||
<p>
|
||||
This is an email template using qweb.
|
||||
</p>
|
||||
</t>
|
||||
</template>
|
||||
</odoo>
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<odoo>
|
||||
<record id="email_template_demo1" model="mail.template">
|
||||
<field name="name">QWeb demo</field>
|
||||
<field name="body_type">qweb</field>
|
||||
<field name="body_view_id" ref="view_email_template_demo1" />
|
||||
<field name="model_id" ref="base.model_res_users" />
|
||||
<field name="subject">QWeb demo email</field>
|
||||
</record>
|
||||
</odoo>
|
|
@ -0,0 +1,4 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# © 2016 Therp BV <http://therp.nl>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
from . import mail_template
|
|
@ -0,0 +1,35 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# © 2016 Therp BV <http://therp.nl>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
from openerp import api, fields, tools, models
|
||||
|
||||
|
||||
class MailTemplate(models.Model):
|
||||
_inherit = 'mail.template'
|
||||
|
||||
body_type = fields.Selection(
|
||||
[('jinja2', 'Jinja2'), ('qweb', 'QWeb')], 'Body templating engine',
|
||||
default='jinja2', required=True)
|
||||
body_view_id = fields.Many2one(
|
||||
'ir.ui.view', 'Body view', domain=[('type', '=', 'qweb')])
|
||||
body_view_arch = fields.Text(related=['body_view_id', 'arch'])
|
||||
|
||||
@api.multi
|
||||
def generate_email(self, res_ids, fields=None):
|
||||
result = super(MailTemplate, self).generate_email(
|
||||
res_ids, fields=fields
|
||||
)
|
||||
for record_id, this in self.get_email_template(res_ids).iteritems():
|
||||
if this.body_type == 'qweb' and\
|
||||
(not fields or 'body_html' in fields):
|
||||
for record in self.env[this.model].browse(record_id):
|
||||
result[record_id]['body_html'] = self.render_post_process(
|
||||
this.body_view_id.render({
|
||||
'object': record,
|
||||
'email_template': this,
|
||||
})
|
||||
)
|
||||
result[record_id]['body'] = tools.html_sanitize(
|
||||
result[record_id]['body_html']
|
||||
)
|
||||
return result
|
Binary file not shown.
After Width: | Height: | Size: 9.2 KiB |
|
@ -0,0 +1,4 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# © 2016 Therp BV <http://therp.nl>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
from . import test_mail_template_qweb
|
|
@ -0,0 +1,17 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# © 2016 Therp BV <http://therp.nl>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
from openerp.tests.common import TransactionCase
|
||||
|
||||
|
||||
class TestMailTemplateQweb(TransactionCase):
|
||||
def test_email_template_qweb(self):
|
||||
template = self.env.ref('email_template_qweb.email_template_demo1')
|
||||
mail_values = template.generate_email([self.env.user.id])
|
||||
self.assertTrue(
|
||||
# this comes from the called template if everything worked
|
||||
'<footer>' in mail_values[self.env.user.id]['body_html'],
|
||||
'Did not rcv rendered template in response. Got: \n%s\n' % (
|
||||
mail_values[self.env.user.id]['body_html']
|
||||
)
|
||||
)
|
|
@ -0,0 +1,30 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<odoo>
|
||||
<record id="email_template_form" model="ir.ui.view">
|
||||
<field name="model">mail.template</field>
|
||||
<field name="inherit_id" ref="mail.email_template_form" />
|
||||
<field name="arch" type="xml">
|
||||
<field name="model_id" position="after">
|
||||
<field name="body_type" />
|
||||
</field>
|
||||
<field name="body_html" position="before">
|
||||
<group attrs="{'invisible': [('body_type', '!=', 'qweb')]}">
|
||||
<field name="body_view_id" attrs="{'required': [('body_type', '=', 'qweb')]}" />
|
||||
<field name="body_view_arch" attrs="{'required': [('body_type', '=', 'qweb')], 'invisible': [('body_view_id', '=', False)]}" />
|
||||
</group>
|
||||
</field>
|
||||
<field name="body_html" position="attributes">
|
||||
<attribute name="attrs">{'invisible': [('body_type', '!=', 'jinja2')]}</attribute>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
<record id="email_template_tree" model="ir.ui.view">
|
||||
<field name="model">mail.template</field>
|
||||
<field name="inherit_id" ref="mail.email_template_tree" />
|
||||
<field name="arch" type="xml">
|
||||
<field name="report_name" position="before">
|
||||
<field name="body_type" />
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
Loading…
Reference in New Issue