From 41b5ad92aafe8d8d249b0c6d42c848e20d57f7fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Sat, 21 Aug 2021 09:09:56 +0200 Subject: [PATCH] Add monetary field issue10598 review338511002 --- sale.py | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/sale.py b/sale.py index 4d30d5da4b..0286ec6df6 100644 --- a/sale.py +++ b/sale.py @@ -12,6 +12,8 @@ from trytond.model import ( from trytond.pyson import Eval, If from trytond.transaction import Transaction +from trytond.modules.currency.fields import Monetary + class Sale(metaclass=PoolMeta): __name__ = 'sale.sale' @@ -92,11 +94,11 @@ class Extra(DeactivableMixin, ModelSQL, ModelView, MatchMixin): ('company', '=', Eval('company', -1)), ], depends=['company']) - sale_amount = fields.Numeric('Sale Amount', - digits=(16, Eval('currency_digits', 2)), - depends=['currency_digits']) - currency_digits = fields.Function(fields.Integer('Currency Digits'), - 'on_change_with_currency_digits') + sale_amount = Monetary( + "Sale Amount", currency='currency', digits='currency') + currency = fields.Function(fields.Many2One( + 'currency.currency', "Currency"), + 'on_change_with_currency') lines = fields.One2Many('sale.extra.line', 'extra', 'Lines') @classmethod @@ -129,10 +131,9 @@ class Extra(DeactivableMixin, ModelSQL, ModelView, MatchMixin): return Transaction().context.get('company') @fields.depends('company') - def on_change_with_currency_digits(self, name=None): + def on_change_with_currency(self, name=None): if self.company: - return self.company.currency.digits - return 2 + return self.company.currency.id @classmethod def _extras_domain(cls, sale): @@ -198,8 +199,8 @@ class ExtraLine(sequence_ordered(), ModelSQL, ModelView, MatchMixin): extra = fields.Many2One('sale.extra', 'Extra', required=True, ondelete='CASCADE') - sale_amount = fields.Numeric('Sale Amount', - digits=(16, Eval('_parent_extra', {}).get('currency_digits', 2))) + sale_amount = Monetary( + "Sale Amount", currency='currency', digits='currency') product = fields.Many2One('product.product', 'Product', required=True, domain=[('salable', '=', True)]) product_uom_category = fields.Function( @@ -216,6 +217,9 @@ class ExtraLine(sequence_ordered(), ModelSQL, ModelView, MatchMixin): unit_digits = fields.Function(fields.Integer('Unit Digits'), 'on_change_with_unit_digits') free = fields.Boolean('Free') + currency = fields.Function(fields.Many2One( + 'currency.currency', "Currency"), + 'on_change_with_currency') @classmethod def __setup__(cls): @@ -243,6 +247,11 @@ class ExtraLine(sequence_ordered(), ModelSQL, ModelView, MatchMixin): def default_free(): return False + @fields.depends('extra', '_parent_extra.currency') + def on_change_with_currency(self, name=None): + if self.extra and self.extra.currency: + return self.extra.currency.id + def get_pattern(self, sale): return {}