Merge pull request #39285 from frappe/mergify/bp/version-15-hotfix/pr-39052
fix: asset WDV depreciation calc according to IT act [dev] (backport #39052)
This commit is contained in:
commit
9897c26ae6
@ -19,6 +19,7 @@ from frappe.utils import (
|
|||||||
)
|
)
|
||||||
from frappe.utils.user import get_users_with_role
|
from frappe.utils.user import get_users_with_role
|
||||||
|
|
||||||
|
import erpnext
|
||||||
from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import (
|
from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import (
|
||||||
get_checks_for_pl_and_bs_accounts,
|
get_checks_for_pl_and_bs_accounts,
|
||||||
)
|
)
|
||||||
@ -522,6 +523,13 @@ def depreciate_asset(asset_doc, date, notes):
|
|||||||
|
|
||||||
make_depreciation_entry_for_all_asset_depr_schedules(asset_doc, date)
|
make_depreciation_entry_for_all_asset_depr_schedules(asset_doc, date)
|
||||||
|
|
||||||
|
cancel_depreciation_entries(asset_doc, date)
|
||||||
|
|
||||||
|
|
||||||
|
@erpnext.allow_regional
|
||||||
|
def cancel_depreciation_entries(asset_doc, date):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
def reset_depreciation_schedule(asset_doc, date, notes):
|
def reset_depreciation_schedule(asset_doc, date, notes):
|
||||||
if not asset_doc.calculate_depreciation:
|
if not asset_doc.calculate_depreciation:
|
||||||
|
@ -341,10 +341,7 @@ class AssetDepreciationSchedule(Document):
|
|||||||
n == 0
|
n == 0
|
||||||
and (has_pro_rata or has_wdv_or_dd_non_yearly_pro_rata)
|
and (has_pro_rata or has_wdv_or_dd_non_yearly_pro_rata)
|
||||||
and not self.opening_accumulated_depreciation
|
and not self.opening_accumulated_depreciation
|
||||||
and get_updated_rate_of_depreciation_for_wdv_and_dd(
|
and not self.flags.wdv_it_act_applied
|
||||||
asset_doc, value_after_depreciation, row, False
|
|
||||||
)
|
|
||||||
== row.rate_of_depreciation
|
|
||||||
):
|
):
|
||||||
from_date = add_days(
|
from_date = add_days(
|
||||||
asset_doc.available_for_use_date, -1
|
asset_doc.available_for_use_date, -1
|
||||||
@ -596,26 +593,17 @@ def get_depreciation_amount(
|
|||||||
asset_depr_schedule, asset, fb_row, schedule_idx, number_of_pending_depreciations
|
asset_depr_schedule, asset, fb_row, schedule_idx, number_of_pending_depreciations
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
rate_of_depreciation = get_updated_rate_of_depreciation_for_wdv_and_dd(
|
|
||||||
asset, depreciable_value, fb_row
|
|
||||||
)
|
|
||||||
return get_wdv_or_dd_depr_amount(
|
return get_wdv_or_dd_depr_amount(
|
||||||
|
asset,
|
||||||
|
fb_row,
|
||||||
depreciable_value,
|
depreciable_value,
|
||||||
rate_of_depreciation,
|
|
||||||
fb_row.frequency_of_depreciation,
|
|
||||||
schedule_idx,
|
schedule_idx,
|
||||||
prev_depreciation_amount,
|
prev_depreciation_amount,
|
||||||
has_wdv_or_dd_non_yearly_pro_rata,
|
has_wdv_or_dd_non_yearly_pro_rata,
|
||||||
|
asset_depr_schedule,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@erpnext.allow_regional
|
|
||||||
def get_updated_rate_of_depreciation_for_wdv_and_dd(
|
|
||||||
asset, depreciable_value, fb_row, show_msg=True
|
|
||||||
):
|
|
||||||
return fb_row.rate_of_depreciation
|
|
||||||
|
|
||||||
|
|
||||||
def get_straight_line_or_manual_depr_amount(
|
def get_straight_line_or_manual_depr_amount(
|
||||||
asset_depr_schedule, asset, row, schedule_idx, number_of_pending_depreciations
|
asset_depr_schedule, asset, row, schedule_idx, number_of_pending_depreciations
|
||||||
):
|
):
|
||||||
@ -751,30 +739,56 @@ def get_asset_shift_factors_map():
|
|||||||
return dict(frappe.db.get_all("Asset Shift Factor", ["shift_name", "shift_factor"], as_list=True))
|
return dict(frappe.db.get_all("Asset Shift Factor", ["shift_name", "shift_factor"], as_list=True))
|
||||||
|
|
||||||
|
|
||||||
|
@erpnext.allow_regional
|
||||||
def get_wdv_or_dd_depr_amount(
|
def get_wdv_or_dd_depr_amount(
|
||||||
|
asset,
|
||||||
|
fb_row,
|
||||||
depreciable_value,
|
depreciable_value,
|
||||||
rate_of_depreciation,
|
|
||||||
frequency_of_depreciation,
|
|
||||||
schedule_idx,
|
schedule_idx,
|
||||||
prev_depreciation_amount,
|
prev_depreciation_amount,
|
||||||
has_wdv_or_dd_non_yearly_pro_rata,
|
has_wdv_or_dd_non_yearly_pro_rata,
|
||||||
|
asset_depr_schedule,
|
||||||
):
|
):
|
||||||
if cint(frequency_of_depreciation) == 12:
|
return get_default_wdv_or_dd_depr_amount(
|
||||||
return flt(depreciable_value) * (flt(rate_of_depreciation) / 100)
|
asset,
|
||||||
|
fb_row,
|
||||||
|
depreciable_value,
|
||||||
|
schedule_idx,
|
||||||
|
prev_depreciation_amount,
|
||||||
|
has_wdv_or_dd_non_yearly_pro_rata,
|
||||||
|
asset_depr_schedule,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def get_default_wdv_or_dd_depr_amount(
|
||||||
|
asset,
|
||||||
|
fb_row,
|
||||||
|
depreciable_value,
|
||||||
|
schedule_idx,
|
||||||
|
prev_depreciation_amount,
|
||||||
|
has_wdv_or_dd_non_yearly_pro_rata,
|
||||||
|
asset_depr_schedule,
|
||||||
|
):
|
||||||
|
if cint(fb_row.frequency_of_depreciation) == 12:
|
||||||
|
return flt(depreciable_value) * (flt(fb_row.rate_of_depreciation) / 100)
|
||||||
else:
|
else:
|
||||||
if has_wdv_or_dd_non_yearly_pro_rata:
|
if has_wdv_or_dd_non_yearly_pro_rata:
|
||||||
if schedule_idx == 0:
|
if schedule_idx == 0:
|
||||||
return flt(depreciable_value) * (flt(rate_of_depreciation) / 100)
|
return flt(depreciable_value) * (flt(fb_row.rate_of_depreciation) / 100)
|
||||||
elif schedule_idx % (12 / cint(frequency_of_depreciation)) == 1:
|
elif schedule_idx % (12 / cint(fb_row.frequency_of_depreciation)) == 1:
|
||||||
return (
|
return (
|
||||||
flt(depreciable_value) * flt(frequency_of_depreciation) * (flt(rate_of_depreciation) / 1200)
|
flt(depreciable_value)
|
||||||
|
* flt(fb_row.frequency_of_depreciation)
|
||||||
|
* (flt(fb_row.rate_of_depreciation) / 1200)
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
return prev_depreciation_amount
|
return prev_depreciation_amount
|
||||||
else:
|
else:
|
||||||
if schedule_idx % (12 / cint(frequency_of_depreciation)) == 0:
|
if schedule_idx % (12 / cint(fb_row.frequency_of_depreciation)) == 0:
|
||||||
return (
|
return (
|
||||||
flt(depreciable_value) * flt(frequency_of_depreciation) * (flt(rate_of_depreciation) / 1200)
|
flt(depreciable_value)
|
||||||
|
* flt(fb_row.frequency_of_depreciation)
|
||||||
|
* (flt(fb_row.rate_of_depreciation) / 1200)
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
return prev_depreciation_amount
|
return prev_depreciation_amount
|
||||||
|
@ -94,7 +94,6 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"default": "0",
|
"default": "0",
|
||||||
"depends_on": "eval:doc.depreciation_method == \"Straight Line\" || doc.depreciation_method == \"Manual\"",
|
|
||||||
"fieldname": "daily_prorata_based",
|
"fieldname": "daily_prorata_based",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"label": "Depreciate based on daily pro-rata"
|
"label": "Depreciate based on daily pro-rata"
|
||||||
@ -110,7 +109,7 @@
|
|||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2023-11-29 00:57:07.579777",
|
"modified": "2023-12-29 08:49:39.876439",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Assets",
|
"module": "Assets",
|
||||||
"name": "Asset Finance Book",
|
"name": "Asset Finance Book",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user