From 7f5e761c041310e7dd53ebc12e81b70d69042f7b Mon Sep 17 00:00:00 2001 From: anandbaburajan Date: Thu, 15 Dec 2022 13:13:04 +0530 Subject: [PATCH] chore: add patch --- .../asset_depreciation_schedule.json | 4 +- .../asset_depreciation_schedule.py | 4 +- ...sset_depreciation_schedules_from_assets.py | 89 ++++++++++++++++++- 3 files changed, 92 insertions(+), 5 deletions(-) diff --git a/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.json b/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.json index 0fea6a5b19..199f73f508 100644 --- a/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.json +++ b/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.json @@ -142,7 +142,7 @@ }, { "fieldname": "finance_book_id", - "fieldtype": "Data", + "fieldtype": "Int", "hidden": 1, "label": "Finance Book Id", "print_hide": 1, @@ -161,7 +161,7 @@ "index_web_pages_for_search": 1, "is_submittable": 1, "links": [], - "modified": "2022-12-09 15:14:20.562294", + "modified": "2022-12-15 13:01:02.984906", "modified_by": "Administrator", "module": "Assets", "name": "Asset Depreciation Schedule", 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 986acc09d4..5639d3db97 100644 --- a/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py +++ b/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py @@ -167,7 +167,9 @@ def cancel_asset_depr_schedules(asset_doc): if not asset_depr_schedule_doc: continue - asset_depr_schedule_doc.status = "Cancelled" + frappe.db.set_value( + "Asset Depreciation Schedule", asset_depr_schedule_doc.name, "status", "Cancelled" + ) asset_depr_schedule_doc.cancel() 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 3e646b487f..11064a9c84 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,5 +1,90 @@ -# import frappe +import frappe def execute(): - pass + assets = get_details_of_depreciable_assets() + + for asset in assets: + finance_book_rows = get_details_of_asset_finance_books_rows(asset.name) + + for fb_row in finance_book_rows: + asset_depr_schedule_doc = frappe.new_doc("Asset Depreciation Schedule") + + asset_depr_schedule_doc.asset = asset.name + asset_depr_schedule_doc.finance_book = fb_row.finance_book + asset_depr_schedule_doc.finance_book_id = fb_row.idx + asset_depr_schedule_doc.opening_accumulated_depreciation = ( + asset.opening_accumulated_depreciation + ) + asset_depr_schedule_doc.depreciation_method = fb_row.depreciation_method + asset_depr_schedule_doc.total_number_of_depreciations = fb_row.total_number_of_depreciations + asset_depr_schedule_doc.frequency_of_depreciation = fb_row.frequency_of_depreciation + asset_depr_schedule_doc.rate_of_depreciation = fb_row.rate_of_depreciation + asset_depr_schedule_doc.expected_value_after_useful_life = ( + fb_row.expected_value_after_useful_life + ) + asset_depr_schedule_doc.status = "Draft" + + asset_depr_schedule_doc.insert() + + update_depreciation_schedules(asset.name, asset_depr_schedule_doc.name, fb_row.idx) + + if asset.docstatus == 1: + asset_depr_schedule_doc.status = "Active" + asset_depr_schedule_doc.submit() + elif asset.docstatus == 2: + asset_depr_schedule_doc.status = "Cancelled" + asset_depr_schedule_doc.submit() + asset_depr_schedule_doc.cancel() + + +def get_details_of_depreciable_assets(): + asset = frappe.qb.DocType("Asset") + + records = ( + frappe.qb.from_(asset) + .select(asset.name, asset.opening_accumulated_depreciation, asset.docstatus) + .where(asset.calculate_depreciation == 1) + ).run(as_dict=True) + + return records + + +def get_details_of_asset_finance_books_rows(asset_name): + afb = frappe.qb.DocType("Asset Finance Book") + + records = ( + frappe.qb.from_(afb) + .select( + afb.finance_book, + afb.idx, + afb.depreciation_method, + afb.total_number_of_depreciations, + afb.frequency_of_depreciation, + afb.rate_of_depreciation, + afb.expected_value_after_useful_life, + ) + .where((afb.parenttype == "Asset") & (afb.parent == asset_name)) + ).run(as_dict=True) + + return records + + +def update_depreciation_schedules(asset_name, asset_depr_schedule_name, fb_row_idx): + ds = frappe.qb.DocType("Depreciation Schedule") + + depr_schedules = ( + frappe.qb.from_(ds) + .select(ds.name) + .where((ds.parent == asset_name) & (int(ds.finance_book_id) == fb_row_idx)) + ).run(as_dict=True) + + for idx, depr_schedule in enumerate(depr_schedules, start=1): + ( + frappe.qb.update(ds) + .set(ds.idx, idx) + .set(ds.parent, asset_depr_schedule_name) + .set(ds.parentfield, "depreciation_schedule") + .set(ds.parenttype, "Asset Depreciation Schedule") + .where(ds.parent == depr_schedule.name) + ).run()