[FIX] orm: do not try to convert zero amount for monetary fields.
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 odoo/odoo#40155 X-original-commit: 3a58dfa1e51702a659e9113271f19d087e3ec349 Signed-off-by: Victor Feyens (vfe) <vfe@odoo.com> Co-authored-by: Raphael Collet <rco@odoo.com>
This commit is contained in:
committed by
fw-bot
co-authored by
Raphael Collet
parent
96daa295c7
commit
20edf21fda
+6
-2
@@ -1301,10 +1301,14 @@ class Monetary(Field):
|
||||
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):
|
||||
|
||||
Reference in New Issue
Block a user