diff --git a/openerp/addons/base/ir/ir_qweb.py b/openerp/addons/base/ir/ir_qweb.py
index 38c65aa9838..4c9c20e348d 100644
--- a/openerp/addons/base/ir/ir_qweb.py
+++ b/openerp/addons/base/ir/ir_qweb.py
@@ -544,6 +544,20 @@ class ImageConverter(osv.AbstractModel):
return '
' % (Image.MIME[image.format], value)
+class CurrencyConverter(osv.AbstractModel):
+ """ ``currency`` converter, has a mandatory option ``currency``.
+
+ The currency field is a (float) value, the linked ``currency`` is an m2o
+ to a ``res.currency`` indicating how to format the field.
+ """
+ _name = 'ir.qweb.field.currency'
+ _inherit = 'ir.qweb.field'
+
+ def record_to_html(self, cr, uid, field_name, record, column, options):
+ return u'{0} {1}'.format(
+ record[field_name],
+ record[options['currency']].symbol)
+
def get_field_type(column, options):
""" Gets a t-field's effective type from the field's column and its options
"""
diff --git a/openerp/tests/addons/test_converter/ir.model.access.csv b/openerp/tests/addons/test_converter/ir.model.access.csv
index 66937821c94..137589d79fa 100644
--- a/openerp/tests/addons/test_converter/ir.model.access.csv
+++ b/openerp/tests/addons/test_converter/ir.model.access.csv
@@ -1,3 +1,4 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_converter_model,access_converter_model,model_test_converter_test_model,,1,1,1,1
access_test_converter_test_model_sub,access_test_converter_test_model_sub,model_test_converter_test_model_sub,,1,1,1,1
+access_test_converter_currency,access_test_converter_currency,model_test_converter_currency,,1,1,1,1
diff --git a/openerp/tests/addons/test_converter/models.py b/openerp/tests/addons/test_converter/models.py
index 99f32a5aa91..4e1e0c62e38 100644
--- a/openerp/tests/addons/test_converter/models.py
+++ b/openerp/tests/addons/test_converter/models.py
@@ -37,3 +37,11 @@ class test_model_sub(orm.Model):
'name': fields.char()
}
+
+class test_model_currency(orm.Model):
+ _name = 'test_converter.currency'
+
+ _columns = {
+ 'value': fields.float(digits=(16, 55)),
+ 'currency_id': fields.many2one('res.currency'),
+ }
diff --git a/openerp/tests/addons/test_converter/tests/test_html.py b/openerp/tests/addons/test_converter/tests/test_html.py
index 5874fa7e9a5..641aed5529a 100644
--- a/openerp/tests/addons/test_converter/tests/test_html.py
+++ b/openerp/tests/addons/test_converter/tests/test_html.py
@@ -1,10 +1,14 @@
# -*- encoding: utf-8 -*-
+import json
import os
+import xml.dom.minidom
from openerp.tests import common
directory = os.path.dirname(__file__)
+impl = xml.dom.minidom.getDOMImplementation()
+doc = impl.createDocument(None, None, None)
class TestExport(common.TransactionCase):
_model = None
@@ -69,6 +73,46 @@ class TestFloatExport(TestBasicExport):
value = converter(42.01234)
self.assertEqual(value, '42.01')
+class TestCurrencyExport(TestExport):
+ _model = 'test_converter.currency'
+
+ def setUp(self):
+ super(TestCurrencyExport, self).setUp()
+ self.Currency = self.registry('res.currency')
+
+ def create(self, model, context=None, **values):
+ return model.browse(
+ self.cr, self.uid,
+ model.create(self.cr, self.uid, values, context=context),
+ context=context)
+
+ def convert(self, obj):
+ converter = self.registry('ir.qweb.field.currency')
+ options = {'widget': 'currency', 'currency': 'currency_id'}
+ converted = converter.to_html(
+ self.cr, self.uid, 'value', obj, options,
+ doc.createElement('span'),
+ {'field': 'obj.value', 'field-options': json.dumps(options)},
+ '', {'obj': obj})
+ return converted
+
+ def test_currency_post(self):
+ currency = self.create(self.Currency, name="Test", symbol=u"test")
+ obj = self.create(self.Model, value=0.12, currency_id=currency.id)
+
+ converted = self.convert(obj)
+
+ self.assertEqual(
+ converted,
+ ''
+ '0.12 '
+ '{symbol}'.format(
+ obj=obj,
+ symbol=currency.symbol.encode('utf-8')
+ ),)
+
class TestTextExport(TestBasicExport):
def test_text(self):
converter = self.get_converter('text')
@@ -175,5 +219,6 @@ class TestHTMLExport(TestBasicExport):
input = 'span'
value = converter(input)
self.assertEqual(value, input)
+
# o2m, m2m?
# reference?