diff --git a/erpnext/assets/doctype/asset_depreciation_schedule/deppreciation_schedule_controller.py b/erpnext/assets/doctype/asset_depreciation_schedule/deppreciation_schedule_controller.py index c66dee29e2a..fd1d45f98cd 100644 --- a/erpnext/assets/doctype/asset_depreciation_schedule/deppreciation_schedule_controller.py +++ b/erpnext/assets/doctype/asset_depreciation_schedule/deppreciation_schedule_controller.py @@ -102,6 +102,7 @@ class DepreciationScheduleController(StraightLineMethod, WDVMethod): self.skip_row = False self.depreciation_amount = 0 self.prev_per_day_depr = True + self.prev_depreciation_amount = 0 self.current_fiscal_year_end_date = None self.yearly_opening_wdv = self.pending_depreciation_amount self.get_number_of_pending_months() @@ -193,20 +194,11 @@ class DepreciationScheduleController(StraightLineMethod, WDVMethod): then from date should be 01-04-2024 """ if self.asset_doc.opening_number_of_booked_depreciations > 0: - from_date = add_months( - self.asset_doc.available_for_use_date, - ( - self.asset_doc.opening_number_of_booked_depreciations - * self.fb_row.frequency_of_depreciation - ) - - 1, + from_date = add_days( + add_months(self.fb_row.depreciation_start_date, (self.fb_row.frequency_of_depreciation * -1)), + 1, ) - if is_last_day_of_the_month(self.fb_row.depreciation_start_date): - return add_days(get_last_day(from_date), 1) - - # get from date when depreciation start date is not last day of the month - months_difference = month_diff(self.fb_row.depreciation_start_date, from_date) - 1 - return add_days(add_months(self.fb_row.depreciation_start_date, -1 * months_difference), 1) + return from_date else: return self.asset_doc.available_for_use_date @@ -259,10 +251,11 @@ class DepreciationScheduleController(StraightLineMethod, WDVMethod): if cint(frappe.db.get_single_value("Accounts Settings", "calculate_depr_using_total_days")): last_depr_date = self.get_last_booked_depreciation_date() if last_depr_date: - self.total_pending_days = date_diff(self.final_schedule_date, last_depr_date) + 1 - self.total_pending_days = date_diff( - self.final_schedule_date, self.asset_doc.available_for_use_date - ) + self.total_pending_days = date_diff(self.final_schedule_date, last_depr_date) - 1 + else: + self.total_pending_days = date_diff( + self.final_schedule_date, self.asset_doc.available_for_use_date + ) else: self.total_pending_years = self.pending_months / 12 @@ -283,9 +276,12 @@ class DepreciationScheduleController(StraightLineMethod, WDVMethod): self.fiscal_year_changed = True def get_prev_depreciation_amount(self, row_idx): - self.prev_depreciation_amount = 0 - if row_idx > 0 and len(self.get("depreciation_schedule")) > row_idx - 1: - self.prev_depreciation_amount = self.get("depreciation_schedule")[row_idx - 1].depreciation_amount + if row_idx > 1: + self.prev_depreciation_amount = 0 + if len(self.get("depreciation_schedule")) > row_idx - 1: + self.prev_depreciation_amount = self.get("depreciation_schedule")[ + row_idx - 1 + ].depreciation_amount def get_next_schedule_date(self, row_idx): schedule_date = add_months( diff --git a/erpnext/assets/doctype/asset_depreciation_schedule/depreciation_methods.py b/erpnext/assets/doctype/asset_depreciation_schedule/depreciation_methods.py index 961f7c70db1..4bea70e4049 100644 --- a/erpnext/assets/doctype/asset_depreciation_schedule/depreciation_methods.py +++ b/erpnext/assets/doctype/asset_depreciation_schedule/depreciation_methods.py @@ -86,7 +86,11 @@ class WDVMethod(Document): yearly_amount = ( flt(self.pending_depreciation_amount) * flt(self.fb_row.rate_of_depreciation) / 100 ) - return (yearly_amount * self.fb_row.frequency_of_depreciation) / 12 + + depreciation_amount = (yearly_amount * self.fb_row.frequency_of_depreciation) / 12 + self.prev_depreciation_amount = depreciation_amount + + return depreciation_amount else: return self.prev_depreciation_amount 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 a4f761bfb75..44cb0a105f8 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 @@ -141,22 +141,22 @@ class TestAssetDepreciationSchedule(IntegrationTestCase): ) 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], + ["2024-07-31", 30.4, 295.7], + ["2024-08-31", 30.4, 326.1], + ["2024-09-30", 30.4, 356.5], + ["2024-10-31", 30.4, 386.9], + ["2024-11-30", 30.4, 417.3], + ["2024-12-31", 30.4, 447.7], + ["2025-01-31", 30.4, 478.1], + ["2025-02-28", 30.4, 508.5], + ["2025-03-31", 30.4, 538.9], + ["2025-04-30", 30.4, 569.3], + ["2025-05-31", 30.4, 599.7], + ["2025-06-30", 30.4, 630.1], + ["2025-07-31", 30.4, 660.5], + ["2025-08-31", 30.4, 690.9], + ["2025-09-30", 30.4, 721.3], + ["2025-10-10", 9.7, 731.0], ] schedules = [ [cstr(d.schedule_date), flt(d.depreciation_amount, 2), d.accumulated_depreciation_amount] @@ -179,15 +179,15 @@ class TestAssetDepreciationSchedule(IntegrationTestCase): ) 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], + ["2024-12-31", 60.9, 284.05], + ["2025-03-31", 60.9, 344.95], + ["2025-06-30", 60.9, 405.85], + ["2025-09-30", 60.9, 466.75], + ["2025-12-31", 60.9, 527.65], + ["2026-03-31", 60.9, 588.55], + ["2026-06-30", 60.9, 649.45], + ["2026-09-30", 60.9, 710.35], + ["2026-11-01", 20.65, 731.0], ] schedules = [ [cstr(d.schedule_date), flt(d.depreciation_amount, 2), d.accumulated_depreciation_amount] @@ -274,12 +274,12 @@ class TestAssetDepreciationSchedule(IntegrationTestCase): expected_schedules = [ ["2021-03-31", 4383.56, 4383.56], - ["2021-06-30", 9535.45, 13919.01], - ["2021-09-30", 9640.23, 23559.24], - ["2021-12-31", 9640.23, 33199.47], - ["2022-03-31", 9430.66, 42630.13], - ["2022-06-30", 5721.27, 48351.4], - ["2022-08-20", 51648.6, 100000.0], + ["2021-06-30", 9972.6, 14356.16], + ["2021-09-30", 10082.19, 24438.35], + ["2021-12-31", 10082.19, 34520.54], + ["2022-03-31", 6458.25, 40978.79], + ["2022-06-30", 6530.01, 47508.8], + ["2022-08-20", 52491.2, 100000.0], ] schedules = [ @@ -303,13 +303,13 @@ class TestAssetDepreciationSchedule(IntegrationTestCase): ) expected_schedules = [ - ["2020-02-29", 1092.90, 1092.90], - ["2020-08-31", 19944.01, 21036.91], - ["2021-02-28", 19618.83, 40655.74], - ["2021-08-31", 11966.4, 52622.14], - ["2022-02-28", 11771.3, 64393.44], - ["2022-08-31", 7179.84, 71573.28], - ["2023-02-20", 28426.72, 100000.0], + ["2020-02-29", 1092.9, 1092.9], + ["2020-08-31", 20109.29, 21202.19], + ["2021-02-28", 15630.03, 36832.22], + ["2021-08-31", 15889.09, 52721.31], + ["2022-02-28", 9378.02, 62099.33], + ["2022-08-31", 9533.46, 71632.79], + ["2023-02-20", 28367.21, 100000.0], ] schedules = [ @@ -377,37 +377,3 @@ class TestAssetDepreciationSchedule(IntegrationTestCase): asset.reload() self.assertEqual(asset.finance_books[0].total_number_of_booked_depreciations, 14) - - def test_schedule_for_wdv_method_for_existing_asset(self): - asset = create_asset( - calculate_depreciation=1, - depreciation_method="Written Down Value", - available_for_use_date="2020-07-17", - is_existing_asset=1, - opening_number_of_booked_depreciations=2, - opening_accumulated_depreciation=11666.67, - depreciation_start_date="2021-04-30", - total_number_of_depreciations=12, - frequency_of_depreciation=3, - gross_purchase_amount=50000, - rate_of_depreciation=40, - ) - - self.assertEqual(asset.status, "Draft") - expected_schedules = [ - ["2021-04-30", 3833.33, 15500.0], - ["2021-07-31", 3833.33, 19333.33], - ["2021-10-31", 3833.33, 23166.66], - ["2022-01-31", 3833.33, 26999.99], - ["2022-04-30", 2300.0, 29299.99], - ["2022-07-31", 2300.0, 31599.99], - ["2022-10-31", 2300.0, 33899.99], - ["2023-01-31", 2300.0, 36199.99], - ["2023-04-30", 1380.0, 37579.99], - ["2023-07-31", 12420.01, 50000.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)