From ca8c82749263c0229e9ffa74fcb2debbfc7d164a Mon Sep 17 00:00:00 2001 From: anandbaburajan Date: Sun, 4 Dec 2022 19:22:58 +0530 Subject: [PATCH] chore: refactor schedules in split_asset functions --- erpnext/assets/doctype/asset/asset.py | 80 +++++++++++-------- .../asset_depreciation_schedule.py | 11 ++- 2 files changed, 55 insertions(+), 36 deletions(-) diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py index 118bd02fe2..553e037916 100644 --- a/erpnext/assets/doctype/asset/asset.py +++ b/erpnext/assets/doctype/asset/asset.py @@ -34,6 +34,7 @@ from erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_sched get_asset_depr_schedule_name, get_depr_schedule_from_asset_depr_schedule_of_asset, make_draft_asset_depr_schedules, + make_new_active_asset_depr_schedules_and_cancel_current_ones, update_draft_asset_depr_schedules, ) from erpnext.controllers.accounts_controller import AccountsController @@ -895,34 +896,35 @@ def update_existing_asset(asset, remaining_qty): }, ) - for finance_book in asset.get("finance_books"): + for row in asset.get("finance_books"): value_after_depreciation = flt( - (finance_book.value_after_depreciation * remaining_qty) / asset.asset_quantity + (row.value_after_depreciation * remaining_qty) / asset.asset_quantity ) expected_value_after_useful_life = flt( - (finance_book.expected_value_after_useful_life * remaining_qty) / asset.asset_quantity + (row.expected_value_after_useful_life * remaining_qty) / asset.asset_quantity ) frappe.db.set_value( - "Asset Finance Book", finance_book.name, "value_after_depreciation", value_after_depreciation + "Asset Finance Book", row.name, "value_after_depreciation", value_after_depreciation ) frappe.db.set_value( "Asset Finance Book", - finance_book.name, + row.name, "expected_value_after_useful_life", expected_value_after_useful_life, ) - accumulated_depreciation = 0 + accumulated_depreciation = 0 + depr_schedule = get_depr_schedule_from_asset_depr_schedule_of_asset(asset.name, row.finance_book) - for term in asset.get("schedules"): - depreciation_amount = flt((term.depreciation_amount * remaining_qty) / asset.asset_quantity) - frappe.db.set_value( - "Depreciation Schedule", term.name, "depreciation_amount", depreciation_amount - ) - accumulated_depreciation += depreciation_amount - frappe.db.set_value( - "Depreciation Schedule", term.name, "accumulated_depreciation_amount", accumulated_depreciation - ) + for term in depr_schedule: + depreciation_amount = flt((term.depreciation_amount * remaining_qty) / asset.asset_quantity) + frappe.db.set_value( + "Depreciation Schedule", term.name, "depreciation_amount", depreciation_amount + ) + accumulated_depreciation += depreciation_amount + frappe.db.set_value( + "Depreciation Schedule", term.name, "accumulated_depreciation_amount", accumulated_depreciation + ) def create_new_asset_after_split(asset, split_qty): @@ -936,31 +938,41 @@ def create_new_asset_after_split(asset, split_qty): new_asset.opening_accumulated_depreciation = opening_accumulated_depreciation new_asset.asset_quantity = split_qty new_asset.split_from = asset.name - accumulated_depreciation = 0 - for finance_book in new_asset.get("finance_books"): - finance_book.value_after_depreciation = flt( - (finance_book.value_after_depreciation * split_qty) / asset.asset_quantity + for row in new_asset.get("finance_books"): + row.value_after_depreciation = flt( + (row.value_after_depreciation * split_qty) / asset.asset_quantity ) - finance_book.expected_value_after_useful_life = flt( - (finance_book.expected_value_after_useful_life * split_qty) / asset.asset_quantity + row.expected_value_after_useful_life = flt( + (row.expected_value_after_useful_life * split_qty) / asset.asset_quantity ) - for term in new_asset.get("schedules"): - depreciation_amount = flt((term.depreciation_amount * split_qty) / asset.asset_quantity) - term.depreciation_amount = depreciation_amount - accumulated_depreciation += depreciation_amount - term.accumulated_depreciation_amount = accumulated_depreciation - new_asset.submit() - new_asset.set_status() - for term in new_asset.get("schedules"): - # Update references in JV - if term.journal_entry: - add_reference_in_jv_on_split( - term.journal_entry, new_asset.name, asset.name, term.depreciation_amount - ) + make_new_active_asset_depr_schedules_and_cancel_current_ones( + new_asset, "create_new_asset_after_split TODO", submit=False + ) + + for row in new_asset.get("finance_books"): + accumulated_depreciation = 0 + + depr_schedule = get_depr_schedule_from_asset_depr_schedule_of_asset( + new_asset.name, row.finance_book + ) + + for term in depr_schedule: + depreciation_amount = flt((term.depreciation_amount * split_qty) / asset.asset_quantity) + term.depreciation_amount = depreciation_amount + accumulated_depreciation += depreciation_amount + term.accumulated_depreciation_amount = accumulated_depreciation + + # Update references in JV + if term.journal_entry: + add_reference_in_jv_on_split( + term.journal_entry, new_asset.name, asset.name, term.depreciation_amount + ) + + new_asset.set_status() return new_asset 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 ed104c63de..89c9c1a84f 100644 --- a/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py +++ b/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py @@ -84,7 +84,7 @@ def convert_draft_asset_depr_schedules_into_active(asset_doc): def make_new_active_asset_depr_schedules_and_cancel_current_ones( - asset_doc, notes, date_of_disposal=None, date_of_return=None + asset_doc, notes, submit=True, date_of_disposal=None, date_of_return=None ): for row in asset_doc.get("finance_books"): current_asset_depr_schedule_name = get_asset_depr_schedule_name(asset_doc.name, row.finance_book) @@ -107,7 +107,10 @@ def make_new_active_asset_depr_schedules_and_cancel_current_ones( current_asset_depr_schedule_doc.cancel() - new_asset_depr_schedule_doc.submit() + new_asset_depr_schedule_doc.insert() + + if submit: + new_asset_depr_schedule_doc.submit() def get_temp_asset_depr_schedule_doc(asset_doc, row, date_of_disposal=None, date_of_return=None): @@ -149,6 +152,10 @@ def get_asset_depr_schedule_name(asset_name, finance_book): def get_depr_schedule_from_asset_depr_schedule_of_asset(asset_name, finance_book): asset_depr_schedule_name = get_asset_depr_schedule_name(asset_name, finance_book) + + if not asset_depr_schedule_name: + return + asset_depr_schedule_doc = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule_name) return asset_depr_schedule_doc.get("depreciation_schedule")