summaryrefslogtreecommitdiff
path: root/addons/hr_holidays/tests/test_automatic_leave_dates.py
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/hr_holidays/tests/test_automatic_leave_dates.py
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/hr_holidays/tests/test_automatic_leave_dates.py')
-rw-r--r--addons/hr_holidays/tests/test_automatic_leave_dates.py293
1 files changed, 293 insertions, 0 deletions
diff --git a/addons/hr_holidays/tests/test_automatic_leave_dates.py b/addons/hr_holidays/tests/test_automatic_leave_dates.py
new file mode 100644
index 00000000..d3774e09
--- /dev/null
+++ b/addons/hr_holidays/tests/test_automatic_leave_dates.py
@@ -0,0 +1,293 @@
+# -*- coding: utf-8 -*-
+from datetime import date, datetime
+
+from odoo.tests.common import Form
+
+from odoo.addons.hr_holidays.tests.common import TestHrHolidaysCommon
+from odoo.exceptions import ValidationError
+
+
+class TestAutomaticLeaveDates(TestHrHolidaysCommon):
+ def setUp(self):
+ super(TestAutomaticLeaveDates, self).setUp()
+
+ self.leave_type = self.env['hr.leave.type'].create({
+ 'name': 'Automatic Test',
+ 'time_type': 'leave',
+ 'allocation_type': 'no',
+ 'validity_start': False,
+ })
+
+ def test_no_attendances(self):
+ calendar = self.env['resource.calendar'].create({
+ 'name': 'No Attendances',
+ 'attendance_ids': [(5, 0, 0)],
+ })
+ employee = self.employee_emp
+ employee.resource_calendar_id = calendar
+
+ with Form(self.env['hr.leave'].with_context(default_employee_id=employee.id)) as leave_form:
+ leave_form.holiday_status_id = self.leave_type
+ leave_form.request_date_from = date(2019, 9, 2)
+ leave_form.request_date_to = date(2019, 9, 2)
+ leave_form.request_unit_half = True
+ leave_form.request_date_from_period = 'am'
+
+ self.assertEqual(leave_form.number_of_days_display, 0)
+ self.assertEqual(leave_form.number_of_hours_text, '0 Hours')
+
+ def test_single_attendance_on_morning_and_afternoon(self):
+ calendar = self.env['resource.calendar'].create({
+ 'name': 'simple morning + afternoon',
+ 'attendance_ids': [(5, 0, 0),
+ (0, 0, {
+ 'name': 'monday morning',
+ 'hour_from': 8,
+ 'hour_to': 12,
+ 'day_period': 'morning',
+ 'dayofweek': '0',
+ }),
+ (0, 0, {
+ 'name': 'monday afternoon',
+ 'hour_from': 13,
+ 'hour_to': 17,
+ 'day_period': 'afternoon',
+ 'dayofweek': '0',
+ })]
+ })
+
+ employee = self.employee_emp
+ employee.resource_calendar_id = calendar
+
+ with Form(self.env['hr.leave'].with_context(default_employee_id=employee.id)) as leave_form:
+ leave_form.holiday_status_id = self.leave_type
+ leave_form.request_date_from = date(2019, 9, 2)
+ leave_form.request_date_to = date(2019, 9, 2)
+ leave_form.request_unit_half = True
+ leave_form.request_date_from_period = 'am'
+
+ self.assertEqual(leave_form.number_of_days_display, .5)
+ self.assertEqual(leave_form.number_of_hours_text, '4 Hours')
+
+ leave_form.request_date_from_period = 'pm'
+
+ self.assertEqual(leave_form.number_of_days_display, .5)
+ self.assertEqual(leave_form.number_of_hours_text, '4 Hours')
+
+ def test_multiple_attendance_on_morning(self):
+ calendar = self.env['resource.calendar'].create({
+ 'name': 'multi morning',
+ 'attendance_ids': [(5, 0, 0),
+ (0, 0, {
+ 'name': 'monday morning 1',
+ 'hour_from': 8,
+ 'hour_to': 10,
+ 'day_period': 'morning',
+ 'dayofweek': '0',
+ }),
+ (0, 0, {
+ 'name': 'monday morning 2',
+ 'hour_from': 10.25,
+ 'hour_to': 12.25,
+ 'day_period': 'morning',
+ 'dayofweek': '0',
+ }),
+ (0, 0, {
+ 'name': 'monday afternoon',
+ 'hour_from': 13,
+ 'hour_to': 17,
+ 'day_period': 'afternoon',
+ 'dayofweek': '0',
+ })]
+ })
+ employee = self.employee_emp
+ employee.resource_calendar_id = calendar
+
+ with Form(self.env['hr.leave'].with_context(default_employee_id=employee.id)) as leave_form:
+ leave_form.holiday_status_id = self.leave_type
+ leave_form.request_date_from = date(2019, 9, 2)
+ leave_form.request_date_to = date(2019, 9, 2)
+ leave_form.request_unit_half = True
+ leave_form.request_date_from_period = 'am'
+
+ self.assertEqual(leave_form.number_of_days_display, .5)
+ self.assertEqual(leave_form.number_of_hours_text, '4 Hours')
+
+ leave_form.request_date_from_period = 'pm'
+
+ self.assertEqual(leave_form.number_of_days_display, .5)
+ self.assertEqual(leave_form.number_of_hours_text, '4 Hours')
+
+ def test_attendance_on_morning(self):
+ calendar = self.env['resource.calendar'].create({
+ 'name': 'Morning only',
+ 'attendance_ids': [(5, 0, 0),
+ (0, 0, {
+ 'name': 'Monday All day',
+ 'hour_from': 8,
+ 'hour_to': 16,
+ 'day_period': 'morning',
+ 'dayofweek': '0',
+ })],
+ })
+ employee = self.employee_emp
+ employee.resource_calendar_id = calendar
+ with Form(self.env['hr.leave'].with_context(default_employee_id=employee.id)) as leave_form:
+ leave_form.holiday_status_id = self.leave_type
+ leave_form.request_date_from = date(2019, 9, 2)
+ leave_form.request_date_to = date(2019, 9, 2)
+ leave_form.request_unit_half = True
+ # Ask for morning
+ leave_form.request_date_from_period = 'am'
+
+ self.assertEqual(leave_form.number_of_days_display, 0.5)
+ self.assertEqual(leave_form.number_of_hours_text, '8 Hours')
+
+ # Ask for afternoon
+ leave_form.request_date_from_period = 'pm'
+
+ self.assertEqual(leave_form.number_of_days_display, 0.5)
+ self.assertEqual(leave_form.number_of_hours_text, '8 Hours')
+
+ def test_attendance_next_day(self):
+ self.env.user.tz = 'Europe/Brussels'
+ calendar = self.env['resource.calendar'].create({
+ 'name': 'auto next day',
+ 'attendance_ids': [(5, 0, 0),
+ (0, 0, {
+ 'name': 'tuesday morning',
+ 'hour_from': 8,
+ 'hour_to': 12,
+ 'day_period': 'morning',
+ 'dayofweek': '1',
+ })]
+ })
+ employee = self.employee_emp
+ employee.resource_calendar_id = calendar
+
+ with Form(self.env['hr.leave'].with_context(default_employee_id=employee.id)) as leave_form:
+ leave_form.holiday_status_id = self.leave_type
+ # does not work on mondays
+ leave_form.request_date_from = date(2019, 9, 2)
+ leave_form.request_date_to = date(2019, 9, 2)
+ leave_form.request_unit_half = True
+ leave_form.request_date_from_period = 'am'
+
+
+ self.assertEqual(leave_form.number_of_days_display, 0)
+ self.assertEqual(leave_form.number_of_hours_text, '0 Hours')
+ self.assertEqual(leave_form.date_from, datetime(2019, 9, 2, 6, 0, 0))
+ self.assertEqual(leave_form.date_to, datetime(2019, 9, 2, 10, 0, 0))
+
+ def test_attendance_previous_day(self):
+ self.env.user.tz = 'Europe/Brussels'
+ calendar = self.env['resource.calendar'].create({
+ 'name': 'auto next day',
+ 'attendance_ids': [(5, 0, 0),
+ (0, 0, {
+ 'name': 'monday morning',
+ 'hour_from': 8,
+ 'hour_to': 12,
+ 'day_period': 'morning',
+ 'dayofweek': '0',
+ })]
+ })
+ employee = self.employee_emp
+ employee.resource_calendar_id = calendar
+
+ with Form(self.env['hr.leave'].with_context(default_employee_id=employee.id)) as leave_form:
+ leave_form.holiday_status_id = self.leave_type
+ # does not work on tuesdays
+ leave_form.request_date_from = date(2019, 9, 3)
+ leave_form.request_date_to = date(2019, 9, 3)
+ leave_form.request_unit_half = True
+ leave_form.request_date_from_period = 'am'
+
+
+ self.assertEqual(leave_form.number_of_days_display, 0)
+ self.assertEqual(leave_form.number_of_hours_text, '0 Hours')
+ self.assertEqual(leave_form.date_from, datetime(2019, 9, 3, 6, 0, 0))
+ self.assertEqual(leave_form.date_to, datetime(2019, 9, 3, 10, 0, 0))
+
+ def test_2weeks_calendar(self):
+ self.env.user.tz = 'Europe/Brussels'
+ calendar = self.env['resource.calendar'].create({
+ 'name': 'auto next day',
+ 'two_weeks_calendar': True,
+ 'attendance_ids': [(5, 0, 0),
+ (0, 0, {
+ 'name': 'monday morning odd week',
+ 'hour_from': 8,
+ 'hour_to': 12,
+ 'day_period': 'morning',
+ 'dayofweek': '0',
+ 'week_type': '0',
+ }),
+ (0, 0, {
+ 'name': 'monday morning even week',
+ 'hour_from': 10,
+ 'hour_to': 12,
+ 'day_period': 'morning',
+ 'dayofweek': '0',
+ 'week_type': '1',
+ })]
+ })
+ employee = self.employee_emp
+ employee.resource_calendar_id = calendar
+
+ with Form(self.env['hr.leave'].with_context(default_employee_id=employee.id)) as leave_form:
+ leave_form.holiday_status_id = self.leave_type
+ # even week, works 2 hours
+ leave_form.request_date_from = date(2019, 9, 2)
+ leave_form.request_date_to = date(2019, 9, 2)
+ leave_form.request_unit_half = True
+ leave_form.request_date_from_period = 'am'
+
+ self.assertEqual(leave_form.number_of_days_display, 0.5)
+ self.assertEqual(leave_form.number_of_hours_text, '2 Hours')
+ self.assertEqual(leave_form.date_from, datetime(2019, 9, 2, 8, 0, 0))
+ self.assertEqual(leave_form.date_to, datetime(2019, 9, 2, 10, 0, 0))
+
+ with Form(self.env['hr.leave'].with_context(default_employee_id=employee.id)) as leave_form:
+ leave_form.holiday_status_id = self.leave_type
+ # odd week, works 4 hours
+ leave_form.request_date_from = date(2019, 9, 9)
+ leave_form.request_date_to = date(2019, 9, 9)
+ leave_form.request_unit_half = True
+ leave_form.request_date_from_period = 'am'
+
+ self.assertEqual(leave_form.number_of_days_display, 0.5)
+ self.assertEqual(leave_form.number_of_hours_text, '4 Hours')
+ self.assertEqual(leave_form.date_from, datetime(2019, 9, 9, 6, 0, 0))
+ self.assertEqual(leave_form.date_to, datetime(2019, 9, 9, 10, 0, 0))
+
+ def test_2weeks_calendar_next_week(self):
+ self.env.user.tz = 'Europe/Brussels'
+ calendar = self.env['resource.calendar'].create({
+ 'name': 'auto next day',
+ 'two_weeks_calendar': True,
+ 'attendance_ids': [(5, 0, 0),
+ (0, 0, {
+ 'name': 'monday morning odd week',
+ 'hour_from': 8,
+ 'hour_to': 12,
+ 'day_period': 'morning',
+ 'dayofweek': '0',
+ 'week_type': '0',
+ })]
+ })
+ employee = self.employee_emp
+ employee.resource_calendar_id = calendar
+
+ with Form(self.env['hr.leave'].with_context(default_employee_id=employee.id)) as leave_form:
+ leave_form.holiday_status_id = self.leave_type
+ # even week, does not work
+ leave_form.request_date_from = date(2019, 9, 2)
+ leave_form.request_date_to = date(2019, 9, 2)
+ leave_form.request_unit_half = True
+ leave_form.request_date_from_period = 'am'
+
+ self.assertEqual(leave_form.number_of_days_display, 0)
+ self.assertEqual(leave_form.number_of_hours_text, '0 Hours')
+ self.assertEqual(leave_form.date_from, datetime(2019, 9, 2, 6, 0, 0))
+ self.assertEqual(leave_form.date_to, datetime(2019, 9, 2, 10, 0, 0))