From 727b0e27c58734b899baf186eba7e73cec4274ba Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 7 Oct 2013 16:53:46 +0200 Subject: [PATCH] [ADD] currency qweb field widget, postfix currency bzr revid: xmo@openerp.com-20131007145346-a3hlb6xjdwroyvzb --- openerp/addons/base/ir/ir_qweb.py | 14 ++++++ .../addons/test_converter/ir.model.access.csv | 1 + openerp/tests/addons/test_converter/models.py | 8 ++++ .../addons/test_converter/tests/test_html.py | 45 +++++++++++++++++++ 4 files changed, 68 insertions(+) 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?