From 5e672990b3802a1a70b5bf7ed7b6fe352ebf823f Mon Sep 17 00:00:00 2001 From: khushi8112 Date: Tue, 24 Jun 2025 12:42:34 +0530 Subject: [PATCH 1/2] fix: salvage value after value adjustment --- .../asset_value_adjustment/asset_value_adjustment.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py b/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py index d67ba06cfe0..11a63e86e55 100644 --- a/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py +++ b/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py @@ -180,13 +180,22 @@ class AssetValueAdjustment(Document): if asset.calculate_depreciation: for row in asset.finance_books: if cstr(row.finance_book) == cstr(self.finance_book): - row.value_after_depreciation += flt(difference_amount) + salvage_value_adjustment = ( + self.get_adjusted_salvage_value_amount(row, difference_amount) or 0 + ) + row.expected_value_after_useful_life += salvage_value_adjustment + row.value_after_depreciation = row.value_after_depreciation + flt(difference_amount) row.db_update() asset.value_after_depreciation += flt(difference_amount) asset.db_update() return asset + def get_adjusted_salvage_value_amount(self, row, difference_amount): + if row.expected_value_after_useful_life: + salvage_value_adjustment = (difference_amount * row.salvage_value_percentage) / 100 + return flt(salvage_value_adjustment) + def get_adjustment_note(self): if self.docstatus == 1: notes = _( From dc28fa79a0985f3b0a21c0ded40528106c411e67 Mon Sep 17 00:00:00 2001 From: khushi8112 Date: Tue, 24 Jun 2025 14:36:22 +0530 Subject: [PATCH 2/2] test: change in expected value after useful after asset revaluation --- .../test_asset_value_adjustment.py | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/erpnext/assets/doctype/asset_value_adjustment/test_asset_value_adjustment.py b/erpnext/assets/doctype/asset_value_adjustment/test_asset_value_adjustment.py index e1d3b7b084f..1425bb9aa78 100644 --- a/erpnext/assets/doctype/asset_value_adjustment/test_asset_value_adjustment.py +++ b/erpnext/assets/doctype/asset_value_adjustment/test_asset_value_adjustment.py @@ -299,6 +299,43 @@ class TestAssetValueAdjustment(IntegrationTestCase): asset_doc.load_from_db() self.assertEqual(asset_doc.finance_books[0].value_after_depreciation, 40000.0) + def test_expected_value_after_useful_life(self): + pr = make_purchase_receipt(item_code="Macbook Pro", qty=1, rate=100000.0, location="Test Location") + + asset_name = frappe.db.get_value("Asset", {"purchase_receipt": pr.name}, "name") + asset_doc = frappe.get_doc("Asset", asset_name) + asset_doc.calculate_depreciation = 1 + asset_doc.available_for_use_date = "2023-01-15" + asset_doc.purchase_date = "2023-01-15" + + asset_doc.append( + "finance_books", + { + "expected_value_after_useful_life": 5000, + "salvage_value_percentage": 5, + "depreciation_method": "Straight Line", + "total_number_of_depreciations": 12, + "frequency_of_depreciation": 1, + "depreciation_start_date": "2023-01-31", + }, + ) + asset_doc.submit() + self.assertEqual(asset_doc.finance_books[0].expected_value_after_useful_life, 5000.0) + + current_asset_value = get_asset_value_after_depreciation(asset_doc.name) + adj_doc = make_asset_value_adjustment( + asset=asset_doc.name, + current_asset_value=current_asset_value, + new_asset_value=40000, + date="2023-08-21", + ) + adj_doc.submit() + difference_amount = adj_doc.new_asset_value - adj_doc.current_asset_value + self.assertEqual(difference_amount, -60000) + asset_doc.load_from_db() + self.assertEqual(asset_doc.finance_books[0].value_after_depreciation, 40000.0) + self.assertEqual(asset_doc.finance_books[0].expected_value_after_useful_life, 2000.0) + def make_asset_value_adjustment(**args): args = frappe._dict(args)