diff --git a/erpnext/stock/doctype/inventory_dimension/inventory_dimension.js b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.js index f3d60548b65..844b67466e4 100644 --- a/erpnext/stock/doctype/inventory_dimension/inventory_dimension.js +++ b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.js @@ -73,24 +73,44 @@ frappe.ui.form.on("Inventory Dimension", { frm.trigger("set_parent_fields"); }, - set_parent_fields(frm) { - if (frm.doc.apply_to_all_doctypes) { - let options = ["\n", frm.doc.reference_document]; + istable(frm) { + frm.trigger("set_parent_fields"); + }, - frm.set_df_property("fetch_from_parent", "options", options); - } else if (frm.doc.document_type && frm.doc.istable) { + reference_document(frm) { + frm.trigger("set_parent_fields"); + }, + + apply_to_all_doctypes(frm) { + frm.trigger("set_parent_fields"); + }, + + set_parent_fields(frm) { + const { reference_document, document_type } = frm.doc; + if (!reference_document || (!frm.doc.apply_to_all_doctypes && (!document_type || !frm.doc.istable))) { + return set_parent_field_options(frm, []); + } + + if (frm.doc.apply_to_all_doctypes) { + return set_parent_field_options(frm, [{ value: reference_document, label: reference_document }]); + } else if (document_type && frm.doc.istable) { frappe.call({ method: "erpnext.stock.doctype.inventory_dimension.inventory_dimension.get_parent_fields", args: { - child_doctype: frm.doc.document_type, - dimension_name: frm.doc.reference_document, + child_doctype: document_type, + dimension_name: reference_document, }, callback: (r) => { - if (r.message && r.message.length) { - frm.set_df_property("fetch_from_parent", "options", ["\n"].concat(r.message)); - } else { - frm.set_df_property("fetch_from_parent", "hidden", 1); + if ( + frm.doc.reference_document !== reference_document || + frm.doc.document_type !== document_type || + frm.doc.apply_to_all_doctypes || + !frm.doc.istable + ) { + return; } + + return set_parent_field_options(frm, r.message || []); }, }); } @@ -115,3 +135,12 @@ frappe.ui.form.on("Inventory Dimension", { }); }, }); + +function set_parent_field_options(frm, fields) { + frm.set_df_property("fetch_from_parent", "options", ["", ...fields]); + frm.set_df_property("fetch_from_parent", "hidden", !fields.length); + + if (frm.doc.fetch_from_parent && !fields.some((field) => field.value === frm.doc.fetch_from_parent)) { + return frm.set_value("fetch_from_parent", ""); + } +}