[ADD] relative datetime qweb widget
bzr revid: xmo@openerp.com-20131129085256-dwpcy0rd5v6bls9d
This commit is contained in:
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user