fix: Get pro-rata amount based on correct days
diff --git a/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py b/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py
index 6e16508..7fec35e 100644
--- a/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py
+++ b/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py
@@ -315,7 +315,6 @@
has_wdv_or_dd_non_yearly_pro_rata,
number_of_pending_depreciations,
)
-
if not has_pro_rata or (
n < (cint(final_number_of_depreciations) - 1) or final_number_of_depreciations == 2
):
@@ -340,6 +339,7 @@
depreciation_amount,
from_date,
date_of_disposal,
+ original_schedule_date=schedule_date,
)
if depreciation_amount > 0:
@@ -568,14 +568,19 @@
def _get_pro_rata_amt(
- row, depreciation_amount, from_date, to_date, has_wdv_or_dd_non_yearly_pro_rata=False
+ row,
+ depreciation_amount,
+ from_date,
+ to_date,
+ has_wdv_or_dd_non_yearly_pro_rata=False,
+ original_schedule_date=None,
):
days = date_diff(to_date, from_date)
months = month_diff(to_date, from_date)
if has_wdv_or_dd_non_yearly_pro_rata:
- total_days = get_total_days(to_date, 12)
+ total_days = get_total_days(original_schedule_date or to_date, 12)
else:
- total_days = get_total_days(to_date, row.frequency_of_depreciation)
+ total_days = get_total_days(original_schedule_date or to_date, row.frequency_of_depreciation)
return (depreciation_amount * flt(days)) / flt(total_days), days, months
@@ -583,7 +588,7 @@
def get_total_days(date, frequency):
period_start_date = add_months(date, cint(frequency) * -1)
- if is_last_day_of_the_month(date):
+ if not is_last_day_of_the_month(date):
period_start_date = get_last_day(period_start_date)
return date_diff(date, period_start_date)
@@ -661,7 +666,7 @@
),
1,
),
- )
+ ) + 1
to_date = get_last_day(
add_months(row.depreciation_start_date, schedule_idx * row.frequency_of_depreciation)
@@ -696,8 +701,7 @@
add_days(
get_last_day(add_months(row.depreciation_start_date, -1 * row.frequency_of_depreciation)), 1
),
- )
-
+ ) + 1
to_date = get_last_day(
add_months(row.depreciation_start_date, schedule_idx * row.frequency_of_depreciation)
)
@@ -707,7 +711,6 @@
),
1,
)
-
return daily_depr_amount * (date_diff(to_date, from_date) + 1)
else:
return (