fix: Update depreciation schedule via asset repair (#41344)

* fix: Update depreciation schedule via asset repair

* fix: test cases related to modified depreciation schedule
This commit is contained in:
Nabin Hait
2024-05-29 11:07:03 +05:30
committed by GitHub
parent 014486de39
commit eb418e8659
4 changed files with 23 additions and 18 deletions

View File

@@ -2979,10 +2979,8 @@ class TestSalesInvoice(FrappeTestCase):
["2021-06-30", 20000.0, 21366.12, True], ["2021-06-30", 20000.0, 21366.12, True],
["2022-06-30", 20000.0, 41366.12, False], ["2022-06-30", 20000.0, 41366.12, False],
["2023-06-30", 20000.0, 61366.12, False], ["2023-06-30", 20000.0, 61366.12, False],
["2024-06-30", 20000.0, 81366.12, False], ["2024-06-06", 38633.88, 100000.0, False],
["2025-06-06", 18633.88, 100000.0, False],
] ]
for i, schedule in enumerate(asset.schedules): for i, schedule in enumerate(asset.schedules):
self.assertEqual(getdate(expected_values[i][0]), schedule.schedule_date) self.assertEqual(getdate(expected_values[i][0]), schedule.schedule_date)
self.assertEqual(expected_values[i][1], schedule.depreciation_amount) self.assertEqual(expected_values[i][1], schedule.depreciation_amount)

View File

@@ -12,6 +12,7 @@ from frappe.utils import (
add_months, add_months,
add_years, add_years,
cint, cint,
cstr,
date_diff, date_diff,
flt, flt,
get_datetime, get_datetime,
@@ -361,9 +362,11 @@ class Asset(AccountsController):
final_number_of_depreciations = cint(finance_book.total_number_of_depreciations) - cint( final_number_of_depreciations = cint(finance_book.total_number_of_depreciations) - cint(
self.number_of_depreciations_booked self.number_of_depreciations_booked
) )
has_pro_rata = self.check_is_pro_rata(finance_book) has_pro_rata = self.check_is_pro_rata(finance_book)
if has_pro_rata: depr_already_booked = any(
[d.journal_entry for d in self.get("schedules") if d.finance_book == finance_book.finance_book]
)
if has_pro_rata and not depr_already_booked:
final_number_of_depreciations += 1 final_number_of_depreciations += 1
has_wdv_or_dd_non_yearly_pro_rata = False has_wdv_or_dd_non_yearly_pro_rata = False
@@ -543,7 +546,7 @@ class Asset(AccountsController):
"depreciation_amount": depreciation_amount, "depreciation_amount": depreciation_amount,
"depreciation_method": finance_book.depreciation_method, "depreciation_method": finance_book.depreciation_method,
"finance_book": finance_book.finance_book, "finance_book": finance_book.finance_book,
"finance_book_id": finance_book.idx, "finance_book_id": cstr(finance_book.idx),
"shift": shift, "shift": shift,
}, },
) )
@@ -749,7 +752,6 @@ class Asset(AccountsController):
): ):
straight_line_idx = [] straight_line_idx = []
finance_books = [] finance_books = []
for i, d in enumerate(self.get("schedules")): for i, d in enumerate(self.get("schedules")):
if ignore_booked_entry and d.journal_entry: if ignore_booked_entry and d.journal_entry:
continue continue
@@ -771,7 +773,10 @@ class Asset(AccountsController):
finance_books.append(int(d.finance_book_id)) finance_books.append(int(d.finance_book_id))
depreciation_amount = flt(d.depreciation_amount, d.precision("depreciation_amount")) depreciation_amount = flt(d.depreciation_amount, d.precision("depreciation_amount"))
value_after_depreciation -= flt(depreciation_amount) if not d.journal_entry:
value_after_depreciation = flt(
flt(value_after_depreciation) - depreciation_amount, d.precision("depreciation_amount")
)
# for the last row, if depreciation method = Straight Line # for the last row, if depreciation method = Straight Line
if ( if (
@@ -783,10 +788,13 @@ class Asset(AccountsController):
book = self.get("finance_books")[cint(d.finance_book_id) - 1] book = self.get("finance_books")[cint(d.finance_book_id) - 1]
if not book.shift_based: if not book.shift_based:
depreciation_amount += flt( adjustment_amount = flt(
value_after_depreciation - flt(book.expected_value_after_useful_life), value_after_depreciation - flt(book.expected_value_after_useful_life),
d.precision("depreciation_amount"), d.precision("depreciation_amount"),
) )
depreciation_amount = flt(
depreciation_amount + adjustment_amount, d.precision("depreciation_amount")
)
d.depreciation_amount = depreciation_amount d.depreciation_amount = depreciation_amount
accumulated_depreciation += d.depreciation_amount accumulated_depreciation += d.depreciation_amount
@@ -1433,7 +1441,7 @@ def get_straight_line_or_manual_depr_amount(asset, row, schedule_idx, number_of_
# if the Depreciation Schedule is being modified after Asset Repair due to increase in asset value # if the Depreciation Schedule is being modified after Asset Repair due to increase in asset value
elif asset.flags.increase_in_asset_value_due_to_repair: elif asset.flags.increase_in_asset_value_due_to_repair:
return (flt(row.value_after_depreciation) - flt(row.expected_value_after_useful_life)) / flt( return (flt(row.value_after_depreciation) - flt(row.expected_value_after_useful_life)) / flt(
row.total_number_of_depreciations number_of_pending_depreciations
) )
# if the Depreciation Schedule is being modified after Asset Value Adjustment due to decrease in asset value # if the Depreciation Schedule is being modified after Asset Value Adjustment due to decrease in asset value
elif asset.flags.decrease_in_asset_value_due_to_value_adjustment: elif asset.flags.decrease_in_asset_value_due_to_value_adjustment:

View File

@@ -1355,9 +1355,9 @@ class TestDepreciationBasics(AssetSetup):
for schedule in asset.schedules: for schedule in asset.schedules:
if schedule.idx <= 3: if schedule.idx <= 3:
self.assertEqual(schedule.finance_book_id, 1) self.assertEqual(schedule.finance_book_id, "1")
else: else:
self.assertEqual(schedule.finance_book_id, 2) self.assertEqual(schedule.finance_book_id, "2")
def test_depreciation_entry_cancellation(self): def test_depreciation_entry_cancellation(self):
asset = create_asset( asset = create_asset(

View File

@@ -103,12 +103,11 @@ class TestAssetValueAdjustment(unittest.TestCase):
["2023-05-31", 9983.33, 45408.05], ["2023-05-31", 9983.33, 45408.05],
["2023-06-30", 9983.33, 55391.38], ["2023-06-30", 9983.33, 55391.38],
["2023-07-31", 9983.33, 65374.71], ["2023-07-31", 9983.33, 65374.71],
["2023-08-31", 8300.0, 73674.71], ["2023-08-31", 9960.0, 75334.71],
["2023-09-30", 8300.0, 81974.71], ["2023-09-30", 9960.0, 85294.71],
["2023-10-31", 8300.0, 90274.71], ["2023-10-31", 9960.0, 95254.71],
["2023-11-30", 8300.0, 98574.71], ["2023-11-30", 9960.0, 105214.71],
["2023-12-31", 8300.0, 106874.71], ["2023-12-15", 9960.0, 115174.71],
["2024-01-15", 8300.0, 115174.71],
] ]
schedules = [ schedules = [