30 lines
975 B
Python
30 lines
975 B
Python
# 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 decimal import ROUND_HALF_EVEN
|
|
|
|
from trytond.model import fields
|
|
from trytond.modules.currency import ROUNDING_OPPOSITES
|
|
from trytond.pool import PoolMeta
|
|
from trytond.pyson import Eval
|
|
|
|
|
|
class Currency(metaclass=PoolMeta):
|
|
__name__ = 'currency.currency'
|
|
|
|
cash_rounding = fields.Numeric(
|
|
"Cash Rounding Factor",
|
|
digits=(None, Eval('digits', None)),
|
|
domain=['OR',
|
|
('cash_rounding', '=', None),
|
|
('cash_rounding', '>', 0),
|
|
])
|
|
|
|
def cash_round(self, amount, rounding=ROUND_HALF_EVEN, opposite=False):
|
|
if opposite:
|
|
rounding = ROUNDING_OPPOSITES[rounding]
|
|
if self.cash_rounding is not None:
|
|
factor = self.cash_rounding
|
|
else:
|
|
factor = self.rounding
|
|
return self._round(amount, factor, rounding)
|