chore: add patch
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 0fea6a5..199f73f 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 986acc0..5639d3d 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 @@
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 3e646b4..11064a9 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()