diff --git a/frappe/model/meta.py b/frappe/model/meta.py index add084d38e..3dc3181dac 100644 --- a/frappe/model/meta.py +++ b/frappe/model/meta.py @@ -894,6 +894,12 @@ def get_field_currency(df, doc=None): if frappe.get_meta(doc.parenttype).has_field(df.get("options")): # only get_value if parent has currency field currency = frappe.db.get_value(doc.parenttype, doc.parent, df.get("options")) + if not currency: + # Parent may not be in DB yet (new document being saved). + # Use the in-memory parent document reference if available. + parent = getattr(doc, "parent_doc", None) + if parent: + currency = parent.get(df.get("options")) if currency: frappe.local.field_currency.setdefault((doc.doctype, ref_docname), frappe._dict()).setdefault( diff --git a/frappe/public/js/frappe/model/meta.js b/frappe/public/js/frappe/model/meta.js index d393f33cb7..7692dcfdfc 100644 --- a/frappe/public/js/frappe/model/meta.js +++ b/frappe/public/js/frappe/model/meta.js @@ -332,7 +332,8 @@ $.extend(frappe.meta, { } else if (df && df.fieldtype === "Currency") { precision = cint(frappe.defaults.get_default("currency_precision")); if (!precision) { - var number_format = get_number_format(); + var currency = frappe.meta.get_field_currency(df, doc); + var number_format = get_number_format(currency); var number_format_info = get_number_format_info(number_format); precision = number_format_info.precision; }