[FIX] product: remove digits_precision from uom factor fields
authorCedric Snauwaert <csn@openerp.com>
Thu, 16 Oct 2014 15:23:51 +0000 (17:23 +0200)
committerOlivier Dony <odo@openerp.com>
Wed, 22 Oct 2014 12:28:34 +0000 (14:28 +0200)
commitfa2f7b86bff9cecad73ef14fdc1480c7bca2a584
treeb57c358c46c4f9cf827403b8c8b7aedab32eb516
parent7705f883d23b71cdb1d30300ce69d9df665ae55e
[FIX] product: remove digits_precision from uom factor fields

Remove the hardcoded precision of 12 on factor and factor_inv,
to use the complete natural precision of NUMERIC types,
preserving all significant digits.

e.g. a UoM with a factor_inv of 6.0 used to be computed as:
factor_inv: 6.0 -> factor: 0.166666666667 (1.0/6.0, rounded to 12 digits) -> factor_inv: 5.999999999988 (1.0/factor)
which could lead to errors such 12*0.166666666667 = 2.000000000004 instead of 2.0

Slightly changed the way the ORM handles float fields to allow setting `digits=0`
as a way to explicitly require a NUMERIC value but without enforcing/rounding
the values at the ORM level, i.e. a truly full-precision field.

NUMERIC type has unlimited precision but is less efficient so should not be
used as the default behaviour, which is why we keep float8 as an alternative.

Modified the view to display the product UOM factor with a 5 digits value by default.
This value is for usability purpose only, the field still accepts bigger precision, by
setting the `digits` option on the field in the form view.

This change is safe in a stable series, the `digits=0` alternative is
treated the same as the default `digits=None` everywhere in the framework,
except when creating the database field.
addons/product/product.py
addons/product/product_view.xml
openerp/osv/orm.py