fix: half day leave (#19323)
diff --git a/erpnext/hr/doctype/leave_application/leave_application.py b/erpnext/hr/doctype/leave_application/leave_application.py
index 737f602..97de40f 100755
--- a/erpnext/hr/doctype/leave_application/leave_application.py
+++ b/erpnext/hr/doctype/leave_application/leave_application.py
@@ -404,8 +404,11 @@
if cint(half_day) == 1:
if from_date == to_date:
number_of_days = 0.5
- else:
+ elif half_day_date and half_day_date <= to_date:
number_of_days = date_diff(to_date, from_date) + .5
+ else:
+ number_of_days = date_diff(to_date, from_date) + 1
+
else:
number_of_days = date_diff(to_date, from_date) + 1
@@ -549,8 +552,16 @@
if leave_entry.to_date > getdate(to_date):
leave_entry.to_date = to_date
+ half_day = 0
+ half_day_date = None
+ # fetch half day date for leaves with half days
+ if leave_entry.leaves % 1:
+ half_day = 1
+ half_day_date = frappe.db.get_value('Leave Application',
+ {'name': leave_entry.transaction_name}, ['half_day_date'])
+
leave_days += get_number_of_leave_days(employee, leave_type,
- leave_entry.from_date, leave_entry.to_date) * -1
+ leave_entry.from_date, leave_entry.to_date, half_day, half_day_date) * -1
return leave_days
@@ -562,7 +573,7 @@
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
+ select employee, leave_type, from_date, to_date, leaves, transaction_type, is_carry_forward, transaction_name
from `tabLeave Ledger Entry`
where employee=%(employee)s and leave_type=%(leave_type)s
and docstatus=1