Skip to content

Commit

Permalink
fix: dont consider holidays while checking for consecutive leaves
Browse files Browse the repository at this point in the history
(cherry picked from commit 1c5e1cb)
  • Loading branch information
ruchamahabal authored and mergify[bot] committed Dec 14, 2023
1 parent 60c9903 commit baf4236
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 80 deletions.
9 changes: 0 additions & 9 deletions hrms/hr/doctype/leave_application/leave_application.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@

from erpnext.buying.doctype.supplier_scorecard.supplier_scorecard import daterange
from erpnext.setup.doctype.employee.employee import get_holiday_list_for_employee
from erpnext.setup.doctype.holiday_list.holiday_list import is_holiday

from hrms.hr.doctype.leave_block_list.leave_block_list import get_applicable_block_dates
from hrms.hr.doctype.leave_ledger_entry.leave_ledger_entry import create_leave_ledger_entry
Expand Down Expand Up @@ -475,8 +474,6 @@ def validate_max_days(self):

def get_consecutive_leave_details(self) -> dict:
leave_applications = set()
raise_exception = False if frappe.flags.in_patch else True
holiday_list = get_holiday_list_for_employee(self.employee, raise_exception=raise_exception)

def _get_first_from_date(reference_date):
"""gets `from_date` of first leave application from previous consecutive leave applications"""
Expand All @@ -490,9 +487,6 @@ def _get_first_from_date(reference_date):
if application:
leave_applications.add(application.name)
return _get_first_from_date(application.from_date)
elif is_holiday(holiday_list, prev_date):
return _get_first_from_date(prev_date)

return reference_date

def _get_last_to_date(reference_date):
Expand All @@ -507,9 +501,6 @@ def _get_last_to_date(reference_date):
if application:
leave_applications.add(application.name)
return _get_last_to_date(application.to_date)
elif is_holiday(holiday_list, next_date):
return _get_last_to_date(next_date)

return reference_date

first_from_date = _get_first_from_date(self.from_date)
Expand Down
129 changes: 58 additions & 71 deletions hrms/hr/doctype/leave_application/test_leave_application.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,77 +125,6 @@ def get_application(self, doc):
application.to_date = "2013-01-05"
return application

@set_holiday_list("_Test Holiday List", "_Test Company")
def test_first_from_last_to_date(self):
employee = get_employee()
leave_type = frappe.get_doc(
dict(
leave_type_name="Test Consecutive Leave Type",
doctype="Leave Type",
max_continuous_days_allowed=10,
)
).insert()
make_allocation_record(
employee=employee.name, leave_type=leave_type.name, from_date="2013-01-01", to_date="2013-12-31"
)

# before
frappe.get_doc(
dict(
doctype="Leave Application",
employee=employee.name,
leave_type=leave_type.name,
from_date="2013-01-30",
to_date="2013-01-31",
company="_Test Company",
status="Approved",
)
).insert()

# 2013-02-01 is a holiday
frappe.get_doc(
dict(
doctype="Leave Application",
employee=employee.name,
leave_type=leave_type.name,
from_date="2013-02-02",
to_date="2013-02-03",
company="_Test Company",
status="Approved",
)
).insert()

# after
frappe.get_doc(
dict(
doctype="Leave Application",
employee=employee.name,
leave_type=leave_type.name,
from_date="2013-02-06",
to_date="2013-02-10",
company="_Test Company",
status="Approved",
)
).insert()

# current
from_date = getdate("2013-02-04")
to_date = getdate("2013-02-05")
leave_application = frappe.get_doc(
dict(
doctype="Leave Application",
employee=employee.name,
leave_type=leave_type.name,
from_date=from_date,
to_date=to_date,
company="_Test Company",
status="Approved",
)
)

# 11 consecutive leaves
self.assertRaises(frappe.ValidationError, leave_application.insert)

@set_holiday_list("Salary Slip Test Holiday List", "_Test Company")
def test_validate_application_across_allocations(self):
# Test validation for application dates when negative balance is disabled
Expand Down Expand Up @@ -767,6 +696,64 @@ def test_max_continuous_leaves(self):

self.assertRaises(frappe.ValidationError, leave_application.insert)

@set_holiday_list("_Test Holiday List", "_Test Company")
def test_max_consecutive_leaves_across_leave_applications(self):
employee = get_employee()
leave_type = frappe.get_doc(
dict(
leave_type_name="Test Consecutive Leave Type",
doctype="Leave Type",
max_continuous_days_allowed=10,
)
).insert()
make_allocation_record(
employee=employee.name, leave_type=leave_type.name, from_date="2013-01-01", to_date="2013-12-31"
)

# before
frappe.get_doc(
dict(
doctype="Leave Application",
employee=employee.name,
leave_type=leave_type.name,
from_date="2013-01-30",
to_date="2013-02-03",
company="_Test Company",
status="Approved",
)
).insert()

# after
frappe.get_doc(
dict(
doctype="Leave Application",
employee=employee.name,
leave_type=leave_type.name,
from_date="2013-02-06",
to_date="2013-02-10",
company="_Test Company",
status="Approved",
)
).insert()

# current
from_date = getdate("2013-02-04")
to_date = getdate("2013-02-05")
leave_application = frappe.get_doc(
dict(
doctype="Leave Application",
employee=employee.name,
leave_type=leave_type.name,
from_date=from_date,
to_date=to_date,
company="_Test Company",
status="Approved",
)
)

# 11 consecutive leaves
self.assertRaises(frappe.ValidationError, leave_application.insert)

def test_leave_balance_near_allocaton_expiry(self):
employee = get_employee()
leave_type = create_leave_type(
Expand Down

0 comments on commit baf4236

Please sign in to comment.