Browse Source
Merge pull request #42 from savoirfairelinux/add_email_template_dateutil
Merge pull request #42 from savoirfairelinux/add_email_template_dateutil
7.0 Add email_template_dateutilpull/98/head
Pedro M. Baeza
10 years ago
3 changed files with 169 additions and 0 deletions
-
23email_template_dateutil/__init__.py
-
59email_template_dateutil/__openerp__.py
-
87email_template_dateutil/email_template.py
@ -0,0 +1,23 @@ |
|||||
|
# -*- encoding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# OpenERP, Open Source Management Solution |
||||
|
# This module copyright (C) 2014 Savoir-faire Linux |
||||
|
# (<http://www.savoirfairelinux.com>). |
||||
|
# |
||||
|
# 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 <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
|
||||
|
from . import email_template |
@ -0,0 +1,59 @@ |
|||||
|
# -*- encoding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# OpenERP, Open Source Management Solution |
||||
|
# This module copyright (C) 2014 Savoir-faire Linux |
||||
|
# (<http://www.savoirfairelinux.com>). |
||||
|
# |
||||
|
# 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 <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
|
||||
|
{ |
||||
|
'name': 'Email Template Date Utils', |
||||
|
'version': '0.1', |
||||
|
'author': 'Savoir-faire Linux', |
||||
|
'maintainer': 'Savoir-faire Linux', |
||||
|
'website': 'http://www.savoirfairelinux.com', |
||||
|
'license': 'AGPL-3', |
||||
|
'category': 'Others', |
||||
|
'summary': 'Adds extra date functions for email templates', |
||||
|
'description': """ |
||||
|
This module adds an extra filter in email templates: |
||||
|
|
||||
|
format_date(format, tz=tzname) : parses and formats a date or datetime string. |
||||
|
Optional parameter tz allows specifying the timezone to use. Otherwise, the |
||||
|
user's timezone or server timezone will be used. If none are found, time is |
||||
|
left in UTC |
||||
|
|
||||
|
Example: ${ object.date_field|format_date('%m/%d/%Y') } |
||||
|
|
||||
|
|
||||
|
Contributors |
||||
|
------------ |
||||
|
* Vincent Vinet (vincent.vinet@savoirfairelinux.com) |
||||
|
""", |
||||
|
'depends': [ |
||||
|
'email_template', |
||||
|
], |
||||
|
'external_dependencies': { |
||||
|
'python': [], |
||||
|
}, |
||||
|
'data': [ |
||||
|
], |
||||
|
'demo': [], |
||||
|
'test': [], |
||||
|
'installable': True, |
||||
|
'auto_install': False, |
||||
|
} |
@ -0,0 +1,87 @@ |
|||||
|
# -*- encoding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# OpenERP, Open Source Management Solution |
||||
|
# This module copyright (C) 2014 Savoir-faire Linux |
||||
|
# (<http://www.savoirfairelinux.com>). |
||||
|
# |
||||
|
# 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 <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
|
||||
|
from datetime import datetime |
||||
|
import logging |
||||
|
_logger = logging.getLogger(__name__) |
||||
|
|
||||
|
import pytz |
||||
|
from jinja2 import contextfilter |
||||
|
|
||||
|
from openerp.tools import ( |
||||
|
DEFAULT_SERVER_DATETIME_FORMAT as DTFMT, |
||||
|
DEFAULT_SERVER_DATE_FORMAT as DFMT, |
||||
|
) |
||||
|
from openerp.addons.email_template import email_template |
||||
|
|
||||
|
|
||||
|
@contextfilter |
||||
|
def format_date(context, dtstr, new_format=None, tz=None): |
||||
|
if not dtstr: |
||||
|
return dtstr |
||||
|
|
||||
|
if not new_format: |
||||
|
if context.get("user") and context["user"].lang: |
||||
|
user = context["user"] |
||||
|
lang_obj = user.pool["res.lang"] |
||||
|
cr, uid = user._cr, user._uid |
||||
|
lang = lang_obj.search(cr, uid, [ |
||||
|
('code', '=', user.lang) |
||||
|
]) |
||||
|
if lang: |
||||
|
new_format = lang_obj.browse(cr, uid, lang[0]).date_format |
||||
|
|
||||
|
new_format = new_format or DFMT |
||||
|
|
||||
|
try: |
||||
|
date = datetime.strptime(dtstr, DTFMT) |
||||
|
except ValueError: |
||||
|
# Maybe this is a date, not datetime |
||||
|
date = datetime.strptime(dtstr, DFMT) |
||||
|
else: |
||||
|
# If this was a date, calculating timezones will give unexpected |
||||
|
# results. Any timezone with a negative offset will be the day |
||||
|
# before, since (midnight - anything) is the previous day |
||||
|
if tz: |
||||
|
tz_name = tz |
||||
|
elif context.get("user") and context["user"].tz: |
||||
|
tz_name = context["user"].tz |
||||
|
else: |
||||
|
tz_name = context.get("ctx", {}).get("tz") |
||||
|
|
||||
|
if tz_name: |
||||
|
try: |
||||
|
utc = pytz.timezone('UTC') |
||||
|
context_tz = pytz.timezone(tz_name) |
||||
|
utc_timestamp = utc.localize(date, is_dst=False) |
||||
|
date = utc_timestamp.astimezone(context_tz) |
||||
|
except Exception: |
||||
|
_logger.debug("failed to compute context/client-specific " |
||||
|
"timestamp, using the UTC value", |
||||
|
exc_info=True) |
||||
|
|
||||
|
return date.strftime(new_format) |
||||
|
|
||||
|
|
||||
|
email_template.mako_template_env.filters.update( |
||||
|
format_date=format_date, |
||||
|
) |
Write
Preview
Loading…
Cancel
Save
Reference in new issue