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 107d38057a2..c9fa0ba59da 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 @@ -75,6 +75,116 @@ class TestAssetDepreciationSchedule(FrappeTestCase): ] self.assertEqual(schedules, expected_schedules) + def test_schedule_for_slm_for_existing_asset_daily_pro_rata_enabled(self): + frappe.db.set_single_value("Accounts Settings", "calculate_depr_using_total_days", 1) + asset = create_asset( + calculate_depreciation=1, + depreciation_method="Straight Line", + available_for_use_date="2023-10-10", + is_existing_asset=1, + opening_number_of_booked_depreciations=9, + opening_accumulated_depreciation=265, + depreciation_start_date="2024-07-31", + total_number_of_depreciations=24, + frequency_of_depreciation=1, + gross_purchase_amount=731, + daily_prorata_based=1, + ) + + expected_schedules = [ + ["2024-07-31", 31.0, 296.0], + ["2024-08-31", 31.0, 327.0], + ["2024-09-30", 30.0, 357.0], + ["2024-10-31", 31.0, 388.0], + ["2024-11-30", 30.0, 418.0], + ["2024-12-31", 31.0, 449.0], + ["2025-01-31", 31.0, 480.0], + ["2025-02-28", 28.0, 508.0], + ["2025-03-31", 31.0, 539.0], + ["2025-04-30", 30.0, 569.0], + ["2025-05-31", 31.0, 600.0], + ["2025-06-30", 30.0, 630.0], + ["2025-07-31", 31.0, 661.0], + ["2025-08-31", 31.0, 692.0], + ["2025-09-30", 30.0, 722.0], + ["2025-10-10", 9.0, 731.0], + ] + schedules = [ + [cstr(d.schedule_date), flt(d.depreciation_amount, 2), d.accumulated_depreciation_amount] + for d in get_depr_schedule(asset.name, "Draft") + ] + self.assertEqual(schedules, expected_schedules) + frappe.db.set_single_value("Accounts Settings", "calculate_depr_using_total_days", 0) + + def test_schedule_for_slm_for_existing_asset(self): + asset = create_asset( + calculate_depreciation=1, + depreciation_method="Straight Line", + available_for_use_date="2023-10-10", + is_existing_asset=1, + opening_number_of_booked_depreciations=9, + opening_accumulated_depreciation=265.30, + depreciation_start_date="2024-07-31", + total_number_of_depreciations=24, + frequency_of_depreciation=1, + gross_purchase_amount=731, + ) + + expected_schedules = [ + ["2024-07-31", 30.46, 295.76], + ["2024-08-31", 30.46, 326.22], + ["2024-09-30", 30.46, 356.68], + ["2024-10-31", 30.46, 387.14], + ["2024-11-30", 30.46, 417.6], + ["2024-12-31", 30.46, 448.06], + ["2025-01-31", 30.46, 478.52], + ["2025-02-28", 30.46, 508.98], + ["2025-03-31", 30.46, 539.44], + ["2025-04-30", 30.46, 569.9], + ["2025-05-31", 30.46, 600.36], + ["2025-06-30", 30.46, 630.82], + ["2025-07-31", 30.46, 661.28], + ["2025-08-31", 30.46, 691.74], + ["2025-09-30", 30.46, 722.2], + ["2025-10-10", 8.8, 731.0], + ] + schedules = [ + [cstr(d.schedule_date), flt(d.depreciation_amount, 2), d.accumulated_depreciation_amount] + for d in get_depr_schedule(asset.name, "Draft") + ] + self.assertEqual(schedules, expected_schedules) + + def test_schedule_sl_method_for_existing_asset_with_frequency_of_3_months(self): + asset = create_asset( + calculate_depreciation=1, + depreciation_method="Straight Line", + available_for_use_date="2023-11-01", + is_existing_asset=1, + opening_number_of_booked_depreciations=4, + opening_accumulated_depreciation=223.15, + depreciation_start_date="2024-12-31", + total_number_of_depreciations=12, + frequency_of_depreciation=3, + gross_purchase_amount=731, + ) + + expected_schedules = [ + ["2024-12-31", 60.92, 284.07], + ["2025-03-31", 60.92, 344.99], + ["2025-06-30", 60.92, 405.91], + ["2025-09-30", 60.92, 466.83], + ["2025-12-31", 60.92, 527.75], + ["2026-03-31", 60.92, 588.67], + ["2026-06-30", 60.92, 649.59], + ["2026-09-30", 60.92, 710.51], + ["2026-11-01", 20.49, 731.0], + ] + schedules = [ + [cstr(d.schedule_date), flt(d.depreciation_amount, 2), d.accumulated_depreciation_amount] + for d in get_depr_schedule(asset.name, "Draft") + ] + self.assertEqual(schedules, expected_schedules) + # Enable Checkbox to Calculate depreciation using total days in depreciation period def test_daily_prorata_based_depr_after_enabling_configuration(self): frappe.db.set_single_value("Accounts Settings", "calculate_depr_using_total_days", 1)