From 3e32c30298db13c4f5bb5f554e5174e56ea33f25 Mon Sep 17 00:00:00 2001 From: Khushi Rawat <142375893+khushi8112@users.noreply.github.com> Date: Mon, 17 Mar 2025 16:18:04 +0530 Subject: [PATCH] test: added tests on sale of an asset --- .../test_asset_depreciation_schedule.py | 161 +++++++++++++++++- ...sset_depreciation_schedules_from_assets.py | 2 +- 2 files changed, 161 insertions(+), 2 deletions(-) diff --git a/erpnext/assets/doctype/asset_depreciation_schedule/test_asset_depreciation_schedule.py b/erpnext/assets/doctype/asset_depreciation_schedule/test_asset_depreciation_schedule.py index 8b4fe96fba3..c3553675420 100644 --- a/erpnext/assets/doctype/asset_depreciation_schedule/test_asset_depreciation_schedule.py +++ b/erpnext/assets/doctype/asset_depreciation_schedule/test_asset_depreciation_schedule.py @@ -3,8 +3,9 @@ import frappe from frappe.tests import IntegrationTestCase, UnitTestCase -from frappe.utils import cstr, date_diff, flt +from frappe.utils import cstr, date_diff, flt, getdate +from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice from erpnext.assets.doctype.asset.depreciation import ( post_depreciation_entries, ) @@ -982,3 +983,161 @@ class TestAssetDepreciationSchedule(IntegrationTestCase): ] self.assertEqual(schedules, expected_depreciation_after_cancelling_adjustment) + + def test_depreciation_schedule_after_sale_of_asset(self): + asset = create_asset( + item_code="Macbook Pro", + gross_purchase_amount=600, + calculate_depreciation=1, + depreciation_method="Straight Line", + available_for_use_date="2021-01-01", + depreciation_start_date="2021-12-31", + frequency_of_depreciation=12, + total_number_of_depreciations=3, + is_existing_asset=1, + submit=1, + ) + post_depreciation_entries(date="2021-12-31") + asset.reload() + + expected_depreciation_before_adjustment = [ + ["2021-12-31", 200, 200], + ["2022-12-31", 200, 400], + ["2023-12-31", 200, 600], + ] + + schedules = [ + [cstr(d.schedule_date), d.depreciation_amount, d.accumulated_depreciation_amount] + for d in get_depr_schedule(asset.name, "Active") + ] + self.assertEqual(schedules, expected_depreciation_before_adjustment) + + current_asset_value = asset.finance_books[0].value_after_depreciation + asset_value_adjustment = make_asset_value_adjustment( + asset=asset, + date="2022-01-15", + current_asset_value=current_asset_value, + new_asset_value=500, + ) + asset_value_adjustment.submit() + + expected_depreciation_after_adjustment = [ + ["2021-12-31", 200, 200], + ["2022-12-31", 250, 450], + ["2023-12-31", 250, 700], + ] + + schedules = [ + [cstr(d.schedule_date), d.depreciation_amount, d.accumulated_depreciation_amount] + for d in get_depr_schedule(asset.name, "Active") + ] + self.assertEqual(schedules, expected_depreciation_after_adjustment) + + si = create_sales_invoice( + item_code="Macbook Pro", asset=asset.name, qty=1, rate=300, posting_date=getdate("2022-04-01") + ) + asset.load_from_db() + + self.assertEqual(frappe.db.get_value("Asset", asset.name, "status"), "Sold") + + expected_depreciation_after_sale = [ + ["2021-12-31", 200.0, 200.0], + ["2022-04-01", 62.33, 262.33], + ] + + schedules = [ + [cstr(d.schedule_date), d.depreciation_amount, d.accumulated_depreciation_amount] + for d in get_depr_schedule(asset.name, "Active") + ] + self.assertEqual(schedules, expected_depreciation_after_sale) + + si.cancel() + asset.reload() + + self.assertEqual(frappe.db.get_value("Asset", asset.name, "status"), "Partially Depreciated") + + schedules = [ + [cstr(d.schedule_date), d.depreciation_amount, d.accumulated_depreciation_amount] + for d in get_depr_schedule(asset.name, "Active") + ] + self.assertEqual(schedules, expected_depreciation_after_adjustment) + + def test_depreciation_schedule_after_sale_of_asset_wdv_method(self): + asset = create_asset( + item_code="Macbook Pro", + gross_purchase_amount=500, + calculate_depreciation=1, + depreciation_method="Written Down Value", + available_for_use_date="2021-01-01", + depreciation_start_date="2021-12-31", + rate_of_depreciation=50, + frequency_of_depreciation=12, + total_number_of_depreciations=3, + is_existing_asset=1, + submit=1, + ) + post_depreciation_entries(date="2021-12-31") + asset.reload() + + expected_depreciation_before_repair = [ + ["2021-12-31", 250.0, 250.0], + ["2022-12-31", 125.0, 375.0], + ["2023-12-31", 125.0, 500.0], + ] + + schedules = [ + [cstr(d.schedule_date), d.depreciation_amount, d.accumulated_depreciation_amount] + for d in get_depr_schedule(asset.name, "Active") + ] + self.assertEqual(schedules, expected_depreciation_before_repair) + + create_asset_repair( + asset=asset, + capitalize_repair_cost=1, + item="_Test Non Stock Item", + failure_date="2022-03-01", + pi_repair_cost1=60, + pi_repair_cost2=40, + increase_in_asset_life=0, + submit=1, + ) + + expected_depreciation_after_repair = [ + ["2021-12-31", 250.0, 250.0], + ["2022-12-31", 175.0, 425.0], + ["2023-12-31", 175.0, 600.0], + ] + + schedules = [ + [cstr(d.schedule_date), d.depreciation_amount, d.accumulated_depreciation_amount] + for d in get_depr_schedule(asset.name, "Active") + ] + self.assertEqual(schedules, expected_depreciation_after_repair) + + si = create_sales_invoice( + item_code="Macbook Pro", asset=asset.name, qty=1, rate=300, posting_date=getdate("2022-04-01") + ) + asset.load_from_db() + + self.assertEqual(frappe.db.get_value("Asset", asset.name, "status"), "Sold") + + expected_depreciation_after_sale = [ + ["2021-12-31", 250.0, 250.0], + ["2022-04-01", 43.63, 293.63], + ] + + schedules = [ + [cstr(d.schedule_date), d.depreciation_amount, d.accumulated_depreciation_amount] + for d in get_depr_schedule(asset.name, "Active") + ] + self.assertEqual(schedules, expected_depreciation_after_sale) + + si.cancel() + asset.reload() + self.assertEqual(frappe.db.get_value("Asset", asset.name, "status"), "Partially Depreciated") + + schedules = [ + [cstr(d.schedule_date), d.depreciation_amount, d.accumulated_depreciation_amount] + for d in get_depr_schedule(asset.name, "Active") + ] + self.assertEqual(schedules, expected_depreciation_after_repair) diff --git a/erpnext/patches/v15_0/create_asset_depreciation_schedules_from_assets.py b/erpnext/patches/v15_0/create_asset_depreciation_schedules_from_assets.py index ba923b4e701..d4350d8f9a1 100644 --- a/erpnext/patches/v15_0/create_asset_depreciation_schedules_from_assets.py +++ b/erpnext/patches/v15_0/create_asset_depreciation_schedules_from_assets.py @@ -22,7 +22,7 @@ def execute(): asset_depr_schedule_doc.name, {"docstatus": 1, "status": "Active"}, ) - + update_depreciation_schedules(depreciation_schedules, asset_depr_schedule_doc.name)