feat: asset salvage_value_percentage (#37302)
* feat: asset salvage_value_percentage
* chore: add missing parameter in get_item_details
* chore: change asset depr table colors
diff --git a/erpnext/assets/doctype/asset/asset.js b/erpnext/assets/doctype/asset/asset.js
index 962292b..ba7940c 100644
--- a/erpnext/assets/doctype/asset/asset.js
+++ b/erpnext/assets/doctype/asset/asset.js
@@ -239,7 +239,7 @@
datatable.style.setStyle(`.dt-scrollable`, {'font-size': '0.75rem', 'margin-bottom': '1rem', 'margin-left': '0.35rem', 'margin-right': '0.35rem'});
datatable.style.setStyle(`.dt-header`, {'margin-left': '0.35rem', 'margin-right': '0.35rem'});
- datatable.style.setStyle(`.dt-cell--header`, {'color': 'var(--text-muted)'});
+ datatable.style.setStyle(`.dt-cell--header .dt-cell__content`, {'color': 'var(--gray-600)', 'font-size': 'var(--text-sm)'});
datatable.style.setStyle(`.dt-cell`, {'color': 'var(--text-color)'});
datatable.style.setStyle(`.dt-cell--col-1`, {'text-align': 'center'});
datatable.style.setStyle(`.dt-cell--col-2`, {'font-weight': 600});
@@ -340,7 +340,8 @@
method: "erpnext.assets.doctype.asset.asset.get_item_details",
args: {
item_code: frm.doc.item_code,
- asset_category: frm.doc.asset_category
+ asset_category: frm.doc.asset_category,
+ gross_purchase_amount: frm.doc.gross_purchase_amount
},
callback: function(r, rt) {
if(r.message) {
@@ -546,7 +547,21 @@
}
});
}
- }
+ },
+
+ set_salvage_value_percentage_or_expected_value_after_useful_life: function(frm, row, salvage_value_percentage_changed, expected_value_after_useful_life_changed) {
+ if (expected_value_after_useful_life_changed) {
+ frappe.flags.from_set_salvage_value_percentage_or_expected_value_after_useful_life = true;
+ const new_salvage_value_percentage = flt((row.expected_value_after_useful_life * 100) / frm.doc.gross_purchase_amount, precision("salvage_value_percentage", row));
+ frappe.model.set_value(row.doctype, row.name, "salvage_value_percentage", new_salvage_value_percentage);
+ frappe.flags.from_set_salvage_value_percentage_or_expected_value_after_useful_life = false;
+ } else if (salvage_value_percentage_changed) {
+ frappe.flags.from_set_salvage_value_percentage_or_expected_value_after_useful_life = true;
+ const new_expected_value_after_useful_life = flt(frm.doc.gross_purchase_amount * (row.salvage_value_percentage / 100), precision('gross_purchase_amount'));
+ frappe.model.set_value(row.doctype, row.name, "expected_value_after_useful_life", new_expected_value_after_useful_life);
+ frappe.flags.from_set_salvage_value_percentage_or_expected_value_after_useful_life = false;
+ }
+ },
});
frappe.ui.form.on('Asset Finance Book', {
@@ -557,9 +572,19 @@
expected_value_after_useful_life: function(frm, cdt, cdn) {
const row = locals[cdt][cdn];
+ if (!frappe.flags.from_set_salvage_value_percentage_or_expected_value_after_useful_life) {
+ frm.events.set_salvage_value_percentage_or_expected_value_after_useful_life(frm, row, false, true);
+ }
frm.events.set_depreciation_rate(frm, row);
},
+ salvage_value_percentage: function(frm, cdt, cdn) {
+ const row = locals[cdt][cdn];
+ if (!frappe.flags.from_set_salvage_value_percentage_or_expected_value_after_useful_life) {
+ frm.events.set_salvage_value_percentage_or_expected_value_after_useful_life(frm, row, true, false);
+ }
+ },
+
frequency_of_depreciation: function(frm, cdt, cdn) {
const row = locals[cdt][cdn];
frm.events.set_depreciation_rate(frm, row);
diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py
index 0dbed87..2e69fe5 100644
--- a/erpnext/assets/doctype/asset/asset.py
+++ b/erpnext/assets/doctype/asset/asset.py
@@ -198,7 +198,9 @@
self.asset_category = frappe.get_cached_value("Item", self.item_code, "asset_category")
if self.item_code and not self.get("finance_books"):
- finance_books = get_item_details(self.item_code, self.asset_category)
+ finance_books = get_item_details(
+ self.item_code, self.asset_category, self.gross_purchase_amount
+ )
self.set("finance_books", finance_books)
def validate_finance_books(self):
@@ -797,7 +799,7 @@
@frappe.whitelist()
-def get_item_details(item_code, asset_category):
+def get_item_details(item_code, asset_category, gross_purchase_amount):
asset_category_doc = frappe.get_doc("Asset Category", asset_category)
books = []
for d in asset_category_doc.finance_books:
@@ -807,7 +809,11 @@
"depreciation_method": d.depreciation_method,
"total_number_of_depreciations": d.total_number_of_depreciations,
"frequency_of_depreciation": d.frequency_of_depreciation,
- "start_date": nowdate(),
+ "daily_depreciation": d.daily_depreciation,
+ "salvage_value_percentage": d.salvage_value_percentage,
+ "expected_value_after_useful_life": flt(gross_purchase_amount)
+ * flt(d.salvage_value_percentage / 100),
+ "depreciation_start_date": d.depreciation_start_date or nowdate(),
}
)
diff --git a/erpnext/assets/doctype/asset_activity/asset_activity.json b/erpnext/assets/doctype/asset_activity/asset_activity.json
index 476fb27..00992e2 100644
--- a/erpnext/assets/doctype/asset_activity/asset_activity.json
+++ b/erpnext/assets/doctype/asset_activity/asset_activity.json
@@ -75,13 +75,14 @@
"in_create": 1,
"index_web_pages_for_search": 1,
"links": [],
- "modified": "2023-08-01 11:09:52.584482",
+ "modified": "2023-09-29 15:56:17.608643",
"modified_by": "Administrator",
"module": "Assets",
"name": "Asset Activity",
"owner": "Administrator",
"permissions": [
{
+ "delete": 1,
"email": 1,
"read": 1,
"report": 1,
@@ -89,6 +90,7 @@
"share": 1
},
{
+ "delete": 1,
"email": 1,
"read": 1,
"report": 1,
@@ -96,6 +98,7 @@
"share": 1
},
{
+ "delete": 1,
"email": 1,
"read": 1,
"report": 1,
diff --git a/erpnext/assets/doctype/asset_finance_book/asset_finance_book.json b/erpnext/assets/doctype/asset_finance_book/asset_finance_book.json
index 4121302..2c27dc9 100644
--- a/erpnext/assets/doctype/asset_finance_book/asset_finance_book.json
+++ b/erpnext/assets/doctype/asset_finance_book/asset_finance_book.json
@@ -12,6 +12,7 @@
"column_break_5",
"frequency_of_depreciation",
"depreciation_start_date",
+ "salvage_value_percentage",
"expected_value_after_useful_life",
"value_after_depreciation",
"rate_of_depreciation"
@@ -91,12 +92,17 @@
"fieldname": "daily_depreciation",
"fieldtype": "Check",
"label": "Daily Depreciation"
+ },
+ {
+ "fieldname": "salvage_value_percentage",
+ "fieldtype": "Percent",
+ "label": "Salvage Value Percentage"
}
],
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
- "modified": "2023-08-10 22:10:36.576199",
+ "modified": "2023-09-29 15:39:52.740594",
"modified_by": "Administrator",
"module": "Assets",
"name": "Asset Finance Book",