Check price_decimal configuration

The price_decimal stored in ir.configuration is checked against the current
configuration value. We do not allow to start serving a database for which the
values are different as it may be due to a misconfiguration which can lead to
data corruption.

issue9324
review317381002
This commit is contained in:
Cédric Krier
2020-05-28 18:22:45 +02:00
parent 8aca6746ab
commit 27cd4b6eb0
4 changed files with 30 additions and 2 deletions
+2
View File
@@ -1,3 +1,5 @@
* Check price_decimal configuration
Version 5.6.0 - 2020-05-04
* Bug fixes (see mercurial logs for details)
* Add round_price
+2
View File
@@ -2,6 +2,7 @@
# this repository contains the full copyright notices and license terms.
from trytond.pool import Pool
from . import ir
from . import uom
from . import category
from . import product
@@ -14,6 +15,7 @@ __all__ = [price_digits, round_price, uom_conversion_digits]
def register():
Pool.register(
ir.Configuration,
uom.UomCategory,
uom.Uom,
category.Category,
+24
View File
@@ -0,0 +1,24 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.config import config
from trytond.model import fields
from trytond.pool import PoolMeta
price_decimal = config.getint('product', 'price_decimal', default=4)
class Configuration(metaclass=PoolMeta):
__name__ = 'ir.configuration'
product_price_decimal = fields.Integer("Product Price Decimal")
@classmethod
def default_product_price_decimal(cls):
return price_decimal
def check(self):
super().check()
if self.product_price_decimal != price_decimal:
raise ValueError(
"The price_decimal %s in [product] configuration section "
"is different from the value %s in 'ir.configuration'." % (
self.product_price_decimal, price_decimal))
+2 -2
View File
@@ -18,12 +18,12 @@ from trytond.pyson import Eval
from trytond.transaction import Transaction
from trytond.pool import Pool
from trytond import backend
from trytond.config import config
from trytond.tools import lstrip_wildcard
from trytond.tools.multivalue import migrate_property
from trytond.modules.company.model import (
CompanyMultiValueMixin, CompanyValueMixin)
from .exceptions import InvalidIdentifierCode
from .ir import price_decimal
__all__ = ['price_digits', 'round_price', 'TemplateFunction']
@@ -39,7 +39,7 @@ COST_PRICE_METHODS = [
('average', 'Average'),
]
price_digits = (16, config.getint('product', 'price_decimal', default=4))
price_digits = (16, price_decimal)
def round_price(value, rounding=None):