diff options
| author | Antony Lesuisse <al@openerp.com> | 2014-01-31 01:51:57 +0100 |
|---|---|---|
| committer | Antony Lesuisse <al@openerp.com> | 2014-01-31 01:51:57 +0100 |
| commit | 4b30f1fcbd8701f82dbbe4e5c8386ee432b063ac (patch) | |
| tree | 93b17a03b45927c20fbb045cda8c8aa09d853409 /addons/decimal_precision | |
| parent | ba2d4c90307661a79d78e6ce3b274b76b4c62717 (diff) | |
| parent | 1c283ddf242f0681c1d060f3b8658efa3fcaa0a8 (diff) | |
[MERGE] trunk-website-al
bzr revid: al@openerp.com-20140131005157-jkf8hz6fh2buml2c
Diffstat (limited to 'addons/decimal_precision')
| -rw-r--r-- | addons/decimal_precision/decimal_precision.py | 29 | ||||
| -rw-r--r-- | addons/decimal_precision/security/ir.model.access.csv | 1 | ||||
| -rw-r--r-- | addons/decimal_precision/tests/__init__.py | 6 | ||||
| -rw-r--r-- | addons/decimal_precision/tests/test_qweb_float.py | 66 |
4 files changed, 100 insertions, 2 deletions
diff --git a/addons/decimal_precision/decimal_precision.py b/addons/decimal_precision/decimal_precision.py index 0e72035651b..9af09704b61 100644 --- a/addons/decimal_precision/decimal_precision.py +++ b/addons/decimal_precision/decimal_precision.py @@ -22,10 +22,10 @@ import openerp from openerp import SUPERUSER_ID from openerp import tools -from openerp.osv import osv, fields +from openerp.osv import orm, fields from openerp.modules.registry import RegistryManager -class decimal_precision(osv.osv): +class decimal_precision(orm.Model): _name = 'decimal.precision' _columns = { 'name': fields.char('Usage', size=50, select=True, required=True), @@ -77,4 +77,29 @@ def get_precision(application): return (16, res) return change_digit +class DecimalPrecisionFloat(orm.AbstractModel): + """ Override qweb.field.float to add a `decimal_precision` domain option + and use that instead of the column's own value if it is specified + """ + _inherit = 'ir.qweb.field.float' + + + def precision(self, cr, uid, column, options=None, context=None): + dp = options and options.get('decimal_precision') + if dp: + return self.pool['decimal.precision'].precision_get( + cr, uid, dp) + + return super(DecimalPrecisionFloat, self).precision( + cr, uid, column, options=options, context=context) + +class DecimalPrecisionTestModel(orm.Model): + _name = 'decimal.precision.test' + + _columns = { + 'float': fields.float(), + 'float_2': fields.float(digits=(16, 2)), + 'float_4': fields.float(digits=(16, 4)), + } + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/decimal_precision/security/ir.model.access.csv b/addons/decimal_precision/security/ir.model.access.csv index aa203eae141..d55da432c57 100644 --- a/addons/decimal_precision/security/ir.model.access.csv +++ b/addons/decimal_precision/security/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_decimal_precision_config,decimal.precision configuration,model_decimal_precision,base.group_system,1,1,1,1
access_decimal_precision_all,decimal.precision,model_decimal_precision,,1,0,0,0
+access_decimal_precision_test_all,decimal.precision.test,model_decimal_precision_test,,1,1,1,1
diff --git a/addons/decimal_precision/tests/__init__.py b/addons/decimal_precision/tests/__init__.py new file mode 100644 index 00000000000..feee24c8f15 --- /dev/null +++ b/addons/decimal_precision/tests/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +import test_qweb_float + +checks = [ + test_qweb_float +] diff --git a/addons/decimal_precision/tests/test_qweb_float.py b/addons/decimal_precision/tests/test_qweb_float.py new file mode 100644 index 00000000000..93334170f37 --- /dev/null +++ b/addons/decimal_precision/tests/test_qweb_float.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- +from openerp.tests import common + +class TestFloatExport(common.TransactionCase): + def setUp(self): + super(TestFloatExport, self).setUp() + self.Model = self.registry('decimal.precision.test') + + def get_converter(self, name): + converter = self.registry('ir.qweb.field.float') + column = self.Model._all_columns[name].column + + return lambda value, options=None: converter.value_to_html( + self.cr, self.uid, value, column, options=options, context=None) + + def test_basic_float(self): + converter = self.get_converter('float') + self.assertEqual( + converter(42.0), + "42.0") + self.assertEqual( + converter(42.12345), + "42.12345") + + converter = self.get_converter('float_2') + self.assertEqual( + converter(42.0), + "42.00") + self.assertEqual( + converter(42.12345), + "42.12") + + converter = self.get_converter('float_4') + self.assertEqual( + converter(42.0), + '42.0000') + self.assertEqual( + converter(42.12345), + '42.1234') + + def test_precision_domain(self): + DP = self.registry('decimal.precision') + DP.create(self.cr, self.uid, { + 'name': 'A', + 'digits': 2, + }) + DP.create(self.cr, self.uid, { + 'name': 'B', + 'digits': 6, + }) + + converter = self.get_converter('float') + self.assertEqual( + converter(42.0, {'decimal_precision': 'A'}), + '42.00') + self.assertEqual( + converter(42.0, {'decimal_precision': 'B'}), + '42.000000') + + converter = self.get_converter('float_4') + self.assertEqual( + converter(42.12345, {'decimal_precision': 'A'}), + '42.12') + self.assertEqual( + converter(42.12345, {'decimal_precision': 'B'}), + '42.123450') |
