diff --git a/odoo/addons/base/models/ir_qweb_fields.py b/odoo/addons/base/models/ir_qweb_fields.py index 6ee26f0c085..d08c8c14cd8 100644 --- a/odoo/addons/base/models/ir_qweb_fields.py +++ b/odoo/addons/base/models/ir_qweb_fields.py @@ -577,6 +577,10 @@ class DurationConverter(models.AbstractModel): r = round((value * factor) / round_to) * round_to sections = [] + sign = '' + if value < 0: + r = -r + sign = '-' if options.get('digital'): for unit, label, secs_per_unit in TIMEDELTA_UNITS: @@ -585,14 +589,9 @@ class DurationConverter(models.AbstractModel): v, r = divmod(r, secs_per_unit) if not v and (secs_per_unit > factor or secs_per_unit < round_to): continue - if len(sections): - sections.append(':') - sections.append("%02.0f" % int(round(v))) - return ''.join(sections) + sections.append(u"%02.0f" % int(round(v))) + return sign + u':'.join(sections) - if value < 0: - r = -r - sections.append('-') for unit, label, secs_per_unit in TIMEDELTA_UNITS: v, r = divmod(r, secs_per_unit) if not v: @@ -607,7 +606,9 @@ class DurationConverter(models.AbstractModel): if section: sections.append(section) - return ' '.join(sections) + if sign: + sections.insert(0, sign) + return u' '.join(sections) class RelativeDatetimeConverter(models.AbstractModel): diff --git a/odoo/addons/test_converter/tests/test_html.py b/odoo/addons/test_converter/tests/test_html.py index 9a56838585e..49544b84fba 100644 --- a/odoo/addons/test_converter/tests/test_html.py +++ b/odoo/addons/test_converter/tests/test_html.py @@ -333,6 +333,11 @@ class TestDurationExport(TestBasicExport): result = converter(72, {'unit': 'second'}, {'lang': 'fr_FR'}) self.assertEqual(result, u"1 minute 12 secondes") + def test_negative_digital(self): + converter = self.get_converter('float', 'duration') + result = converter(-90, {'unit': 'minute', 'round': 'minute', 'digital': True}, {'lang': 'fr_FR'}) + self.assertEqual(result, u'-01:30') + class TestRelativeDatetime(TestBasicExport): # not sure how a test based on "current time" should be tested. Even less