diff --git a/erpnext/hr/doctype/leave_application/leave_application.py b/erpnext/hr/doctype/leave_application/leave_application.py index cd1c7f24df1..fff0967f25a 100755 --- a/erpnext/hr/doctype/leave_application/leave_application.py +++ b/erpnext/hr/doctype/leave_application/leave_application.py @@ -817,7 +817,9 @@ def get_leave_balance_on( allocation = allocation_records.get(leave_type, frappe._dict()) end_date = allocation.to_date if cint(consider_all_leaves_in_the_allocation_period) else date - cf_expiry = get_allocation_expiry_for_cf_leaves(employee, leave_type, to_date, date) + cf_expiry = get_allocation_expiry_for_cf_leaves( + employee, leave_type, to_date, allocation.from_date + ) leaves_taken = get_leaves_for_period(employee, leave_type, allocation.from_date, end_date) @@ -937,8 +939,12 @@ def get_remaining_leaves( # balance for carry forwarded leaves if cf_expiry and allocation.unused_leaves: - cf_leaves = flt(allocation.unused_leaves) + flt(leaves_taken) - remaining_cf_leaves = _get_remaining_leaves(cf_leaves, cf_expiry) + if getdate(date) > getdate(cf_expiry): + # carry forwarded leave expiry date passed + cf_leaves = remaining_cf_leaves = 0 + else: + cf_leaves = flt(allocation.unused_leaves) + flt(leaves_taken) + remaining_cf_leaves = _get_remaining_leaves(cf_leaves, cf_expiry) leave_balance = flt(allocation.new_leaves_allocated) + flt(cf_leaves) leave_balance_for_consumption = flt(allocation.new_leaves_allocated) + flt(remaining_cf_leaves) diff --git a/erpnext/hr/doctype/leave_application/test_leave_application.py b/erpnext/hr/doctype/leave_application/test_leave_application.py index d0a89a56afb..749e4c2d4f2 100644 --- a/erpnext/hr/doctype/leave_application/test_leave_application.py +++ b/erpnext/hr/doctype/leave_application/test_leave_application.py @@ -698,8 +698,7 @@ class TestLeaveApplication(unittest.TestCase): leave_type_name="_Test_CF_leave_expiry", is_carry_forward=1, expire_carry_forwarded_leaves_after_days=90, - ) - leave_type.insert() + ).insert() create_carry_forwarded_allocation(employee, leave_type) details = get_leave_balance_on(