diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py index f55dceddf0..5fe756859f 100644 --- a/erpnext/assets/doctype/asset/asset.py +++ b/erpnext/assets/doctype/asset/asset.py @@ -31,6 +31,7 @@ from erpnext.assets.doctype.asset.depreciation import ( from erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_schedule import ( make_draft_asset_depreciation_schedules, modify_draft_asset_depreciation_schedules, + convert_draft_asset_depreciation_schedules_into_active, ) from erpnext.assets.doctype.asset_category.asset_category import get_asset_category_account from erpnext.controllers.accounts_controller import AccountsController @@ -58,6 +59,7 @@ class Asset(AccountsController): self.make_asset_movement() if not self.booked_fixed_asset and self.validate_make_gl_entry(): self.make_gl_entries() + convert_draft_asset_depreciation_schedules_into_active(self) def on_cancel(self): self.validate_cancellation() @@ -407,45 +409,6 @@ class Asset(AccountsController): if len(self.finance_books) == 1: return True - def set_accumulated_depreciation( - self, date_of_sale=None, date_of_return=None, ignore_booked_entry=False - ): - straight_line_idx = [ - d.idx for d in self.get("schedules") if d.depreciation_method == "Straight Line" - ] - finance_books = [] - - for i, d in enumerate(self.get("schedules")): - if ignore_booked_entry and d.journal_entry: - continue - - if int(d.finance_book_id) not in finance_books: - accumulated_depreciation = flt(self.opening_accumulated_depreciation) - value_after_depreciation = flt(self.get_value_after_depreciation(d.finance_book_id)) - finance_books.append(int(d.finance_book_id)) - - depreciation_amount = flt(d.depreciation_amount, d.precision("depreciation_amount")) - value_after_depreciation -= flt(depreciation_amount) - - # for the last row, if depreciation method = Straight Line - if ( - straight_line_idx - and i == max(straight_line_idx) - 1 - and not date_of_sale - and not date_of_return - ): - book = self.get("finance_books")[cint(d.finance_book_id) - 1] - depreciation_amount += flt( - value_after_depreciation - flt(book.expected_value_after_useful_life), - d.precision("depreciation_amount"), - ) - - d.depreciation_amount = depreciation_amount - accumulated_depreciation += d.depreciation_amount - d.accumulated_depreciation_amount = flt( - accumulated_depreciation, d.precision("accumulated_depreciation_amount") - ) - def get_value_after_depreciation(self, idx): return flt(self.get("finance_books")[cint(idx) - 1].value_after_depreciation) diff --git a/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py b/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py index 1a545dd81a..27920e3933 100644 --- a/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py +++ b/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py @@ -29,7 +29,9 @@ def make_draft_asset_depreciation_schedules(asset): def modify_draft_asset_depreciation_schedules(asset): for row in asset.get("finance_books"): - asset_depr_schedule_name = get_draft_asset_depreciation_schedule_name(asset.name, row) + asset_depr_schedule_name = get_draft_asset_depreciation_schedule_name( + asset.name, row.finance_book + ) if not asset_depr_schedule_name: return @@ -57,11 +59,29 @@ def set_draft_asset_depreciation_schedule_details(asset_depr_schedule, asset_nam asset_depr_schedule.status = "Draft" +def convert_draft_asset_depreciation_schedules_into_active(asset): + for row in asset.get("finance_books"): + asset_depr_schedule_name = get_draft_asset_depreciation_schedule_name( + asset.name, row.finance_book + ) + + if not asset_depr_schedule_name: + return + + asset_depr_schedule = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule_name) + + asset_depr_schedule.status = "Active" + + asset_depr_schedule.submit() + + def make_new_active_asset_depreciation_schedules_from_existing( asset, date_of_disposal=None, date_of_return=None ): for row in asset.get("finance_books"): - old_asset_depr_schedule_name = get_active_asset_depreciation_schedule(asset.name, row) + old_asset_depr_schedule_name = get_active_asset_depreciation_schedule( + asset.name, row.finance_book + ) if not old_asset_depr_schedule_name: return @@ -79,7 +99,7 @@ def make_new_active_asset_depreciation_schedules_from_existing( asset_depr_schedule.save() -def make_depreciation_schedule(asset_depr_schedule, asset, row, date_of_disposal): +def make_depreciation_schedule(asset_depr_schedule, asset, row, date_of_disposal=None): if row.depreciation_method != "Manual" and not asset_depr_schedule.get("depreciation_schedule"): asset_depr_schedule.depreciation_schedule = [] @@ -293,7 +313,12 @@ def add_depr_schedule_row( def set_accumulated_depreciation( - asset_depr_schedule, asset, row, date_of_disposal, date_of_return, ignore_booked_entry=False + asset_depr_schedule, + asset, + row, + date_of_disposal=None, + date_of_return=None, + ignore_booked_entry=False ): straight_line_idx = [ d.idx for d in asset_depr_schedule.get("depreciation_schedule")