fix: patch for creating asset depreciation schedule records
(cherry picked from commit 7324dcb7c8)
# Conflicts:
# erpnext/patches/v15_0/create_asset_depreciation_schedules_from_assets.py
This commit is contained in:
@@ -1,74 +1,38 @@
|
||||
import frappe
|
||||
from frappe.utils import cstr
|
||||
|
||||
|
||||
def execute():
|
||||
<<<<<<< HEAD
|
||||
frappe.reload_doc("assets", "doctype", "Asset Depreciation Schedule")
|
||||
frappe.reload_doc("assets", "doctype", "Asset Finance Book")
|
||||
frappe.reload_doc("assets", "doctype", "Asset")
|
||||
|
||||
assets = get_details_of_draft_or_submitted_depreciable_assets()
|
||||
|
||||
=======
|
||||
>>>>>>> 7324dcb7c8 (fix: patch for creating asset depreciation schedule records)
|
||||
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]
|
||||
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()
|
||||
|
||||
for fb_row in asset_finance_books_map[asset.name]:
|
||||
asset_depr_schedule_doc = frappe.new_doc("Asset Depreciation Schedule")
|
||||
if fb_row.docstatus == 1:
|
||||
frappe.db.set_value(
|
||||
"Asset Depreciation Schedule",
|
||||
asset_depr_schedule_doc.name,
|
||||
{"docstatus": 1, "status": "Active"},
|
||||
)
|
||||
|
||||
asset_depr_schedule_doc.set_draft_asset_depr_schedule_details(asset, fb_row)
|
||||
|
||||
asset_depr_schedule_doc.insert()
|
||||
|
||||
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 = next(iter(item.keys()))
|
||||
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():
|
||||
@@ -90,12 +54,20 @@ def get_asset_finance_books_map():
|
||||
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
|
||||
|
||||
@@ -111,13 +83,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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user