From 8e97332029aa13d51405992700403c4b307e7145 Mon Sep 17 00:00:00 2001 From: Luis Mendoza Date: Fri, 6 Feb 2026 16:01:22 +0000 Subject: [PATCH] fix: resolve currency precision for child table rows in unsaved documents --- frappe/model/meta.py | 6 ++++++ frappe/public/js/frappe/model/meta.js | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/frappe/model/meta.py b/frappe/model/meta.py index 9e5624252d..5d430d2c5a 100644 --- a/frappe/model/meta.py +++ b/frappe/model/meta.py @@ -884,6 +884,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; }