From b9dfef2fab1a76020828da841b14daa1efb7552c Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 21 Oct 2013 17:26:39 +0200 Subject: [PATCH] [ADD] formatting of date and datetime t-field bzr revid: xmo@openerp.com-20131021152639-2o2j2knhuppdlbzm --- openerp/addons/base/ir/ir_qweb.py | 34 +++++++++++++++++++ .../addons/base/security/ir.model.access.csv | 2 ++ .../addons/test_converter/tests/test_html.py | 25 ++++++++++++++ 3 files changed, 61 insertions(+) diff --git a/openerp/addons/base/ir/ir_qweb.py b/openerp/addons/base/ir/ir_qweb.py index be15e9fd58b..866e97a4e85 100644 --- a/openerp/addons/base/ir/ir_qweb.py +++ b/openerp/addons/base/ir/ir_qweb.py @@ -13,6 +13,7 @@ import math import werkzeug.utils from openerp.osv import osv, orm, fields +import openerp.tools _logger = logging.getLogger(__name__) @@ -593,6 +594,39 @@ class FloatConverter(osv.AbstractModel): return werkzeug.utils.escape( lang.format(fmt.format(precision=precision), value, grouping=True)) +class DateConverter(osv.AbstractModel): + _name = 'ir.qweb.field.date' + _inherit = 'ir.qweb.field' + + def value_to_html(self, cr, uid, value, column, options=None, context=None): + lang = self.user_lang(cr, uid, context=context) + + parse_format = openerp.tools.DEFAULT_SERVER_DATE_FORMAT + out_format = lang.date_format.encode('utf-8') + + if isinstance(value, basestring): + value = datetime.datetime.strptime(value, parse_format) + + return value.strftime(out_format) + +class DateTimeConverter(osv.AbstractModel): + _name = 'ir.qweb.field.datetime' + _inherit = 'ir.qweb.field' + + def value_to_html(self, cr, uid, value, column, options=None, context=None): + lang = self.user_lang(cr, uid, context=context) + + parse_format = openerp.tools.DEFAULT_SERVER_DATETIME_FORMAT + out_format = (u"%s %s" % (lang.date_format, lang.time_format)).encode('utf-8') + + if isinstance(value, basestring): + value = datetime.datetime.strptime(value, parse_format) + + value = column.context_timestamp( + cr, uid, timestamp=value, context=context) + + return value.strftime(out_format) + class TextConverter(osv.AbstractModel): _name = 'ir.qweb.field.text' _inherit = 'ir.qweb.field' diff --git a/openerp/addons/base/security/ir.model.access.csv b/openerp/addons/base/security/ir.model.access.csv index 1401b188e0a..4a5331e87c3 100644 --- a/openerp/addons/base/security/ir.model.access.csv +++ b/openerp/addons/base/security/ir.model.access.csv @@ -114,6 +114,8 @@ access_ir_qweb,access_ir_qweb,model_ir_qweb,,0,0,0,0 access_ir_qweb_field,access_ir_qweb_field,model_ir_qweb_field,,0,0,0,0 access_ir_qweb_field_float,access_ir_qweb_field_float,model_ir_qweb_field_float,,0,0,0,0 +access_ir_qweb_field_date,access_ir_qweb_field_date,model_ir_qweb_field_date,,0,0,0,0 +access_ir_qweb_field_datetime,access_ir_qweb_field_datetime,model_ir_qweb_field_datetime,,0,0,0,0 access_ir_qweb_field_text,access_ir_qweb_field_text,model_ir_qweb_field_text,,0,0,0,0 access_ir_qweb_field_selection,access_ir_qweb_field_selection,model_ir_qweb_field_selection,,0,0,0,0 access_ir_qweb_field_many2one,access_ir_qweb_field_many2one,model_ir_qweb_field_many2one,,0,0,0,0 diff --git a/openerp/tests/addons/test_converter/tests/test_html.py b/openerp/tests/addons/test_converter/tests/test_html.py index d07ea62a2a6..08e6ee96b62 100644 --- a/openerp/tests/addons/test_converter/tests/test_html.py +++ b/openerp/tests/addons/test_converter/tests/test_html.py @@ -263,5 +263,30 @@ class TestHTMLExport(TestBasicExport): value = converter(input) self.assertEqual(value, input) +class TestDatetimeExport(TestBasicExport): + def setUp(self): + super(TestDatetimeExport, self).setUp() + # set user tz to known value + Users = self.registry('res.users') + Users.write(self.cr, self.uid, self.uid, { + 'tz': 'Pacific/Niue' + }, context=None) + + def test_date(self): + converter = self.get_converter('date') + + value = converter('2011-05-03') + + # default lang/format is US + self.assertEqual(value, '05/03/2011') + + def test_datetime(self): + converter = self.get_converter('datetime') + + value = converter('2011-05-03 11:12:13') + + # default lang/format is US + self.assertEqual(value, '05/03/2011 00:12:13') + # o2m, m2m? # reference?