[ADD] relative datetime qweb widget

bzr revid: xmo@openerp.com-20131129085256-dwpcy0rd5v6bls9d
This commit is contained in:
Xavier Morel
2013-11-29 09:52:56 +01:00
parent 5b6512bb65
commit 71b25c5add
2 changed files with 36 additions and 2 deletions
+18 -1
View File
@@ -812,7 +812,6 @@ class DurationConverter(osv.AbstractModel):
locale = babel.Locale.parse(
self.user_lang(cr, uid, context=context).code)
print locale
factor = units[options['unit']]
sections = []
@@ -826,6 +825,24 @@ class DurationConverter(osv.AbstractModel):
sections.append(section)
return u' '.join(sections)
class RelativeDatetimeConverter(osv.AbstractModel):
_name = 'ir.qweb.field.relative'
_inherit = 'ir.qweb.field'
def value_to_html(self, cr, uid, value, column, options=None, context=None):
parse_format = openerp.tools.DEFAULT_SERVER_DATETIME_FORMAT
locale = babel.Locale.parse(
self.user_lang(cr, uid, context=context).code)
if isinstance(value, basestring):
value = datetime.datetime.strptime(value, parse_format)
# value should be a naive datetime in UTC. So is fields.datetime.now()
reference = datetime.datetime.strptime(column.now(), parse_format)
return babel.dates.format_timedelta(
value - reference, add_direction=True, locale=locale)
def get_field_type(column, options):
""" Gets a t-field's effective type from the field's column and its options
@@ -2,6 +2,7 @@
import json
import os
import xml.dom.minidom
import datetime
from openerp.tests import common
from openerp.addons.base.ir import ir_qweb
@@ -306,7 +307,7 @@ class TestDatetimeExport(TestBasicExport):
class TestDurationExport(TestBasicExport):
def setUp(self):
super(TestDurationExport, self).setUp()
# needs to have lang installed otherwise falls back on en_US
self.registry('res.lang').load_lang(self.cr, self.uid, 'fr_FR')
def test_negative(self):
@@ -338,3 +339,19 @@ class TestDurationExport(TestBasicExport):
result = converter(72, {'unit': 'second'}, {'lang': 'fr_FR'})
self.assertEqual(result, u"1 minute 12 secondes")
class TestRelativeDatetime(TestBasicExport):
# not sure how a test based on "current time" should be tested. Even less
# so as it would mostly be a test of babel...
def setUp(self):
super(TestRelativeDatetime, self).setUp()
# needs to have lang installed otherwise falls back on en_US
self.registry('res.lang').load_lang(self.cr, self.uid, 'fr_FR')
def test_basic(self):
converter = self.get_converter('datetime', 'relative')
t = datetime.datetime.utcnow() - datetime.timedelta(hours=1)
result = converter(t, context={'lang': 'fr_FR'})
self.assertEqual(result, u"il y a 1 heure")