From 482efee6c0b9c34eb2f37da95e3fe4218e6ff26a Mon Sep 17 00:00:00 2001 From: khushi8112 Date: Thu, 18 Dec 2025 16:43:26 +0530 Subject: [PATCH 1/3] fix: do not hide primary-action for composite asset --- erpnext/assets/doctype/asset/asset.js | 10 +++++++--- erpnext/assets/doctype/asset/asset.json | 5 +++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/erpnext/assets/doctype/asset/asset.js b/erpnext/assets/doctype/asset/asset.js index 55c71729bd8..bab580d617f 100644 --- a/erpnext/assets/doctype/asset/asset.js +++ b/erpnext/assets/doctype/asset/asset.js @@ -80,6 +80,12 @@ frappe.ui.form.on("Asset", { } }, + before_submit: function (frm) { + if (frm.doc.is_composite_asset && !frm.has_active_capitalization) { + frappe.throw(__("Please capitalize this asset before submitting.")); + } + }, + refresh: function (frm) { frappe.ui.form.trigger("Asset", "is_existing_asset"); frm.toggle_display("next_depreciation_date", frm.doc.docstatus < 1); @@ -197,8 +203,7 @@ frappe.ui.form.on("Asset", { }, callback: function (r) { if (!r.message) { - $(".primary-action").prop("hidden", true); - $(".form-message").text(__("Capitalize this asset to confirm")); + $(".form-message").text(__("Capitalize this asset before submitting.")); frm.add_custom_button(__("Capitalize Asset"), function () { frm.trigger("create_asset_capitalization"); @@ -538,7 +543,6 @@ frappe.ui.form.on("Asset", { callback: function (r) { var doclist = frappe.model.sync(r.message); frappe.set_route("Form", doclist[0].doctype, doclist[0].name); - $(".primary-action").prop("hidden", false); }, }); }, diff --git a/erpnext/assets/doctype/asset/asset.json b/erpnext/assets/doctype/asset/asset.json index af4d8f281e2..832f7c18e68 100644 --- a/erpnext/assets/doctype/asset/asset.json +++ b/erpnext/assets/doctype/asset/asset.json @@ -556,7 +556,8 @@ "fieldtype": "Currency", "label": "Net Purchase Amount", "mandatory_depends_on": "eval:(!doc.is_composite_asset || doc.docstatus==1)", - "options": "Company:company:default_currency" + "options": "Company:company:default_currency", + "read_only_depends_on": "eval: doc.is_composite_asset" } ], "idx": 72, @@ -600,7 +601,7 @@ "link_fieldname": "target_asset" } ], - "modified": "2025-11-04 22:39:00.817405", + "modified": "2025-12-18 16:36:40.904246", "modified_by": "Administrator", "module": "Assets", "name": "Asset", From e2ac7646e67f14637ca0b10bade686af4ab617a7 Mon Sep 17 00:00:00 2001 From: khushi8112 Date: Thu, 18 Dec 2025 17:15:10 +0530 Subject: [PATCH 2/3] fix: set frm.has_active_capitalization before using it --- erpnext/assets/doctype/asset/asset.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/erpnext/assets/doctype/asset/asset.js b/erpnext/assets/doctype/asset/asset.js index bab580d617f..e0b4593416a 100644 --- a/erpnext/assets/doctype/asset/asset.js +++ b/erpnext/assets/doctype/asset/asset.js @@ -202,6 +202,8 @@ frappe.ui.form.on("Asset", { asset: frm.doc.name, }, callback: function (r) { + frm.has_active_capitalization = r.message; + if (!r.message) { $(".form-message").text(__("Capitalize this asset before submitting.")); @@ -475,7 +477,6 @@ frappe.ui.form.on("Asset", { is_composite_asset: function (frm) { if (frm.doc.is_composite_asset) { frm.set_value("net_purchase_amount", 0); - frm.set_df_property("net_purchase_amount", "read_only", 1); } else { frm.set_df_property("net_purchase_amount", "read_only", 0); } From e04353fc3103d75fffc884b87aac85d54e54757a Mon Sep 17 00:00:00 2001 From: khushi8112 Date: Thu, 18 Dec 2025 17:34:31 +0530 Subject: [PATCH 3/3] fix: add server side validation --- erpnext/assets/doctype/asset/asset.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py index a1948a89295..a29ea9ef07b 100644 --- a/erpnext/assets/doctype/asset/asset.py +++ b/erpnext/assets/doctype/asset/asset.py @@ -243,6 +243,10 @@ class Asset(AccountsController): self.validate_expected_value_after_useful_life() self.set_total_booked_depreciations() + def before_submit(self): + if self.is_composite_asset and not has_active_capitalization(self.name): + frappe.throw(_("Please capitalize this asset before submitting.")) + def on_submit(self): self.validate_in_use_date() self.make_asset_movement()