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 7f5d480538b..1877f173168 100644 --- a/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py +++ b/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py @@ -192,6 +192,10 @@ class AssetValueAdjustment(Document): if asset.calculate_depreciation: for row in asset.finance_books: if cstr(row.finance_book) == cstr(self.finance_book): + 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 += flt(difference_amount) row.db_update() @@ -208,6 +212,10 @@ class AssetValueAdjustment(Document): asset.save() asset.set_status() + 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 if self.docstatus == 1 else -1 * salvage_value_adjustment) @frappe.whitelist() def get_value_of_accounting_dimensions(asset_name): 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 82fa3ba17e9..dfde9a7d885 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 @@ -292,6 +292,43 @@ class TestAssetValueAdjustment(unittest.TestCase): asset_doc.load_from_db() self.assertEqual(asset_doc.value_after_depreciation, 50000.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)