From ce4fa016546b39920356989b96d5fa32aa290e7d Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Fri, 31 May 2013 09:53:13 +0200 Subject: [PATCH 1/2] [ADD] email_template_template --- email_template_template/__init__.py | 1 + email_template_template/__openerp__.py | 52 ++++++++++++++ email_template_template/model/__init__.py | 21 ++++++ .../model/email_template.py | 61 ++++++++++++++++ .../view/email_template.xml | 71 +++++++++++++++++++ 5 files changed, 206 insertions(+) create mode 100644 email_template_template/__init__.py create mode 100644 email_template_template/__openerp__.py create mode 100644 email_template_template/model/__init__.py create mode 100644 email_template_template/model/email_template.py create mode 100644 email_template_template/view/email_template.xml diff --git a/email_template_template/__init__.py b/email_template_template/__init__.py new file mode 100644 index 000000000..16e8b082f --- /dev/null +++ b/email_template_template/__init__.py @@ -0,0 +1 @@ +import model diff --git a/email_template_template/__openerp__.py b/email_template_template/__openerp__.py new file mode 100644 index 000000000..ed8de2be1 --- /dev/null +++ b/email_template_template/__openerp__.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2013 Therp BV (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +{ + "name": "Templates for email templates", + "version": "1.0", + "author": "Therp BV", + "category": 'Tools', + 'complexity': "expert", + "description": """If an organisation's email layout is a bit more +complicated, changes can be tedious when having to do that across several email +templates. So this addon allows to define templates for mails that is referenced +by other mail templates. +This way we can put the layout parts into the template template and only content +in the other templates. Changing the layout is then only a matter of changing +the template template. + + +Usage: +Create an email template with the related document model 'Email Templates'. Now +most of the fields gray out and you can only edit body_text and body_html. Be +sure to use ${body_text} and ${body_html} respectively in your template +template. + +Then select this newly created template templates in one of your actual +templates.""", + 'website': 'http://therp.nl', + 'images': [], + 'depends': ['email_template'], + 'data': [ + 'view/email_template.xml', + ], + "license": 'AGPL-3', +} +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/email_template_template/model/__init__.py b/email_template_template/model/__init__.py new file mode 100644 index 000000000..90f325845 --- /dev/null +++ b/email_template_template/model/__init__.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2013 Therp BV (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +import email_template diff --git a/email_template_template/model/email_template.py b/email_template_template/model/email_template.py new file mode 100644 index 000000000..2d1b2091c --- /dev/null +++ b/email_template_template/model/email_template.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2013 Therp BV (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +from openerp.osv.orm import Model +from openerp.osv import fields +from openerp.addons.email_template.email_template import mako_template_env + + +class email_template(Model): + _inherit = 'email.template' + + def _get_is_template_template(self, cr, uid, ids, fields_name, arg, + context=None): + cr.execute('''select + id, (select count(*) > 0 from email_template e + where email_template_id=email_template.id) + from email_template + where id in %s''', (tuple(ids),)) + return dict(cr.fetchall()) + + _columns = { + 'email_template_id': fields.many2one('email.template', 'Template'), + 'is_template_template': fields.function( + _get_is_template_template, type='boolean', + string='Is a template template'), + } + + def get_email_template(self, cr, uid, template_id=False, record_id=None, + context=None): + this = super(email_template, self).get_email_template( + cr, uid, template_id, record_id, context) + + if this.email_template_id and not this.is_template_template: + for field in ['body_html']: + if this[field] and this.email_template_id[field]: + try: + mako_template_env.autoescape = False + this._data[this.id][field] = self.render_template( + cr, uid, this.email_template_id[field], + this.email_template_id.model, + this.id, this._context) + finally: + mako_template_env.autoescape = True + return this diff --git a/email_template_template/view/email_template.xml b/email_template_template/view/email_template.xml new file mode 100644 index 000000000..e38cd3c76 --- /dev/null +++ b/email_template_template/view/email_template.xml @@ -0,0 +1,71 @@ + + + + + email.template.form + email.template + + form + + + + + + + + + + {'readonly': [('is_template_template','=',True)]} + + + + 0 + + {'readonly': ['|',('is_template_template','=',True),('model_id', '=', %(email_template.model_email_template)s)]} + + + + 0 + + {'readonly': ['|',('is_template_template','=',True),('model_id', '=', %(email_template.model_email_template)s)]} + + + + + {'readonly': ['|',('is_template_template','=',True),('model_id', '=', %(email_template.model_email_template)s)]} + + + + + {'readonly': ['|',('is_template_template','=',True),('model_id', '=', %(email_template.model_email_template)s)]} + + + + + {'readonly': ['|',('is_template_template','=',True),('model_id', '=', %(email_template.model_email_template)s)]} + + + + + {'readonly': ['|',('is_template_template','=',True),('model_id', '=', %(email_template.model_email_template)s)]} + + + + + {'readonly': ['|',('is_template_template','=',True),('model_id', '=', %(email_template.model_email_template)s)]} + + + + 0 + + {'readonly': ['|',('is_template_template','=',True),('model_id', '=', %(email_template.model_email_template)s)]} + + + + + + + From 414316fdcc0aede1bee05d673d69d8bab7e785a5 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Mon, 17 Jun 2013 11:03:49 +0200 Subject: [PATCH 2/2] [IMP] add a usage example in the description --- email_template_template/__openerp__.py | 46 +++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/email_template_template/__openerp__.py b/email_template_template/__openerp__.py index ed8de2be1..6f32b3da0 100644 --- a/email_template_template/__openerp__.py +++ b/email_template_template/__openerp__.py @@ -40,7 +40,51 @@ sure to use ${body_text} and ${body_html} respectively in your template template. Then select this newly created template templates in one of your actual -templates.""", +templates. + +For example, create a template template +----- +Example Corp logo +Example Corp header +${object.body_text} <- this gets evaluated to the body_text of a template using this template template +Example Corp +Example street 42 +Example city +Example Corp footer +----- + +Then in your template you write + +----- +Dear ${object.partner_id.name}, + +Your order has been booked on date ${object.date} for a total amount of ${object.sum}. +----- + +And it will be evaluated to + +----- +Example Corp logo +Example Corp header +Dear Jane Doe, + +Your order has been booked on date 04/17/2013 for a total amount of 42. +Example Corp +Example street 42 +Example city +Example Corp footer +----- + +Given the way evaluation works internally (body_text of the template template is evaluated two times, first with the instance of email.template of your own template, then with the object your template refers to), you can do some trickery if you know that a template template is always used with the same kind of model (that is, models that have the same field name): + +In your template template: + +------ +Dear ${'${object.name}'}, <-- gets evaluated to "${object.name}" in the first step, then to the content of object.name +${object.body_html} +Best, +Example Corp +------""", 'website': 'http://therp.nl', 'images': [], 'depends': ['email_template'],