From cd2bab7c5fda88737f6e8f2e8e5af22d56998557 Mon Sep 17 00:00:00 2001 From: khushi8112 Date: Wed, 13 Aug 2025 16:19:51 +0530 Subject: [PATCH] fix: add value adjustment amount in report for group by category filter --- .../asset_depreciations_and_balances.py | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) 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 ba3099e4f88..d7884b3e973 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 @@ -25,17 +25,25 @@ def get_group_by_asset_category_data(filters): asset_categories = get_asset_categories_for_grouped_by_category(filters) assets = get_assets_for_grouped_by_category(filters) + asset_value_adjustment_map = get_asset_value_adjustment_map_by_category(filters) for asset_category in asset_categories: row = frappe._dict() row.update(asset_category) + adjustments = asset_value_adjustment_map.get(asset_category.get("asset_category"), {}) + row.adjustment_before_from_date = flt(adjustments.get("adjustment_before_from_date", 0)) + row.adjustment_till_to_date = flt(adjustments.get("adjustment_till_to_date", 0)) + row.adjustment_during_period = row.adjustment_till_to_date - 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( @@ -229,6 +237,59 @@ def get_assets_for_grouped_by_category(filters): ) +def get_asset_value_adjustment_map_by_category(filters): + asset_value_adjustments = frappe.db.sql( + """ + SELECT + a.asset_category AS asset_category, + 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.asset_category + """, + {"from_date": filters.from_date, "to_date": filters.to_date, "company": filters.company}, + as_dict=1, + ) + + category_value_adjustment_map = {} + + for r in asset_value_adjustments: + category_value_adjustment_map[r["asset_category"]] = { + "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 category_value_adjustment_map + + def get_group_by_asset_data(filters): data = []