mirror of
https://github.com/frappe/erpnext.git
synced 2026-03-20 10:45:29 +00:00
* 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
(cherry picked from commit fed94845ce)
# Conflicts:
# erpnext/assets/doctype/asset/asset.js
# erpnext/assets/doctype/asset_activity/asset_activity.json
# erpnext/assets/doctype/asset_finance_book/asset_finance_book.json
* chore: resolving conflicts
---------
Co-authored-by: Anand Baburajan <anandbaburajan@gmail.com>
This commit is contained in:
@@ -287,7 +287,8 @@ frappe.ui.form.on('Asset', {
|
|||||||
method: "erpnext.assets.doctype.asset.asset.get_item_details",
|
method: "erpnext.assets.doctype.asset.asset.get_item_details",
|
||||||
args: {
|
args: {
|
||||||
item_code: frm.doc.item_code,
|
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) {
|
callback: function(r, rt) {
|
||||||
if(r.message) {
|
if(r.message) {
|
||||||
@@ -504,7 +505,21 @@ frappe.ui.form.on('Asset', {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
|
||||||
|
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', {
|
frappe.ui.form.on('Asset Finance Book', {
|
||||||
@@ -516,9 +531,19 @@ frappe.ui.form.on('Asset Finance Book', {
|
|||||||
|
|
||||||
expected_value_after_useful_life: function(frm, cdt, cdn) {
|
expected_value_after_useful_life: function(frm, cdt, cdn) {
|
||||||
const row = locals[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);
|
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) {
|
frequency_of_depreciation: function(frm, cdt, cdn) {
|
||||||
const row = locals[cdt][cdn];
|
const row = locals[cdt][cdn];
|
||||||
frm.events.set_depreciation_rate(frm, row);
|
frm.events.set_depreciation_rate(frm, row);
|
||||||
|
|||||||
@@ -204,7 +204,9 @@ class Asset(AccountsController):
|
|||||||
self.asset_category = frappe.get_cached_value("Item", self.item_code, "asset_category")
|
self.asset_category = frappe.get_cached_value("Item", self.item_code, "asset_category")
|
||||||
|
|
||||||
if self.item_code and not self.get("finance_books"):
|
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)
|
self.set("finance_books", finance_books)
|
||||||
|
|
||||||
def validate_finance_books(self):
|
def validate_finance_books(self):
|
||||||
@@ -1195,7 +1197,7 @@ def transfer_asset(args):
|
|||||||
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@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)
|
asset_category_doc = frappe.get_doc("Asset Category", asset_category)
|
||||||
books = []
|
books = []
|
||||||
for d in asset_category_doc.finance_books:
|
for d in asset_category_doc.finance_books:
|
||||||
@@ -1205,7 +1207,11 @@ def get_item_details(item_code, asset_category):
|
|||||||
"depreciation_method": d.depreciation_method,
|
"depreciation_method": d.depreciation_method,
|
||||||
"total_number_of_depreciations": d.total_number_of_depreciations,
|
"total_number_of_depreciations": d.total_number_of_depreciations,
|
||||||
"frequency_of_depreciation": d.frequency_of_depreciation,
|
"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(),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"column_break_5",
|
"column_break_5",
|
||||||
"frequency_of_depreciation",
|
"frequency_of_depreciation",
|
||||||
"depreciation_start_date",
|
"depreciation_start_date",
|
||||||
|
"salvage_value_percentage",
|
||||||
"expected_value_after_useful_life",
|
"expected_value_after_useful_life",
|
||||||
"value_after_depreciation",
|
"value_after_depreciation",
|
||||||
"rate_of_depreciation"
|
"rate_of_depreciation"
|
||||||
@@ -87,12 +88,17 @@
|
|||||||
"fieldname": "daily_depreciation",
|
"fieldname": "daily_depreciation",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"label": "Daily Depreciation"
|
"label": "Daily Depreciation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "salvage_value_percentage",
|
||||||
|
"fieldtype": "Percent",
|
||||||
|
"label": "Salvage Value Percentage"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2023-08-10 18:56:09.022246",
|
"modified": "2023-09-29 15:39:52.740594",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Assets",
|
"module": "Assets",
|
||||||
"name": "Asset Finance Book",
|
"name": "Asset Finance Book",
|
||||||
|
|||||||
Reference in New Issue
Block a user