124 lines
4.6 KiB
Python
124 lines
4.6 KiB
Python
# Copyright 2015 iDT LABS (http://www.@idtlabs.sl)
|
|
# Copyright 2017-2018 Tecnativa - Pedro M. Baeza
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
|
|
from odoo.tests import common
|
|
|
|
|
|
class TestHolidaysComputeDaysBase(common.SavepointCase):
|
|
at_install = False
|
|
post_install = True
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super(TestHolidaysComputeDaysBase, cls).setUpClass()
|
|
cls.HrHolidays = cls.env['hr.holidays']
|
|
cls.HrHolidaysPublic = cls.env["hr.holidays.public"]
|
|
# Remove timezone for controlling data better
|
|
cls.env.user.tz = False
|
|
cls.calendar = cls.env['resource.calendar'].create({
|
|
'name': 'Calendar',
|
|
'attendance_ids': [],
|
|
})
|
|
for day in range(5): # From monday to friday
|
|
cls.calendar.attendance_ids = [
|
|
(0, 0, {
|
|
'name': 'Attendance',
|
|
'dayofweek': str(day),
|
|
'hour_from': '08',
|
|
'hour_to': '12',
|
|
}),
|
|
(0, 0, {
|
|
'name': 'Attendance',
|
|
'dayofweek': str(day),
|
|
'hour_from': '14',
|
|
'hour_to': '18',
|
|
}),
|
|
]
|
|
cls.address_1 = cls.env['res.partner'].create({
|
|
'name': 'Address 1',
|
|
'country_id': cls.env.ref('base.uk').id,
|
|
})
|
|
cls.address_2 = cls.env['res.partner'].create({
|
|
'name': 'Address 1',
|
|
'country_id': cls.env.ref('base.es').id,
|
|
'state_id': cls.env.ref('base.state_es_cr').id,
|
|
})
|
|
cls.employee_1 = cls.env['hr.employee'].create({
|
|
'name': 'Employee 1',
|
|
'resource_calendar_id': cls.calendar.id,
|
|
'address_id': cls.address_1.id,
|
|
})
|
|
cls.employee_2 = cls.env['hr.employee'].create({
|
|
'name': 'Employee 2',
|
|
'resource_calendar_id': cls.calendar.id,
|
|
'address_id': cls.address_2.id,
|
|
})
|
|
# Use a very old year for avoiding to collapse with current data
|
|
cls.public_holiday_global = cls.HrHolidaysPublic.create({
|
|
'year': 1946,
|
|
'line_ids': [
|
|
(0, 0, {
|
|
'name': 'Christmas',
|
|
'date': '1946-12-25',
|
|
}),
|
|
],
|
|
})
|
|
cls.public_holiday_country = cls.HrHolidaysPublic.create({
|
|
'year': 1946,
|
|
'country_id': cls.address_2.country_id.id,
|
|
'line_ids': [
|
|
(0, 0, {
|
|
'name': 'Before Christmas',
|
|
'date': '1946-12-24',
|
|
}),
|
|
(0, 0, {
|
|
'name': 'Even More Before Christmas',
|
|
'date': '1946-12-23',
|
|
'state_ids': [
|
|
(6, 0, cls.address_2.state_id.ids),
|
|
]
|
|
}),
|
|
],
|
|
})
|
|
cls.holiday_type = cls.env['hr.holidays.status'].create({
|
|
'name': 'Leave Type Test',
|
|
'exclude_public_holidays': True,
|
|
})
|
|
cls.holiday_type_no_excludes = cls.env['hr.holidays.status'].create({
|
|
'name': 'Leave Type Test Without excludes',
|
|
'exclude_public_holidays': False,
|
|
})
|
|
|
|
|
|
class TestHolidaysComputeDays(TestHolidaysComputeDaysBase):
|
|
def test_number_days_excluding_employee_1(self):
|
|
holidays = self.HrHolidays.new({
|
|
'date_from': '1946-12-23 00:00:00', # Monday
|
|
'date_to': '1946-12-29 23:59:59', # Sunday
|
|
'holiday_status_id': self.holiday_type.id,
|
|
'employee_id': self.employee_1.id,
|
|
})
|
|
holidays._onchange_data_hr_holidays_public()
|
|
self.assertEqual(holidays.number_of_days_temp, 4)
|
|
|
|
def _test_number_days_excluding_employee_2(self):
|
|
holidays = self.HrHolidays.new({
|
|
'date_from': '1946-12-23 00:00:00', # Monday
|
|
'date_to': '1946-12-29 23:59:59', # Sunday
|
|
'holiday_status_id': self.holiday_type.id,
|
|
'employee_id': self.employee_2.id,
|
|
})
|
|
holidays._onchange_data_hr_holidays_public()
|
|
self.assertEqual(holidays.number_of_days_temp, 2)
|
|
|
|
def test_number_days_not_excluding(self):
|
|
holidays = self.HrHolidays.new({
|
|
'date_from': '1946-12-23 00:00:00', # Monday
|
|
'date_to': '1946-12-29 23:59:59', # Sunday
|
|
'holiday_status_id': self.holiday_type_no_excludes.id,
|
|
'employee_id': self.employee_1.id,
|
|
})
|
|
holidays._onchange_data_hr_holidays_public()
|
|
self.assertEqual(holidays.number_of_days_temp, 5)
|