[ADD] decimal precision support to float t-field rendering
bzr revid: xmo@openerp.com-20131021094533-e510uy6byck85xma
This commit is contained in:
parent
0a74b6ef77
commit
ff07f6dcdd
|
@ -22,9 +22,9 @@
|
||||||
import openerp
|
import openerp
|
||||||
from openerp import SUPERUSER_ID
|
from openerp import SUPERUSER_ID
|
||||||
from openerp import tools
|
from openerp import tools
|
||||||
from openerp.osv import osv, fields
|
from openerp.osv import orm, fields
|
||||||
|
|
||||||
class decimal_precision(osv.osv):
|
class decimal_precision(orm.Model):
|
||||||
_name = 'decimal.precision'
|
_name = 'decimal.precision'
|
||||||
_columns = {
|
_columns = {
|
||||||
'name': fields.char('Usage', size=50, select=True, required=True),
|
'name': fields.char('Usage', size=50, select=True, required=True),
|
||||||
|
@ -71,4 +71,29 @@ def get_precision(application):
|
||||||
return (16, res)
|
return (16, res)
|
||||||
return change_digit
|
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:
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import test_qweb_float
|
||||||
|
|
||||||
|
checks = [
|
||||||
|
test_qweb_float
|
||||||
|
]
|
|
@ -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')
|
Loading…
Reference in New Issue