diff --git a/erpnext/assets/report/fixed_asset_register/test_fixed_asset_register.py b/erpnext/assets/report/fixed_asset_register/test_fixed_asset_register.py index d419a839fee..7d2c385da8e 100644 --- a/erpnext/assets/report/fixed_asset_register/test_fixed_asset_register.py +++ b/erpnext/assets/report/fixed_asset_register/test_fixed_asset_register.py @@ -3,7 +3,15 @@ import frappe +from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice +from erpnext.assets.doctype.asset.depreciation import post_depreciation_entries from erpnext.assets.doctype.asset.test_asset import create_asset, set_depreciation_settings_in_company +from erpnext.assets.doctype.asset_capitalization.test_asset_capitalization import ( + create_asset_capitalization, +) +from erpnext.assets.doctype.asset_value_adjustment.test_asset_value_adjustment import ( + make_asset_value_adjustment, +) from erpnext.assets.report.fixed_asset_register.fixed_asset_register import execute from erpnext.tests.utils import ERPNextTestSuite @@ -16,6 +24,9 @@ class TestFixedAssetRegister(ERPNextTestSuite): filters = frappe._dict(company="_Test Company", **extra) return execute(filters)[1] + def report_row(self, asset_name, **extra): + return next(row for row in self.run_report(**extra) if row["asset_id"] == asset_name) + def test_asset_appears_with_purchase_value(self): asset = create_asset( item_code="Macbook Pro", net_purchase_amount=100000, purchase_amount=100000, submit=True @@ -70,3 +81,71 @@ class TestFixedAssetRegister(ERPNextTestSuite): computers = next(row for row in rows if row["asset_category"] == "Computers") self.assertEqual(computers["net_purchase_amount"], 150000) self.assertEqual(computers["asset_value"], 150000) + + def test_booked_depreciation_reduces_asset_value(self): + asset = create_asset( + item_code="Macbook Pro", + calculate_depreciation=1, + available_for_use_date="2019-12-31", + depreciation_start_date="2020-12-31", + frequency_of_depreciation=12, + total_number_of_depreciations=3, + expected_value_after_useful_life=10000, + net_purchase_amount=100000, + purchase_amount=100000, + submit=True, + ) + + # books one depreciation entry of (100000 - 10000) / 3 = 30000 + post_depreciation_entries(date="2021-01-01") + + row = self.report_row(asset.name) + self.assertEqual(row["depreciated_amount"], 30000) + self.assertEqual(row["asset_value"], 70000) # 100000 - 30000 + + def test_revaluation_adjusts_asset_value(self): + asset = create_asset( + item_code="Macbook Pro", net_purchase_amount=100000, purchase_amount=100000, submit=True + ) + + # revalue the asset upwards by 20000 + make_asset_value_adjustment( + asset=asset.name, current_asset_value=100000, new_asset_value=120000 + ).submit() + + row = self.report_row(asset.name) + self.assertEqual(row["asset_value"], 120000) # 100000 + 20000 revaluation + + def test_sold_asset_hidden_from_in_location_and_shown_in_disposed(self): + asset = create_asset( + item_code="Macbook Pro", net_purchase_amount=100000, purchase_amount=100000, submit=True + ) + + create_sales_invoice(item_code="Macbook Pro", asset=asset.name, qty=1, rate=80000) + self.assertEqual(frappe.db.get_value("Asset", asset.name, "status"), "Sold") + + self.assertNotIn(asset.name, {row["asset_id"] for row in self.run_report(status="In Location")}) + self.assertIn(asset.name, {row["asset_id"] for row in self.run_report(status="Disposed")}) + + def test_capitalized_asset_hidden_from_in_location_and_shown_in_disposed(self): + consumed_asset = create_asset( + asset_name="Consumed Asset", + net_purchase_amount=100000, + purchase_amount=100000, + submit=True, + ) + composite_asset = create_asset( + asset_name="Composite Asset", asset_type="Composite Asset", submit=False + ) + + create_asset_capitalization( + target_asset=composite_asset.name, consumed_asset=consumed_asset.name, submit=1 + ) + self.assertEqual(frappe.db.get_value("Asset", consumed_asset.name, "status"), "Capitalized") + + self.assertNotIn( + consumed_asset.name, {row["asset_id"] for row in self.run_report(status="In Location")} + ) + self.assertIn( + consumed_asset.name, {row["asset_id"] for row in self.run_report(status="Disposed")} + )