diff --git a/erpnext/assets/doctype/asset/asset.js b/erpnext/assets/doctype/asset/asset.js
index 2b5ea8caa8c..6dc0a6c8dc4 100644
--- a/erpnext/assets/doctype/asset/asset.js
+++ b/erpnext/assets/doctype/asset/asset.js
@@ -86,47 +86,44 @@ frappe.ui.form.on("Asset", {
}
},
- refresh: function (frm) {
+ refresh: async function (frm) {
frappe.ui.form.trigger("Asset", "asset_type");
frm.toggle_display("next_depreciation_date", frm.doc.docstatus < 1);
+ let has_create_buttons = false;
if (frm.doc.docstatus == 1) {
- if (["Submitted", "Partially Depreciated", "Fully Depreciated"].includes(frm.doc.status)) {
+ if (["Submitted", "Partially Depreciated"].includes(frm.doc.status)) {
frm.add_custom_button(
- __("Transfer Asset"),
+ __("Asset Value Adjustment"),
function () {
- erpnext.asset.transfer_asset(frm);
+ frm.trigger("create_asset_value_adjustment");
},
- __("Manage")
+ __("Create")
);
frm.add_custom_button(
- __("Scrap Asset"),
+ __("Asset Repair"),
function () {
- erpnext.asset.scrap_asset(frm);
+ frm.trigger("create_asset_repair");
},
- __("Manage")
+ __("Create")
);
+ has_create_buttons = true;
+ }
+ if (!frm.doc.calculate_depreciation) {
frm.add_custom_button(
- __("Sell Asset"),
+ __("Depreciation Entry"),
function () {
- frm.trigger("sell_asset");
+ frm.trigger("make_journal_entry");
},
- __("Manage")
+ __("Create")
);
+ has_create_buttons = true;
+ }
- frm.add_custom_button(
- __("Split Asset"),
- function () {
- frm.trigger("split_asset");
- },
- __("Manage")
- );
- } else if (frm.doc.status == "Scrapped") {
- frm.add_custom_button(__("Restore Asset"), function () {
- erpnext.asset.restore_asset(frm);
- }).addClass("btn-primary");
+ if (has_create_buttons) {
+ cur_frm.page.set_inner_btn_group_as_primary(__("Create"));
}
if (frm.doc.maintenance_required && !frm.doc.maintenance_schedule) {
@@ -135,41 +132,51 @@ frappe.ui.form.on("Asset", {
function () {
frm.trigger("create_asset_maintenance");
},
- __("Manage")
+ __("Actions")
);
}
- if (["Submitted", "Partially Depreciated"].includes(frm.doc.status)) {
+ if (["Submitted", "Partially Depreciated", "Fully Depreciated"].includes(frm.doc.status)) {
frm.add_custom_button(
- __("Adjust Asset Value"),
+ __("Split Asset"),
function () {
- frm.trigger("create_asset_value_adjustment");
+ frm.trigger("split_asset");
},
- __("Manage")
+ __("Actions")
);
frm.add_custom_button(
- __("Repair Asset"),
+ __("Transfer Asset"),
function () {
- frm.trigger("create_asset_repair");
+ erpnext.asset.transfer_asset(frm);
},
- __("Manage")
+ __("Actions")
);
+
+ frm.add_custom_button(
+ __("Scrap Asset"),
+ function () {
+ erpnext.asset.scrap_asset(frm);
+ },
+ __("Actions")
+ );
+
+ frm.add_custom_button(
+ __("Sell Asset"),
+ function () {
+ frm.trigger("sell_asset");
+ },
+ __("Actions")
+ );
+ } else if (frm.doc.status == "Scrapped") {
+ frm.add_custom_button(__("Restore Asset"), function () {
+ erpnext.asset.restore_asset(frm);
+ }).addClass("btn-primary");
}
- if (!frm.doc.calculate_depreciation) {
+ if (await frm.events.should_show_accounting_ledger(frm)) {
frm.add_custom_button(
- __("Create Depreciation Entry"),
- function () {
- frm.trigger("make_journal_entry");
- },
- __("Manage")
- );
- }
-
- if (frm.doc.purchase_receipt || !frm.doc.asset_type == "Existing Asset") {
- frm.add_custom_button(
- __("View General Ledger"),
+ __("Accounting Ledger"),
function () {
frappe.route_options = {
voucher_no: frm.doc.name,
@@ -179,7 +186,7 @@ frappe.ui.form.on("Asset", {
};
frappe.set_route("query-report", "General Ledger");
},
- __("Manage")
+ __("View")
);
}
@@ -217,6 +224,27 @@ frappe.ui.form.on("Asset", {
}
},
+ should_show_accounting_ledger: async function (frm) {
+ if (["Capitalized"].includes(frm.doc.status)) {
+ return false;
+ }
+
+ if (
+ !frm.doc.purchase_receipt &&
+ ["Existing Asset", "Composite Component"].includes(frm.doc.asset_type)
+ ) {
+ return false;
+ }
+
+ const asset_category = await frappe.db.get_value(
+ "Asset Category",
+ frm.doc.asset_category,
+ "enable_cwip_accounting"
+ );
+
+ return !!asset_category.message?.enable_cwip_accounting;
+ },
+
set_depr_posting_failure_alert: function (frm) {
const alert = `
diff --git a/erpnext/assets/doctype/asset/asset.json b/erpnext/assets/doctype/asset/asset.json
index b97a5d2d1f7..da27e206c06 100644
--- a/erpnext/assets/doctype/asset/asset.json
+++ b/erpnext/assets/doctype/asset/asset.json
@@ -9,18 +9,17 @@
"engine": "InnoDB",
"field_order": [
"naming_series",
+ "company",
"item_code",
+ "item_name",
"asset_name",
- "asset_category",
- "location",
"image",
"column_break_3",
- "company",
- "asset_owner",
- "asset_owner_company",
- "customer",
- "supplier",
+ "location",
+ "asset_category",
"asset_type",
+ "maintenance_required",
+ "calculate_depreciation",
"purchase_details_section",
"purchase_receipt",
"purchase_receipt_item",
@@ -34,25 +33,38 @@
"purchase_amount",
"asset_quantity",
"additional_asset_cost",
+ "section_break_uiyd",
+ "column_break_bbwr",
+ "column_break_bfkm",
"total_asset_cost",
"depreciation_tab",
- "calculate_depreciation",
- "column_break_33",
+ "column_break_wqzi",
"opening_accumulated_depreciation",
- "opening_number_of_booked_depreciations",
"is_fully_depreciated",
+ "column_break_33",
+ "opening_number_of_booked_depreciations",
"section_break_36",
"finance_books",
"section_break_33",
"depreciation_method",
"value_after_depreciation",
- "total_number_of_depreciations",
- "column_break_24",
"frequency_of_depreciation",
+ "column_break_24",
"next_depreciation_date",
+ "total_number_of_depreciations",
"depreciation_schedule_sb",
"depreciation_schedule_view",
- "insurance_details_tab",
+ "other_info_tab",
+ "accounting_dimensions_section",
+ "cost_center",
+ "column_break_rjyw",
+ "asset_owner_section",
+ "asset_owner",
+ "column_break_yeds",
+ "asset_owner_company",
+ "customer",
+ "supplier",
+ "insurance_section",
"policy_number",
"insurer",
"insured_value",
@@ -60,21 +72,17 @@
"insurance_start_date",
"insurance_end_date",
"comprehensive_insurance",
- "other_info_tab",
- "accounting_dimensions_section",
- "cost_center",
"section_break_jtou",
"status",
"custodian",
+ "department",
"default_finance_book",
"depr_entry_posting_status",
- "booked_fixed_asset",
"column_break_51",
- "department",
- "split_from",
"journal_entry_for_scrap",
+ "split_from",
"amended_from",
- "maintenance_required",
+ "booked_fixed_asset",
"connections_tab"
],
"fields": [
@@ -246,13 +254,14 @@
{
"fieldname": "section_break_33",
"fieldtype": "Section Break",
- "hidden": 1
+ "hidden": 1,
+ "label": "Depreciation Details"
},
{
"fieldname": "depreciation_method",
"fieldtype": "Select",
"label": "Depreciation Method",
- "options": "\nStraight Line\nDouble Declining Balance\nManual"
+ "options": "\nStraight Line\nDouble Declining Balance\nWritten Down Value\nManual"
},
{
"fieldname": "value_after_depreciation",
@@ -279,6 +288,7 @@
{
"fieldname": "next_depreciation_date",
"fieldtype": "Date",
+ "hidden": 1,
"label": "Next Depreciation Date",
"no_copy": 1
},
@@ -397,7 +407,7 @@
"fieldtype": "Column Break"
},
{
- "depends_on": "calculate_depreciation",
+ "depends_on": "eval: doc.calculate_depreciation",
"fieldname": "section_break_36",
"fieldtype": "Section Break"
},
@@ -441,6 +451,7 @@
"depends_on": "eval:(doc.asset_type == \"Existing Asset\")",
"fieldname": "is_fully_depreciated",
"fieldtype": "Check",
+ "hidden": 1,
"label": "Is Fully Depreciated"
},
{
@@ -489,15 +500,10 @@
"hidden": 1,
"label": "Purchase Invoice Item"
},
- {
- "fieldname": "insurance_details_tab",
- "fieldtype": "Tab Break",
- "label": "Insurance"
- },
{
"fieldname": "other_info_tab",
"fieldtype": "Tab Break",
- "label": "Other Info"
+ "label": "More Info"
},
{
"fieldname": "connections_tab",
@@ -506,6 +512,7 @@
"show_dashboard": 1
},
{
+ "depends_on": "eval: doc.calculate_depreciation || doc.asset_type == \"Existing Asset\"",
"fieldname": "depreciation_tab",
"fieldtype": "Tab Break",
"label": "Depreciation"
@@ -533,6 +540,48 @@
"fieldtype": "Select",
"label": "Asset Type",
"options": "\nExisting Asset\nComposite Asset\nComposite Component"
+ },
+ {
+ "fieldname": "column_break_wqzi",
+ "fieldtype": "Column Break"
+ },
+ {
+ "fieldname": "column_break_rjyw",
+ "fieldtype": "Column Break"
+ },
+ {
+ "fieldname": "insurance_section",
+ "fieldtype": "Section Break",
+ "label": "Insurance"
+ },
+ {
+ "fieldname": "section_break_uiyd",
+ "fieldtype": "Section Break"
+ },
+ {
+ "fieldname": "column_break_bbwr",
+ "fieldtype": "Column Break"
+ },
+ {
+ "fieldname": "column_break_bfkm",
+ "fieldtype": "Column Break"
+ },
+ {
+ "fetch_from": "item_code.item_name",
+ "fetch_if_empty": 1,
+ "fieldname": "item_name",
+ "fieldtype": "Read Only",
+ "hidden": 1,
+ "label": "Item Name"
+ },
+ {
+ "fieldname": "asset_owner_section",
+ "fieldtype": "Section Break",
+ "label": "Ownership"
+ },
+ {
+ "fieldname": "column_break_yeds",
+ "fieldtype": "Column Break"
}
],
"idx": 72,
@@ -576,7 +625,7 @@
"link_fieldname": "target_asset"
}
],
- "modified": "2026-02-03 15:48:13.407835",
+ "modified": "2026-02-05 12:42:45.350216",
"modified_by": "Administrator",
"module": "Assets",
"name": "Asset",
diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py
index bbc4ed23824..1546cd6a906 100644
--- a/erpnext/assets/doctype/asset/asset.py
+++ b/erpnext/assets/doctype/asset/asset.py
@@ -68,7 +68,9 @@ class Asset(AccountsController):
default_finance_book: DF.Link | None
department: DF.Link | None
depr_entry_posting_status: DF.Literal["", "Successful", "Failed"]
- depreciation_method: DF.Literal["", "Straight Line", "Double Declining Balance", "Manual"]
+ depreciation_method: DF.Literal[
+ "", "Straight Line", "Double Declining Balance", "Written Down Value", "Manual"
+ ]
disposal_date: DF.Date | None
finance_books: DF.Table[AssetFinanceBook]
frequency_of_depreciation: DF.Int
@@ -79,6 +81,7 @@ class Asset(AccountsController):
insurer: DF.Data | None
is_fully_depreciated: DF.Check
item_code: DF.Link
+ item_name: DF.ReadOnly | None
journal_entry_for_scrap: DF.Link | None
location: DF.Link
maintenance_required: DF.Check