diff --git a/CHANGELOG b/CHANGELOG index a594ea6c89..3874ddd96e 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +* Add monetary field +* Provide digits from currency + Version 6.0.0 - 2021-05-03 * Bug fixes (see mercurial logs for details) * Add parameter rate_decimal diff --git a/currency.py b/currency.py index 1cd020b833..4bded669ed 100644 --- a/currency.py +++ b/currency.py @@ -18,7 +18,8 @@ except ImportError: from trytond.i18n import gettext from trytond.model import ( - ModelView, ModelSQL, DeactivableMixin, fields, Unique, Check, SymbolMixin) + ModelView, ModelSQL, DeactivableMixin, fields, Unique, Check, SymbolMixin, + DigitsMixin) from trytond.transaction import Transaction from trytond.pool import Pool from trytond.rpc import RPC @@ -30,7 +31,8 @@ from .ir import rate_decimal logger = logging.getLogger(__name__) -class Currency(SymbolMixin, DeactivableMixin, ModelSQL, ModelView): +class Currency( + SymbolMixin, DigitsMixin, DeactivableMixin, ModelSQL, ModelView): 'Currency' __name__ = 'currency.currency' name = fields.Char('Name', required=True, translate=True, diff --git a/doc/index.rst b/doc/index.rst index 0294f71e03..56b0012592 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -14,3 +14,4 @@ different currencies. usage configuration design + reference diff --git a/doc/reference.rst b/doc/reference.rst new file mode 100644 index 0000000000..ce2a5c67a6 --- /dev/null +++ b/doc/reference.rst @@ -0,0 +1,17 @@ +************* +API Reference +************* + +.. module:: trytond.modules.currency.fields + +Monetary field +============== + +.. class:: Monetary(string[, currency[, \**options]]) + +A subclass of :class:`~trytond:trytond.model.fields.Numeric` used to store monetary values. + +.. attribute:: Monetary.currency + + The name of the :class:`~trytond:trytond.model.fields.Many2One` field which + stores the currency used to display the symbol. diff --git a/fields.py b/fields.py new file mode 100644 index 0000000000..2922abaefb --- /dev/null +++ b/fields.py @@ -0,0 +1,36 @@ +# This file is part of Tryton. The COPYRIGHT file at the toplevel of this +# repository contains the full copyright notices and license terms. +from trytond.model import fields + +__all__ = ['Monetary'] + + +class Monetary(fields.Numeric): + """ + Define a numeric field with currency (``decimal``). + """ + def __init__(self, string='', currency=None, digits=None, help='', + required=False, readonly=False, domain=None, states=None, + select=False, on_change=None, on_change_with=None, depends=None, + context=None, loading='eager'): + ''' + :param currency: the name of the Many2One field which stores + the currency + ''' + if currency: + if depends is None: + depends = [currency] + elif currency not in depends: + depends = depends.copy() + depends.append(currency) + super().__init__(string=string, digits=digits, help=help, + required=required, readonly=readonly, domain=domain, states=states, + select=select, on_change=on_change, on_change_with=on_change_with, + depends=depends, context=context, loading=loading) + self.currency = currency + + def definition(self, model, language): + definition = super().definition(model, language) + definition['symbol'] = self.currency + definition['monetary'] = True + return definition