|
3 | 3 |
|
4 | 4 | import frappe
|
5 | 5 | from frappe.tests.utils import FrappeTestCase
|
6 |
| -from frappe.utils import add_months, get_first_day, get_year_ending, getdate |
| 6 | +from frappe.utils import add_days, add_months, get_first_day, get_year_ending, get_year_start, getdate |
7 | 7 |
|
8 | 8 | from hrms.hr.doctype.leave_application.test_leave_application import get_employee, get_leave_period
|
9 | 9 | from hrms.hr.doctype.leave_period.test_leave_period import create_leave_period
|
@@ -33,6 +33,9 @@ def setUp(self):
|
33 | 33 | self.original_doj = employee.date_of_joining
|
34 | 34 | self.employee = employee
|
35 | 35 |
|
| 36 | + def tearDown(self): |
| 37 | + frappe.db.set_value("Employee", self.employee.name, "date_of_joining", self.original_doj) |
| 38 | + |
36 | 39 | def test_grant_leaves(self):
|
37 | 40 | leave_period = get_leave_period()
|
38 | 41 | leave_policy = create_leave_policy(annual_allocation=10)
|
@@ -208,5 +211,58 @@ def test_pro_rated_leave_allocation_for_custom_date_range(self):
|
208 | 211 |
|
209 | 212 | self.assertGreater(new_leaves_allocated, 0)
|
210 | 213 |
|
211 |
| - def tearDown(self): |
212 |
| - frappe.db.set_value("Employee", self.employee.name, "date_of_joining", self.original_doj) |
| 214 | + def test_earned_leave_allocation_if_leave_policy_assignment_submitted_after_period(self): |
| 215 | + year_start_date = get_year_start(getdate()) |
| 216 | + year_end_date = get_year_ending(getdate()) |
| 217 | + leave_period = create_leave_period(year_start_date, year_end_date) |
| 218 | + |
| 219 | + # assignment 10 days after the leave period |
| 220 | + frappe.flags.current_date = add_days(year_end_date, 10) |
| 221 | + leave_type = create_leave_type( |
| 222 | + leave_type_name="_Test Earned Leave", is_earned_leave=True, allocate_on_day="Last Day" |
| 223 | + ) |
| 224 | + annual_earned_leaves = 10 |
| 225 | + leave_policy = create_leave_policy(leave_type=leave_type, annual_allocation=annual_earned_leaves) |
| 226 | + leave_policy.submit() |
| 227 | + |
| 228 | + data = { |
| 229 | + "assignment_based_on": "Leave Period", |
| 230 | + "leave_policy": leave_policy.name, |
| 231 | + "leave_period": leave_period.name, |
| 232 | + } |
| 233 | + assignment = create_assignment(self.employee.name, frappe._dict(data)) |
| 234 | + assignment.submit() |
| 235 | + |
| 236 | + earned_leave_allocation = frappe.get_value( |
| 237 | + "Leave Allocation", {"leave_policy_assignment": assignment.name}, "new_leaves_allocated" |
| 238 | + ) |
| 239 | + self.assertEqual(earned_leave_allocation, annual_earned_leaves) |
| 240 | + |
| 241 | + def test_earned_leave_allocation_for_leave_period_spanning_two_years(self): |
| 242 | + first_year_start_date = get_year_start(getdate()) |
| 243 | + second_year_end_date = get_year_ending(add_months(first_year_start_date, 12)) |
| 244 | + leave_period = create_leave_period(first_year_start_date, second_year_end_date) |
| 245 | + |
| 246 | + # assignment during mid second year |
| 247 | + frappe.flags.current_date = add_months(second_year_end_date, -6) |
| 248 | + leave_type = create_leave_type( |
| 249 | + leave_type_name="_Test Earned Leave", is_earned_leave=True, allocate_on_day="Last Day" |
| 250 | + ) |
| 251 | + annual_earned_leaves = 24 |
| 252 | + leave_policy = create_leave_policy(leave_type=leave_type, annual_allocation=annual_earned_leaves) |
| 253 | + leave_policy.submit() |
| 254 | + |
| 255 | + data = { |
| 256 | + "assignment_based_on": "Leave Period", |
| 257 | + "leave_policy": leave_policy.name, |
| 258 | + "leave_period": leave_period.name, |
| 259 | + } |
| 260 | + assignment = create_assignment(self.employee.name, frappe._dict(data)) |
| 261 | + assignment.submit() |
| 262 | + |
| 263 | + earned_leave_allocation = frappe.get_value( |
| 264 | + "Leave Allocation", {"leave_policy_assignment": assignment.name}, "new_leaves_allocated" |
| 265 | + ) |
| 266 | + # months passed (18) are calculated correctly but total allocation of 36 exceeds 24 hence 24 |
| 267 | + # this upper cap is intentional, without that 36 leaves would be allocated correctly |
| 268 | + self.assertEqual(earned_leave_allocation, 24) |
0 commit comments