From 89ad9f1bb4dd967671482c2d56e5dae68dcd45f5 Mon Sep 17 00:00:00 2001 From: khushi8112 Date: Wed, 13 Aug 2025 16:17:24 +0530 Subject: [PATCH] fix: add value adjustment amount in asset value (cherry picked from commit f8050f42788ed847789e754e4535907a3afc1aa1) --- .../asset_depreciations_and_balances.py | 71 ++++++++++++++++++- .../report/general_ledger/general_ledger.json | 45 ++++++------ 2 files changed, 94 insertions(+), 22 deletions(-) diff --git a/erpnext/accounts/report/asset_depreciations_and_balances/asset_depreciations_and_balances.py b/erpnext/accounts/report/asset_depreciations_and_balances/asset_depreciations_and_balances.py index cdeddf3d38b..ba3099e4f88 100644 --- a/erpnext/accounts/report/asset_depreciations_and_balances/asset_depreciations_and_balances.py +++ b/erpnext/accounts/report/asset_depreciations_and_balances/asset_depreciations_and_balances.py @@ -234,21 +234,35 @@ def get_group_by_asset_data(filters): asset_details = get_asset_details_for_grouped_by_category(filters) assets = get_assets_for_grouped_by_asset(filters) + asset_value_adjustment_map = get_asset_value_adjustment_map(filters) for asset_detail in asset_details: row = frappe._dict() row.update(asset_detail) + row.update(next(asset for asset in assets if asset["asset"] == asset_detail.get("name", ""))) + adjustments = asset_value_adjustment_map.get( + asset_detail.get("name", ""), + { + "adjustment_before_from_date": 0.0, + "adjustment_till_to_date": 0.0, + }, + ) + row.adjustment_before_from_date = adjustments["adjustment_before_from_date"] + row.adjustment_till_to_date = adjustments["adjustment_till_to_date"] + row.adjustment_during_period = flt(row.adjustment_till_to_date) - flt(row.adjustment_before_from_date) + + row.value_as_on_from_date += row.adjustment_before_from_date + row.value_as_on_to_date = ( flt(row.value_as_on_from_date) + flt(row.value_of_new_purchase) - flt(row.value_of_sold_asset) - flt(row.value_of_scrapped_asset) - flt(row.value_of_capitalized_asset) + + flt(row.adjustment_during_period) ) - row.update(next(asset for asset in assets if asset["asset"] == asset_detail.get("name", ""))) - row.accumulated_depreciation_as_on_to_date = ( flt(row.accumulated_depreciation_as_on_from_date) + flt(row.depreciation_amount_during_the_period) @@ -432,6 +446,59 @@ def get_assets_for_grouped_by_asset(filters): ) +def get_asset_value_adjustment_map(filters): + asset_with_value_adjustments = frappe.db.sql( + """ + SELECT + a.name AS asset, + IFNULL( + SUM( + CASE + WHEN gle.posting_date < %(from_date)s + AND (a.disposal_date IS NULL OR a.disposal_date >= %(from_date)s) + THEN gle.debit - gle.credit + ELSE 0 + END + ), + 0) AS value_adjustment_before_from_date, + IFNULL( + SUM( + CASE + WHEN gle.posting_date <= %(to_date)s + AND (a.disposal_date IS NULL OR a.disposal_date >= %(to_date)s) + THEN gle.debit - gle.credit + ELSE 0 + END + ), + 0) AS value_adjustment_till_to_date + + FROM `tabGL Entry` gle + JOIN `tabAsset` a ON gle.against_voucher = a.name + JOIN `tabAsset Category Account` aca + ON aca.parent = a.asset_category + AND aca.company_name = %(company)s + WHERE gle.is_cancelled = 0 + AND a.docstatus = 1 + AND a.company = %(company)s + AND a.purchase_date <= %(to_date)s + AND gle.account = aca.fixed_asset_account + GROUP BY a.name + """, + {"from_date": filters.from_date, "to_date": filters.to_date, "company": filters.company}, + as_dict=1, + ) + + asset_value_adjustment_map = {} + + for r in asset_with_value_adjustments: + asset_value_adjustment_map[r["asset"]] = { + "adjustment_before_from_date": flt(r.get("value_adjustment_before_from_date", 0)), + "adjustment_till_to_date": flt(r.get("value_adjustment_till_to_date", 0)), + } + + return asset_value_adjustment_map + + def get_columns(filters): columns = [] diff --git a/erpnext/accounts/report/general_ledger/general_ledger.json b/erpnext/accounts/report/general_ledger/general_ledger.json index 4ff8ed2d432..172f322de22 100644 --- a/erpnext/accounts/report/general_ledger/general_ledger.json +++ b/erpnext/accounts/report/general_ledger/general_ledger.json @@ -1,29 +1,34 @@ { - "add_total_row": 0, - "apply_user_permissions": 1, - "creation": "2013-12-06 13:22:23", - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 3, - "is_standard": "Yes", - "modified": "2017-02-24 20:17:51.995451", - "modified_by": "Administrator", - "module": "Accounts", - "name": "General Ledger", - "owner": "Administrator", - "ref_doctype": "GL Entry", - "report_name": "General Ledger", - "report_type": "Script Report", + "add_total_row": 1, + "add_translate_data": 0, + "columns": [], + "creation": "2013-12-06 13:22:23", + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "filters": [], + "idx": 3, + "is_standard": "Yes", + "letterhead": null, + "modified": "2025-08-13 12:47:27.645023", + "modified_by": "Administrator", + "module": "Accounts", + "name": "General Ledger", + "owner": "Administrator", + "prepared_report": 0, + "ref_doctype": "GL Entry", + "report_name": "General Ledger", + "report_type": "Script Report", "roles": [ { "role": "Accounts User" - }, + }, { "role": "Accounts Manager" - }, + }, { "role": "Auditor" } - ] -} \ No newline at end of file + ], + "timeout": 0 +}