From 33af3b9f7ce612ae26434e97a17ecd9aecfe76aa Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 13 Feb 2025 18:02:56 +0530 Subject: [PATCH] fix: patch for creating asset depreciation schedule records --- ...sset_depreciation_schedules_from_assets.py | 92 +++++++------------ 1 file changed, 31 insertions(+), 61 deletions(-) diff --git a/erpnext/patches/v15_0/create_asset_depreciation_schedules_from_assets.py b/erpnext/patches/v15_0/create_asset_depreciation_schedules_from_assets.py index 3087ff0209..ff77fbb91e 100644 --- a/erpnext/patches/v15_0/create_asset_depreciation_schedules_from_assets.py +++ b/erpnext/patches/v15_0/create_asset_depreciation_schedules_from_assets.py @@ -1,73 +1,29 @@ import frappe +from frappe.utils import cstr def execute(): - frappe.reload_doc("assets", "doctype", "Asset Depreciation Schedule") - frappe.reload_doc("assets", "doctype", "Asset Finance Book") - - assets = get_details_of_draft_or_submitted_depreciable_assets() - asset_finance_books_map = get_asset_finance_books_map() - asset_depreciation_schedules_map = get_asset_depreciation_schedules_map() - for asset in assets: - if not asset_depreciation_schedules_map.get(asset.name): + for key, fb_row in asset_finance_books_map.items(): + depreciation_schedules = asset_depreciation_schedules_map.get(key) + if not depreciation_schedules: continue - depreciation_schedules = asset_depreciation_schedules_map[asset.name] - - for fb_row in asset_finance_books_map[asset.name]: - asset_depr_schedule_doc = frappe.new_doc("Asset Depreciation Schedule") - - asset_depr_schedule_doc.set_draft_asset_depr_schedule_details(asset, fb_row) + asset_depr_schedule_doc = frappe.new_doc("Asset Depreciation Schedule") + asset_depr_schedule_doc.set_draft_asset_depr_schedule_details(fb_row, fb_row) + asset_depr_schedule_doc.flags.ignore_validate = True + asset_depr_schedule_doc.insert() - asset_depr_schedule_doc.insert() + if fb_row.docstatus == 1: + frappe.db.set_value( + "Asset Depreciation Schedule", + asset_depr_schedule_doc.name, + {"docstatus": 1, "status": "Active"}, + ) - if asset.docstatus == 1: - asset_depr_schedule_doc.submit() - - depreciation_schedules_of_fb_row = [ - ds for ds in depreciation_schedules if ds["finance_book_id"] == str(fb_row.idx) - ] - - update_depreciation_schedules(depreciation_schedules_of_fb_row, asset_depr_schedule_doc.name) - - -def get_details_of_draft_or_submitted_depreciable_assets(): - asset = frappe.qb.DocType("Asset") - - records = ( - frappe.qb.from_(asset) - .select( - asset.name, - asset.opening_accumulated_depreciation, - asset.gross_purchase_amount, - asset.opening_number_of_booked_depreciations, - asset.docstatus, - ) - .where(asset.calculate_depreciation == 1) - .where(asset.docstatus < 2) - ).run(as_dict=True) - - return records - - -def group_records_by_asset_name(records): - grouped_dict = {} - - for item in records: - key = list(item.keys())[0] - value = item[key] - - if value not in grouped_dict: - grouped_dict[value] = [] - - del item["asset_name"] - - grouped_dict[value].append(item) - - return grouped_dict + update_depreciation_schedules(depreciation_schedules, asset_depr_schedule_doc.name) def get_asset_finance_books_map(): @@ -87,12 +43,22 @@ def get_asset_finance_books_map(): afb.frequency_of_depreciation, afb.rate_of_depreciation, afb.expected_value_after_useful_life, + afb.daily_prorata_based, + afb.shift_based, + asset.docstatus, + asset.name, + asset.opening_accumulated_depreciation, + asset.gross_purchase_amount, + asset.opening_number_of_booked_depreciations, ) .where(asset.docstatus < 2) + .where(asset.calculate_depreciation == 1) .orderby(afb.idx) ).run(as_dict=True) - asset_finance_books_map = group_records_by_asset_name(records) + asset_finance_books_map = frappe._dict() + for d in records: + asset_finance_books_map.setdefault((d.asset_name, cstr(d.finance_book)), d) return asset_finance_books_map @@ -108,13 +74,17 @@ def get_asset_depreciation_schedules_map(): .select( asset.name.as_("asset_name"), ds.name, + ds.finance_book, ds.finance_book_id, ) .where(asset.docstatus < 2) + .where(asset.calculate_depreciation == 1) .orderby(ds.idx) ).run(as_dict=True) - asset_depreciation_schedules_map = group_records_by_asset_name(records) + asset_depreciation_schedules_map = frappe._dict() + for d in records: + asset_depreciation_schedules_map.setdefault((d.asset_name, cstr(d.finance_book)), []).append(d) return asset_depreciation_schedules_map -- GitLab