fix: consider based on DOJ config while calculating leaves for passed months
diff --git a/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment.py b/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment.py
index 41a9558..6168db8 100644
--- a/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment.py
+++ b/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment.py
@@ -119,14 +119,15 @@
from_date_year = get_datetime(from_date).year
months_passed = 0
+ based_on_doj = leave_type_details.get(leave_type).based_on_date_of_joining
- if current_year == from_date_year and current_month > from_date_month:
+ if current_year == from_date_year and current_month >= from_date_month:
months_passed = current_month - from_date_month
- months_passed = add_current_month_if_applicable(months_passed)
+ months_passed = add_current_month_if_applicable(months_passed, date_of_joining, based_on_doj)
elif current_year > from_date_year:
months_passed = (12 - from_date_month) + current_month
- months_passed = add_current_month_if_applicable(months_passed)
+ months_passed = add_current_month_if_applicable(months_passed, date_of_joining, based_on_doj)
if months_passed > 0:
monthly_earned_leave = get_monthly_earned_leave(new_leaves_allocated,
@@ -138,13 +139,20 @@
return new_leaves_allocated
-def add_current_month_if_applicable(months_passed):
+def add_current_month_if_applicable(months_passed, date_of_joining, based_on_doj):
date = getdate(frappe.flags.current_date) or getdate()
- last_day_of_month = get_last_day(date)
- # if its the last day of the month, then that month should also be considered
- if last_day_of_month == date:
- months_passed += 1
+ if based_on_doj:
+ # if leave type allocation is based on DOJ,
+ # and the date of assignment creation is same as DOJ,
+ # then the month should be considered
+ if date == date_of_joining:
+ months_passed += 1
+ else:
+ last_day_of_month = get_last_day(date)
+ # if its the last day of the month, then that month should be considered
+ if last_day_of_month == date:
+ months_passed += 1
return months_passed
@@ -183,7 +191,7 @@
def get_leave_type_details():
leave_type_details = frappe._dict()
leave_types = frappe.get_all("Leave Type",
- fields=["name", "is_lwp", "is_earned_leave", "is_compensatory",
+ fields=["name", "is_lwp", "is_earned_leave", "is_compensatory", "based_on_date_of_joining",
"is_carry_forward", "expire_carry_forwarded_leaves_after_days", "earned_leave_frequency", "rounding"])
for d in leave_types:
leave_type_details.setdefault(d.name, d)