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
|
import frappe
|
||||||
|
from frappe.utils import cstr
|
||||||
|
|
||||||
|
|
||||||
def execute():
|
def execute():
|
||||||
|
<<<<<<< HEAD
|
||||||
frappe.reload_doc("assets", "doctype", "Asset Depreciation Schedule")
|
frappe.reload_doc("assets", "doctype", "Asset Depreciation Schedule")
|
||||||
frappe.reload_doc("assets", "doctype", "Asset Finance Book")
|
frappe.reload_doc("assets", "doctype", "Asset Finance Book")
|
||||||
frappe.reload_doc("assets", "doctype", "Asset")
|
frappe.reload_doc("assets", "doctype", "Asset")
|
||||||
|
|
||||||
assets = get_details_of_draft_or_submitted_depreciable_assets()
|
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_finance_books_map = get_asset_finance_books_map()
|
||||||
|
|
||||||
asset_depreciation_schedules_map = get_asset_depreciation_schedules_map()
|
asset_depreciation_schedules_map = get_asset_depreciation_schedules_map()
|
||||||
|
|
||||||
for asset in assets:
|
for key, fb_row in asset_finance_books_map.items():
|
||||||
if not asset_depreciation_schedules_map.get(asset.name):
|
depreciation_schedules = asset_depreciation_schedules_map.get(key)
|
||||||
|
if not depreciation_schedules:
|
||||||
continue
|
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]:
|
if fb_row.docstatus == 1:
|
||||||
asset_depr_schedule_doc = frappe.new_doc("Asset Depreciation Schedule")
|
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)
|
update_depreciation_schedules(depreciation_schedules, asset_depr_schedule_doc.name)
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
|
|
||||||
def get_asset_finance_books_map():
|
def get_asset_finance_books_map():
|
||||||
@@ -90,12 +54,20 @@ def get_asset_finance_books_map():
|
|||||||
afb.expected_value_after_useful_life,
|
afb.expected_value_after_useful_life,
|
||||||
afb.daily_prorata_based,
|
afb.daily_prorata_based,
|
||||||
afb.shift_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.docstatus < 2)
|
||||||
|
.where(asset.calculate_depreciation == 1)
|
||||||
.orderby(afb.idx)
|
.orderby(afb.idx)
|
||||||
).run(as_dict=True)
|
).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
|
return asset_finance_books_map
|
||||||
|
|
||||||
@@ -111,13 +83,17 @@ def get_asset_depreciation_schedules_map():
|
|||||||
.select(
|
.select(
|
||||||
asset.name.as_("asset_name"),
|
asset.name.as_("asset_name"),
|
||||||
ds.name,
|
ds.name,
|
||||||
|
ds.finance_book,
|
||||||
ds.finance_book_id,
|
ds.finance_book_id,
|
||||||
)
|
)
|
||||||
.where(asset.docstatus < 2)
|
.where(asset.docstatus < 2)
|
||||||
|
.where(asset.calculate_depreciation == 1)
|
||||||
.orderby(ds.idx)
|
.orderby(ds.idx)
|
||||||
).run(as_dict=True)
|
).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
|
return asset_depreciation_schedules_map
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user