summaryrefslogtreecommitdiff
path: root/addons/decimal_precision
diff options
context:
space:
mode:
authorAntony Lesuisse <al@openerp.com>2014-01-31 01:51:57 +0100
committerAntony Lesuisse <al@openerp.com>2014-01-31 01:51:57 +0100
commit4b30f1fcbd8701f82dbbe4e5c8386ee432b063ac (patch)
tree93b17a03b45927c20fbb045cda8c8aa09d853409 /addons/decimal_precision
parentba2d4c90307661a79d78e6ce3b274b76b4c62717 (diff)
parent1c283ddf242f0681c1d060f3b8658efa3fcaa0a8 (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.py29
-rw-r--r--addons/decimal_precision/security/ir.model.access.csv1
-rw-r--r--addons/decimal_precision/tests/__init__.py6
-rw-r--r--addons/decimal_precision/tests/test_qweb_float.py66
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')