fix: skip expired leaves on allocation end date
This commit is contained in:
parent
bd999b0908
commit
0d4db95d99
@ -521,8 +521,39 @@ def get_remaining_leaves(allocation, leaves_taken, date, expiry):
|
|||||||
return _get_remaining_leaves(allocation.total_leaves_allocated, allocation.to_date)
|
return _get_remaining_leaves(allocation.total_leaves_allocated, allocation.to_date)
|
||||||
|
|
||||||
def get_leaves_for_period(employee, leave_type, from_date, to_date):
|
def get_leaves_for_period(employee, leave_type, from_date, to_date):
|
||||||
leave_entries = frappe.db.sql("""
|
leave_entries = get_leave_entries(employee, leave_type, from_date, to_date)
|
||||||
select employee, leave_type, from_date, to_date, leaves, transaction_type
|
leave_days = 0
|
||||||
|
|
||||||
|
for leave_entry in leave_entries:
|
||||||
|
inclusive_period = leave_entry.from_date >= getdate(from_date) and leave_entry.to_date <= getdate(to_date)
|
||||||
|
|
||||||
|
if inclusive_period and leave_entry.transaction_type == 'Leave Encashment':
|
||||||
|
leave_days += leave_entry.leaves
|
||||||
|
|
||||||
|
elif inclusive_period and leave_entry.transaction_type == 'Leave Allocation' \
|
||||||
|
and not skip_expiry_leaves(leave_entry, to_date):
|
||||||
|
leave_days += leave_entry.leaves
|
||||||
|
|
||||||
|
else:
|
||||||
|
if leave_entry.from_date < getdate(from_date):
|
||||||
|
leave_entry.from_date = from_date
|
||||||
|
if leave_entry.to_date > getdate(to_date):
|
||||||
|
leave_entry.to_date = to_date
|
||||||
|
|
||||||
|
leave_days += get_number_of_leave_days(employee, leave_type,
|
||||||
|
leave_entry.from_date, leave_entry.to_date) * -1
|
||||||
|
|
||||||
|
return leave_days
|
||||||
|
|
||||||
|
def skip_expiry_leaves(leave_entry, date):
|
||||||
|
''' Checks whether the expired leaves coincide with the to_date of leave balance check '''
|
||||||
|
end_date = frappe.db.get_value("Leave Allocation", {'name': leave_entry.transaction_name}, ['to_date'])
|
||||||
|
return True if end_date == date and not leave_entry.is_carry_forward else False
|
||||||
|
|
||||||
|
def get_leave_entries(employee, leave_type, from_date, to_date):
|
||||||
|
''' Returns leave entries between from_date and to_date '''
|
||||||
|
return frappe.db.sql("""
|
||||||
|
select employee, leave_type, from_date, to_date, leaves, transaction_type, is_carry_forward
|
||||||
from `tabLeave Ledger Entry`
|
from `tabLeave Ledger Entry`
|
||||||
where employee=%(employee)s and leave_type=%(leave_type)s
|
where employee=%(employee)s and leave_type=%(leave_type)s
|
||||||
and docstatus=1
|
and docstatus=1
|
||||||
@ -536,22 +567,6 @@ def get_leaves_for_period(employee, leave_type, from_date, to_date):
|
|||||||
"employee": employee,
|
"employee": employee,
|
||||||
"leave_type": leave_type
|
"leave_type": leave_type
|
||||||
}, as_dict=1)
|
}, as_dict=1)
|
||||||
leave_days = 0
|
|
||||||
|
|
||||||
for leave_entry in leave_entries:
|
|
||||||
if leave_entry.from_date >= getdate(from_date) and leave_entry.to_date <= getdate(to_date) \
|
|
||||||
and leave_entry.transaction_type in ('Leave Encashment', 'Leave Allocation'):
|
|
||||||
leave_days += leave_entry.leaves
|
|
||||||
else:
|
|
||||||
if leave_entry.from_date < getdate(from_date):
|
|
||||||
leave_entry.from_date = from_date
|
|
||||||
if leave_entry.to_date > getdate(to_date):
|
|
||||||
leave_entry.to_date = to_date
|
|
||||||
|
|
||||||
leave_days += get_number_of_leave_days(employee, leave_type,
|
|
||||||
leave_entry.from_date, leave_entry.to_date) * -1
|
|
||||||
|
|
||||||
return leave_days
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_holidays(employee, from_date, to_date):
|
def get_holidays(employee, from_date, to_date):
|
||||||
|
Loading…
Reference in New Issue
Block a user