Skip to content

Commit

Permalink
[FIX] orm: do not try to convert zero amount for monetary fields.
Browse files Browse the repository at this point in the history
When assigning a default value to a computed monetary field, if self
contains records with different currencies, the assignation will fail
when trying to round the value (because self[currency_field] is a
recordset of multiple currencies).

Globally, assigning a monetary value to records in different currencies
should never happen.  The only case we want to support is defaulting a
computed monetary to 0.0.

Add clear error when trying to set monetaries in multi-currency.

closes #40155

X-original-commit: 3a58dfa
Signed-off-by: Victor Feyens (vfe) <vfe@odoo.com>
Co-authored-by: Raphael Collet <rco@odoo.com>
  • Loading branch information
2 people authored and fw-bot committed Nov 12, 2019
1 parent 96daa29 commit 20edf21
Showing 1 changed file with 6 additions and 2 deletions.
8 changes: 6 additions & 2 deletions odoo/fields.py
Expand Up @@ -1301,10 +1301,14 @@ def convert_to_column(self, value, record, values=None, validate=True):
def convert_to_cache(self, value, record, validate=True):
# cache format: float
value = float(value or 0.0)
if validate and record.sudo()[self.currency_field]:
if value and validate:
# FIXME @rco-odoo: currency may not be already initialized if it is
# a function or related field!
value = record[self.currency_field].round(value)
currency = record.sudo()[self.currency_field]
if len(currency) > 1:
raise ValueError("Got multiple currencies while assigning values of monetary field %s" % str(self))
elif currency:
value = currency.round(value)
return value

def convert_to_record(self, value, record):
Expand Down

0 comments on commit 20edf21

Please sign in to comment.