From 581275a63c7cf054efe57a150d44f00bbf92d379 Mon Sep 17 00:00:00 2001 From: Jeremy Kersten Date: Thu, 7 Aug 2014 17:38:01 +0200 Subject: [PATCH] [IMP] email_template: add a lambda function to allow a user to format a date from a template mail into a specific timezone, and/or in a specific format. Eg: ${format_tz(object.name, object.employee_id.address_id.tz,'%m/%d/%Y %H:%M')} --- addons/email_template/email_template.py | 28 ++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/addons/email_template/email_template.py b/addons/email_template/email_template.py index 826346aaaad..4c569fe50c1 100644 --- a/addons/email_template/email_template.py +++ b/addons/email_template/email_template.py @@ -34,9 +34,34 @@ from openerp import tools from openerp.tools.translate import _ from urllib import urlencode, quote as quote - _logger = logging.getLogger(__name__) + +def format_tz(pool, cr, uid, dt, tz=False, format=False, context=None): + context = dict(context or {}) + if tz: + context['tz'] = tz or pool.get('res.users').read(cr, SUPERUSER_ID, uid, ['tz'])['tz'] or "UTC" + timestamp = datetime.datetime.strptime(dt, tools.DEFAULT_SERVER_DATETIME_FORMAT) + + ts = fields.datetime.context_timestamp(cr, uid, timestamp, context) + + if format: + return ts.strftime(format) + else: + lang = context.get("lang") + lang_params = {} + if lang: + res_lang = pool.get('res.lang') + ids = res_lang.search(cr, uid, [("code", "=", lang)]) + if ids: + lang_params = res_lang.read(cr, uid, ids[0], ["date_format", "time_format"]) + format_date = lang_params.get("date_format", '%B-%d-%Y') + format_time = lang_params.get("time_format", '%I-%M %p') + + fdate = ts.strftime(format_date) + ftime = ts.strftime(format_time) + return "%s %s (%s)" % (fdate, ftime, tz) + try: # We use a jinja2 sandboxed environment to render mako templates. # Note that the rendering does not cover all the mako syntax, in particular @@ -164,6 +189,7 @@ class email_template(osv.osv): user = self.pool.get('res.users').browse(cr, uid, uid, context=context) records = self.pool[model].browse(cr, uid, res_ids, context=context) or [None] variables = { + 'format_tz': lambda dt, tz=False, format=False: format_tz(self.pool, cr, uid, dt, tz, format, context), 'user': user, 'ctx': context, # context kw would clash with mako internals }