mirror of
https://github.com/bringout/oca-ocb-hr.git
synced 2026-04-27 06:12:01 +02:00
19.0 vanilla
This commit is contained in:
parent
a1137a1456
commit
e1d89e11e3
2789 changed files with 1093187 additions and 605897 deletions
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
from datetime import date, datetime
|
||||
|
||||
from odoo import Command
|
||||
from odoo.tests import tagged
|
||||
from odoo.tests.common import TransactionCase, warmup
|
||||
|
||||
|
|
@ -20,9 +21,9 @@ class TestCompanyLeave(TransactionCase):
|
|||
|
||||
cls.bank_holiday = cls.env['hr.leave.type'].create({
|
||||
'name': 'Bank Holiday',
|
||||
'responsible_id': cls.env.user.id,
|
||||
'responsible_ids': [Command.link(cls.env.ref('base.user_admin').id)],
|
||||
'company_id': cls.company.id,
|
||||
'requires_allocation': 'no',
|
||||
'requires_allocation': False,
|
||||
})
|
||||
|
||||
cls.paid_time_off = cls.env['hr.leave.type'].create({
|
||||
|
|
@ -30,7 +31,7 @@ class TestCompanyLeave(TransactionCase):
|
|||
'request_unit': 'day',
|
||||
'leave_validation_type': 'both',
|
||||
'company_id': cls.company.id,
|
||||
'requires_allocation': 'no',
|
||||
'requires_allocation': False,
|
||||
})
|
||||
|
||||
cls.employee = cls.env['hr.employee'].create({
|
||||
|
|
@ -39,16 +40,7 @@ class TestCompanyLeave(TransactionCase):
|
|||
'tz': "Europe/Brussels",
|
||||
})
|
||||
|
||||
cls.paid_time_off_hours = cls.env['hr.leave.type'].create({
|
||||
'name': 'Paid Time Off in Hours',
|
||||
'request_unit': 'hour',
|
||||
'leave_validation_type': 'no_validation',
|
||||
'company_id': cls.company.id,
|
||||
'time_type': 'other',
|
||||
'requires_allocation': 'yes',
|
||||
})
|
||||
|
||||
def test_leave_whole_company_01(self):
|
||||
def test_01_leave_whole_company(self):
|
||||
# TEST CASE 1: Leaves taken in days. Take a 3 days leave
|
||||
# Add a company leave on the second day.
|
||||
# Check that leave is split into 2.
|
||||
|
|
@ -58,50 +50,38 @@ class TestCompanyLeave(TransactionCase):
|
|||
'employee_id': self.employee.id,
|
||||
'holiday_status_id': self.paid_time_off.id,
|
||||
'request_date_from': date(2020, 1, 7),
|
||||
'date_from': date(2020, 1, 7),
|
||||
'request_date_to': date(2020, 1, 9),
|
||||
'date_to': date(2020, 1, 9),
|
||||
'number_of_days': 3,
|
||||
})
|
||||
leave._compute_date_from_to()
|
||||
|
||||
company_leave = self.env['hr.leave'].create({
|
||||
company_leave = self.env['hr.leave.generate.multi.wizard'].create({
|
||||
'name': 'Bank Holiday',
|
||||
'holiday_type': 'company',
|
||||
'mode_company_id': self.company.id,
|
||||
'allocation_mode': 'company',
|
||||
'company_id': self.company.id,
|
||||
'holiday_status_id': self.bank_holiday.id,
|
||||
'date_from': date(2020, 1, 8),
|
||||
'request_date_from': date(2020, 1, 8),
|
||||
'date_to': date(2020, 1, 8),
|
||||
'request_date_to': date(2020, 1, 8),
|
||||
'number_of_days': 1,
|
||||
})
|
||||
company_leave._compute_date_from_to()
|
||||
|
||||
company_leave.action_validate()
|
||||
company_leave.action_generate_time_off()
|
||||
|
||||
all_leaves = self.env['hr.leave'].search([('employee_id', '=', self.employee.id)], order='id')
|
||||
self.assertEqual(len(all_leaves), 4)
|
||||
# Original Leave
|
||||
self.assertEqual(leave.state, 'refuse')
|
||||
# before leave
|
||||
self.assertEqual(all_leaves[1].date_from, datetime(2020, 1, 7, 7, 0))
|
||||
self.assertEqual(all_leaves[1].date_to, datetime(2020, 1, 7, 16, 0))
|
||||
self.assertEqual(len(all_leaves), 3)
|
||||
# Before Time Off
|
||||
self.assertEqual(all_leaves[0].date_from, datetime(2020, 1, 7, 7, 0))
|
||||
self.assertEqual(all_leaves[0].date_to, datetime(2020, 1, 7, 16, 0))
|
||||
self.assertEqual(all_leaves[0].number_of_days, 1)
|
||||
self.assertEqual(all_leaves[0].state, 'confirm')
|
||||
# After Time Off
|
||||
self.assertEqual(all_leaves[1].date_from, datetime(2020, 1, 9, 7, 0))
|
||||
self.assertEqual(all_leaves[1].date_to, datetime(2020, 1, 9, 16, 0))
|
||||
self.assertEqual(all_leaves[1].number_of_days, 1)
|
||||
self.assertEqual(all_leaves[1].state, 'confirm')
|
||||
# After leave
|
||||
self.assertEqual(all_leaves[2].date_from, datetime(2020, 1, 9, 7, 0))
|
||||
self.assertEqual(all_leaves[2].date_to, datetime(2020, 1, 9, 16, 0))
|
||||
# Company Time Off
|
||||
self.assertEqual(all_leaves[2].date_from, datetime(2020, 1, 8, 7, 0))
|
||||
self.assertEqual(all_leaves[2].date_to, datetime(2020, 1, 8, 16, 0))
|
||||
self.assertEqual(all_leaves[2].number_of_days, 1)
|
||||
self.assertEqual(all_leaves[2].state, 'confirm')
|
||||
# Company Leave
|
||||
self.assertEqual(all_leaves[3].date_from, datetime(2020, 1, 8, 7, 0))
|
||||
self.assertEqual(all_leaves[3].date_to, datetime(2020, 1, 8, 16, 0))
|
||||
self.assertEqual(all_leaves[3].number_of_days, 1)
|
||||
self.assertEqual(all_leaves[3].state, 'validate')
|
||||
self.assertEqual(all_leaves[2].state, 'validate')
|
||||
|
||||
|
||||
def test_leave_whole_company_02(self):
|
||||
def test_02_leave_whole_company(self):
|
||||
# TEST CASE 2: Leaves taken in half-days. Take a 3 days leave
|
||||
# Add a company leave on the second day
|
||||
# Check that leave is split into 2
|
||||
|
|
@ -112,50 +92,41 @@ class TestCompanyLeave(TransactionCase):
|
|||
'employee_id': self.employee.id,
|
||||
'holiday_status_id': self.paid_time_off.id,
|
||||
'request_date_from': date(2020, 1, 7),
|
||||
'date_from': date(2020, 1, 7),
|
||||
'request_date_to': date(2020, 1, 9),
|
||||
'date_to': date(2020, 1, 9),
|
||||
'number_of_days': 3,
|
||||
})
|
||||
leave._compute_date_from_to()
|
||||
|
||||
company_leave = self.env['hr.leave'].create({
|
||||
company_leave = self.env['hr.leave.generate.multi.wizard'].create({
|
||||
'name': 'Bank Holiday',
|
||||
'holiday_type': 'company',
|
||||
'mode_company_id': self.company.id,
|
||||
'allocation_mode': 'company',
|
||||
'company_id': self.company.id,
|
||||
'holiday_status_id': self.bank_holiday.id,
|
||||
'date_from': date(2020, 1, 8),
|
||||
'request_date_from': date(2020, 1, 8),
|
||||
'date_to': date(2020, 1, 8),
|
||||
'request_date_to': date(2020, 1, 8),
|
||||
'number_of_days': 1,
|
||||
})
|
||||
company_leave._compute_date_from_to()
|
||||
|
||||
company_leave.action_validate()
|
||||
company_leave.action_generate_time_off()
|
||||
|
||||
all_leaves = self.env['hr.leave'].search([('employee_id', '=', self.employee.id)], order='id')
|
||||
self.assertEqual(len(all_leaves), 4)
|
||||
# Original Leave
|
||||
self.assertEqual(leave.state, 'refuse')
|
||||
# before leave
|
||||
self.assertEqual(all_leaves[1].date_from, datetime(2020, 1, 7, 7, 0))
|
||||
self.assertEqual(all_leaves[1].date_to, datetime(2020, 1, 7, 16, 0))
|
||||
self.assertEqual(len(all_leaves), 3)
|
||||
# Before Time Off
|
||||
self.assertEqual(all_leaves[0].date_from, datetime(2020, 1, 7, 7, 0))
|
||||
self.assertEqual(all_leaves[0].date_to, datetime(2020, 1, 7, 16, 0))
|
||||
self.assertEqual(all_leaves[0].number_of_days, 1)
|
||||
self.assertEqual(all_leaves[0].state, 'confirm')
|
||||
# After Time Off
|
||||
self.assertEqual(all_leaves[1].date_from, datetime(2020, 1, 9, 7, 0))
|
||||
self.assertEqual(all_leaves[1].date_to, datetime(2020, 1, 9, 16, 0))
|
||||
self.assertEqual(all_leaves[1].number_of_days, 1)
|
||||
self.assertEqual(all_leaves[1].state, 'confirm')
|
||||
# After leave
|
||||
self.assertEqual(all_leaves[2].date_from, datetime(2020, 1, 9, 7, 0))
|
||||
self.assertEqual(all_leaves[2].date_to, datetime(2020, 1, 9, 16, 0))
|
||||
# Company Time Off
|
||||
self.assertEqual(all_leaves[2].date_from, datetime(2020, 1, 8, 7, 0))
|
||||
self.assertEqual(all_leaves[2].date_to, datetime(2020, 1, 8, 16, 0))
|
||||
self.assertEqual(all_leaves[2].number_of_days, 1)
|
||||
self.assertEqual(all_leaves[2].state, 'confirm')
|
||||
# Company Leave
|
||||
self.assertEqual(all_leaves[3].date_from, datetime(2020, 1, 8, 7, 0))
|
||||
self.assertEqual(all_leaves[3].date_to, datetime(2020, 1, 8, 16, 0))
|
||||
self.assertEqual(all_leaves[3].number_of_days, 1)
|
||||
self.assertEqual(all_leaves[3].state, 'validate')
|
||||
self.assertEqual(all_leaves[2].state, 'validate')
|
||||
|
||||
def test_leave_whole_company_03(self):
|
||||
# TEST CASE 3: Leaves taken in half-days. Take a 0.5 days leave
|
||||
def test_03_leave_whole_company(self):
|
||||
# TEST CASE 3: Time Off taken in half-days. Take a 0.5 days leave
|
||||
# Add a company leave on the same day
|
||||
# Check that leave refused
|
||||
self.paid_time_off.request_unit = 'half_day'
|
||||
|
|
@ -164,43 +135,34 @@ class TestCompanyLeave(TransactionCase):
|
|||
'name': 'Hol11',
|
||||
'employee_id': self.employee.id,
|
||||
'holiday_status_id': self.paid_time_off.id,
|
||||
'date_from': date(2020, 1, 7),
|
||||
'request_date_from': date(2020, 1, 7),
|
||||
'date_to': date(2020, 1, 7),
|
||||
'request_date_to': date(2020, 1, 7),
|
||||
'number_of_days': 0.5,
|
||||
'request_unit_half': True,
|
||||
'request_date_from_period': 'am',
|
||||
|
||||
})
|
||||
leave._compute_date_from_to()
|
||||
|
||||
company_leave = self.env['hr.leave'].create({
|
||||
company_leave = self.env['hr.leave.generate.multi.wizard'].create({
|
||||
'name': 'Bank Holiday',
|
||||
'holiday_type': 'company',
|
||||
'mode_company_id': self.company.id,
|
||||
'allocation_mode': 'company',
|
||||
'company_id': self.company.id,
|
||||
'holiday_status_id': self.bank_holiday.id,
|
||||
'date_from': date(2020, 1, 7),
|
||||
'request_date_from': date(2020, 1, 7),
|
||||
'date_to': date(2020, 1, 7),
|
||||
'request_date_to': date(2020, 1, 7),
|
||||
'number_of_days': 1,
|
||||
})
|
||||
company_leave._compute_date_from_to()
|
||||
|
||||
company_leave.action_validate()
|
||||
company_leave.action_generate_time_off()
|
||||
|
||||
all_leaves = self.env['hr.leave'].search([('employee_id', '=', self.employee.id)], order='id')
|
||||
self.assertEqual(len(all_leaves), 2)
|
||||
# Original Leave
|
||||
# Original Time Off
|
||||
self.assertEqual(leave.state, 'refuse')
|
||||
# Company Leave
|
||||
# Company Time Off
|
||||
self.assertEqual(all_leaves[1].date_from, datetime(2020, 1, 7, 7, 0))
|
||||
self.assertEqual(all_leaves[1].date_to, datetime(2020, 1, 7, 16, 0))
|
||||
self.assertEqual(all_leaves[1].number_of_days, 1)
|
||||
self.assertEqual(all_leaves[1].state, 'validate')
|
||||
|
||||
def test_leave_whole_company_04(self):
|
||||
def test_04_leave_whole_company(self):
|
||||
# TEST CASE 4: Leaves taken in days. Take a 1 days leave
|
||||
# Add a company leave on the same day
|
||||
# Check that leave is refused
|
||||
|
|
@ -210,41 +172,34 @@ class TestCompanyLeave(TransactionCase):
|
|||
'name': 'Hol11',
|
||||
'employee_id': self.employee.id,
|
||||
'holiday_status_id': self.paid_time_off.id,
|
||||
'date_from': datetime.now(),
|
||||
'request_date_from': date(2020, 1, 9),
|
||||
'date_to': datetime.now(),
|
||||
'request_date_to': date(2020, 1, 9),
|
||||
'number_of_days': 1,
|
||||
|
||||
})
|
||||
leave._compute_date_from_to()
|
||||
|
||||
company_leave = self.env['hr.leave'].create({
|
||||
company_leave = self.env['hr.leave.generate.multi.wizard'].create({
|
||||
'name': 'Bank Holiday',
|
||||
'holiday_type': 'company',
|
||||
'mode_company_id': self.company.id,
|
||||
'allocation_mode': 'company',
|
||||
'company_id': self.company.id,
|
||||
'holiday_status_id': self.bank_holiday.id,
|
||||
'date_from': date(2020, 1, 9),
|
||||
'request_date_from': date(2020, 1, 9),
|
||||
'date_to': date(2020, 1, 9),
|
||||
'request_date_to': date(2020, 1, 9),
|
||||
'number_of_days': 1,
|
||||
})
|
||||
company_leave._compute_date_from_to()
|
||||
|
||||
company_leave.action_validate()
|
||||
company_leave.action_generate_time_off()
|
||||
|
||||
all_leaves = self.env['hr.leave'].search([('employee_id', '=', self.employee.id)], order='id')
|
||||
self.assertEqual(len(all_leaves), 2)
|
||||
# Original Leave
|
||||
# Original Time Off
|
||||
self.assertEqual(leave.state, 'refuse')
|
||||
# Company Leave
|
||||
# Company Time Off
|
||||
self.assertEqual(all_leaves[1].date_from, datetime(2020, 1, 9, 7, 0))
|
||||
self.assertEqual(all_leaves[1].date_to, datetime(2020, 1, 9, 16, 0))
|
||||
self.assertEqual(all_leaves[1].number_of_days, 1)
|
||||
self.assertEqual(all_leaves[1].state, 'validate')
|
||||
|
||||
def test_leave_whole_company_06(self):
|
||||
def test_06_leave_whole_company(self):
|
||||
# Test case 6: Leaves taken in days. But the employee
|
||||
# only works on Monday, Wednesday and Friday
|
||||
# Takes a time off for all the week (3 days), should be split
|
||||
|
|
@ -252,10 +207,13 @@ class TestCompanyLeave(TransactionCase):
|
|||
self.employee.resource_calendar_id.write({'attendance_ids': [
|
||||
(5, 0, 0),
|
||||
(0, 0, {'name': 'Monday Morning', 'dayofweek': '0', 'hour_from': 8, 'hour_to': 12, 'day_period': 'morning'}),
|
||||
(0, 0, {'name': 'Monday Lunch', 'dayofweek': '0', 'hour_from': 12, 'hour_to': 13, 'day_period': 'lunch'}),
|
||||
(0, 0, {'name': 'Monday Afternoon', 'dayofweek': '0', 'hour_from': 13, 'hour_to': 17, 'day_period': 'afternoon'}),
|
||||
(0, 0, {'name': 'Wednesday Morning', 'dayofweek': '2', 'hour_from': 8, 'hour_to': 12, 'day_period': 'morning'}),
|
||||
(0, 0, {'name': 'Wednesday Lunch', 'dayofweek': '2', 'hour_from': 12, 'hour_to': 13, 'day_period': 'lunch'}),
|
||||
(0, 0, {'name': 'Wednesday Afternoon', 'dayofweek': '2', 'hour_from': 13, 'hour_to': 17, 'day_period': 'afternoon'}),
|
||||
(0, 0, {'name': 'Friday Morning', 'dayofweek': '4', 'hour_from': 8, 'hour_to': 12, 'day_period': 'morning'}),
|
||||
(0, 0, {'name': 'Friday Lunch', 'dayofweek': '4', 'hour_from': 12, 'hour_to': 13, 'day_period': 'lunch'}),
|
||||
(0, 0, {'name': 'Friday Afternoon', 'dayofweek': '4', 'hour_from': 13, 'hour_to': 17, 'day_period': 'afternoon'})
|
||||
]})
|
||||
|
||||
|
|
@ -263,45 +221,36 @@ class TestCompanyLeave(TransactionCase):
|
|||
'name': 'Hol11',
|
||||
'employee_id': self.employee.id,
|
||||
'holiday_status_id': self.paid_time_off.id,
|
||||
'date_from': date(2020, 1, 6),
|
||||
'request_date_from': date(2020, 1, 6),
|
||||
'date_to': date(2020, 1, 10),
|
||||
'request_date_to': date(2020, 1, 10),
|
||||
'number_of_days': 3,
|
||||
})
|
||||
leave._compute_date_from_to()
|
||||
|
||||
company_leave = self.env['hr.leave'].create({
|
||||
company_leave = self.env['hr.leave.generate.multi.wizard'].create({
|
||||
'name': 'Bank Holiday',
|
||||
'holiday_type': 'company',
|
||||
'mode_company_id': self.company.id,
|
||||
'allocation_mode': 'company',
|
||||
'company_id': self.company.id,
|
||||
'holiday_status_id': self.bank_holiday.id,
|
||||
'date_from': date(2020, 1, 10),
|
||||
'request_date_from': date(2020, 1, 10),
|
||||
'date_to': date(2020, 1, 10),
|
||||
'request_date_to': date(2020, 1, 10),
|
||||
'number_of_days': 1,
|
||||
})
|
||||
company_leave._compute_date_from_to()
|
||||
company_leave.action_validate()
|
||||
company_leave.action_generate_time_off()
|
||||
|
||||
all_leaves = self.env['hr.leave'].search([('employee_id', '=', self.employee.id)], order='id')
|
||||
self.assertEqual(len(all_leaves), 3)
|
||||
# Original Leave
|
||||
self.assertEqual(leave.state, 'refuse')
|
||||
# before leave
|
||||
self.assertEqual(all_leaves[1].date_from, datetime(2020, 1, 6, 7, 0))
|
||||
self.assertEqual(all_leaves[1].date_to, datetime(2020, 1, 9, 16, 0))
|
||||
self.assertEqual(all_leaves[1].number_of_days, 2)
|
||||
self.assertEqual(all_leaves[1].state, 'confirm')
|
||||
# Company Leave
|
||||
self.assertEqual(all_leaves[2].date_from, datetime(2020, 1, 10, 7, 0))
|
||||
self.assertEqual(all_leaves[2].date_to, datetime(2020, 1, 10, 16, 0))
|
||||
self.assertEqual(all_leaves[2].number_of_days, 1)
|
||||
self.assertEqual(all_leaves[2].state, 'validate')
|
||||
self.assertEqual(len(all_leaves), 2)
|
||||
# Before Time Off
|
||||
self.assertEqual(all_leaves[0].date_from, datetime(2020, 1, 6, 7, 0))
|
||||
self.assertEqual(all_leaves[0].date_to, datetime(2020, 1, 9, 16, 0))
|
||||
self.assertEqual(all_leaves[0].number_of_days, 2)
|
||||
self.assertEqual(all_leaves[0].state, 'confirm')
|
||||
# Company Time Off
|
||||
self.assertEqual(all_leaves[1].date_from, datetime(2020, 1, 10, 7, 0))
|
||||
self.assertEqual(all_leaves[1].date_to, datetime(2020, 1, 10, 16, 0))
|
||||
self.assertEqual(all_leaves[1].number_of_days, 1)
|
||||
self.assertEqual(all_leaves[1].state, 'validate')
|
||||
|
||||
@warmup
|
||||
def test_leave_whole_company_07(self):
|
||||
def test_07_leave_whole_company(self):
|
||||
# Test Case 7: Try to create a bank holidays for a lot of
|
||||
# employees, and check the performances
|
||||
# 100 employees - 15 already on holidays that day
|
||||
|
|
@ -316,199 +265,23 @@ class TestCompanyLeave(TransactionCase):
|
|||
'employee_id': employee.id,
|
||||
'holiday_status_id': self.paid_time_off.id,
|
||||
'request_date_from': date(2020, 3, 29),
|
||||
'date_from': datetime(2020, 3, 29, 7, 0, 0),
|
||||
'request_date_to': date(2020, 4, 1),
|
||||
'date_to': datetime(2020, 4, 1, 19, 0, 0),
|
||||
'number_of_days': 3,
|
||||
} for employee in employees[0:15]])
|
||||
leaves._compute_date_from_to()
|
||||
|
||||
company_leave = self.env['hr.leave'].create({
|
||||
company_leave = self.env['hr.leave.generate.multi.wizard'].create({
|
||||
'name': 'Bank Holiday',
|
||||
'holiday_type': 'company',
|
||||
'mode_company_id': self.company.id,
|
||||
'allocation_mode': 'company',
|
||||
'company_id': self.company.id,
|
||||
'holiday_status_id': self.bank_holiday.id,
|
||||
'date_from': date(2020, 4, 1),
|
||||
'request_date_from': date(2020, 4, 1),
|
||||
'date_to': date(2020, 4, 1),
|
||||
'request_date_to': date(2020, 4, 1),
|
||||
'number_of_days': 1,
|
||||
'date_from': date(2020, 4, 2),
|
||||
'date_to': date(2020, 4, 2),
|
||||
})
|
||||
company_leave._compute_date_from_to()
|
||||
|
||||
with self.assertQueryCount(__system__=830): # 770 community
|
||||
with self.assertQueryCount(__system__=1856): # 770 community
|
||||
# Original query count: 1987
|
||||
# Without tracking/activity context keys: 5154
|
||||
company_leave.action_validate()
|
||||
company_leave.action_generate_time_off()
|
||||
|
||||
leaves = self.env['hr.leave'].search([('holiday_status_id', '=', self.bank_holiday.id)])
|
||||
self.assertEqual(len(leaves), 102)
|
||||
|
||||
def test_leave_whole_company_08(self):
|
||||
"""
|
||||
Give a company leave with employees on different schedules.
|
||||
"""
|
||||
# employee on different schedule
|
||||
calendar = self.env['resource.calendar'].create({
|
||||
'name': 'Different schedule',
|
||||
'attendance_ids': [(5, 0, 0),
|
||||
(0, 0, {
|
||||
'name': 'monday morning, earlier start',
|
||||
'hour_from': 7.5,
|
||||
'hour_to': 9.75,
|
||||
'day_period': 'morning',
|
||||
'dayofweek': '0',
|
||||
}),
|
||||
(0, 0, {
|
||||
'name': 'monday morning, second attendance',
|
||||
'hour_from': 10,
|
||||
'hour_to': 12,
|
||||
'day_period': 'morning',
|
||||
'dayofweek': '0',
|
||||
}),
|
||||
(0, 0, {
|
||||
'name': 'monday afternoon',
|
||||
'hour_from': 13,
|
||||
'hour_to': 17,
|
||||
'day_period': 'afternoon',
|
||||
'dayofweek': '0',
|
||||
}),
|
||||
]
|
||||
})
|
||||
self.employee.resource_calendar_id = calendar
|
||||
|
||||
# employee on default schedule
|
||||
employee2 = self.env['hr.employee'].create({
|
||||
'name': 'Employee2',
|
||||
'company_id': self.company.id,
|
||||
'tz': "Europe/Brussels",
|
||||
})
|
||||
|
||||
company_leave = self.env['hr.leave'].create({
|
||||
'name': 'Bank Holiday',
|
||||
'holiday_type': 'company',
|
||||
'mode_company_id': self.company.id,
|
||||
'holiday_status_id': self.bank_holiday.id,
|
||||
'date_from': date(2020, 1, 6),
|
||||
'request_date_from': date(2020, 1, 6),
|
||||
'date_to': date(2020, 1, 6),
|
||||
'request_date_to': date(2020, 1, 6),
|
||||
'number_of_days': 1,
|
||||
})
|
||||
company_leave._compute_date_from_to()
|
||||
company_leave.action_validate()
|
||||
|
||||
half_day_company_leave = self.env['hr.leave'].create({
|
||||
'name': 'Bank Holiday',
|
||||
'holiday_type': 'company',
|
||||
'mode_company_id': self.company.id,
|
||||
'holiday_status_id': self.bank_holiday.id,
|
||||
'date_from': date(2020, 1, 13),
|
||||
'request_date_from': date(2020, 1, 13),
|
||||
'date_to': date(2020, 1, 13),
|
||||
'request_date_to': date(2020, 1, 13),
|
||||
'number_of_days': 0.5,
|
||||
'request_unit_half': True,
|
||||
'request_date_from_period': 'am',
|
||||
})
|
||||
half_day_company_leave._compute_date_from_to()
|
||||
half_day_company_leave.action_validate()
|
||||
|
||||
employee_leaves = self.env['hr.leave'].search([('employee_id', '=', self.employee.id)], order='id')
|
||||
self.assertEqual(employee_leaves[0].date_from, datetime(2020, 1, 6, 6, 30))
|
||||
self.assertEqual(employee_leaves[0].date_to, datetime(2020, 1, 6, 16, 0))
|
||||
self.assertEqual(employee_leaves[0].number_of_days, 1)
|
||||
self.assertEqual(employee_leaves[0].number_of_hours_display, 8.25)
|
||||
self.assertEqual(employee_leaves[1].date_from, datetime(2020, 1, 13, 6, 30))
|
||||
self.assertEqual(employee_leaves[1].date_to, datetime(2020, 1, 13, 11, 0))
|
||||
self.assertEqual(employee_leaves[1].number_of_days, 0.5)
|
||||
self.assertEqual(employee_leaves[1].number_of_hours_display, 4.25)
|
||||
|
||||
employee2_leaves = self.env['hr.leave'].search([('employee_id', '=', employee2.id)], order='id')
|
||||
self.assertEqual(employee2_leaves[0].date_from, datetime(2020, 1, 6, 7, 0))
|
||||
self.assertEqual(employee2_leaves[0].number_of_days, 1)
|
||||
self.assertEqual(employee2_leaves[1].date_from, datetime(2020, 1, 13, 7, 0))
|
||||
self.assertEqual(employee2_leaves[1].date_to, datetime(2020, 1, 13, 11, 0))
|
||||
self.assertEqual(employee2_leaves[1].number_of_days, 0.5)
|
||||
|
||||
def test_leave_whole_company_09(self):
|
||||
"""
|
||||
Check leaves given in half days and in hours for a company.
|
||||
"""
|
||||
half_day_leave = self.env['hr.leave'].create({
|
||||
'name': 'Bank Holiday (full day)',
|
||||
'holiday_type': 'company',
|
||||
'mode_company_id': self.company.id,
|
||||
'holiday_status_id': self.bank_holiday.id,
|
||||
'date_from': date(2020, 1, 6),
|
||||
'request_date_from': date(2020, 1, 6),
|
||||
'date_to': date(2020, 1, 6),
|
||||
'request_date_to': date(2020, 1, 6),
|
||||
'number_of_days': 0.5,
|
||||
'request_unit_half': True,
|
||||
'request_date_from_period': 'am',
|
||||
})
|
||||
hours_leave = self.env['hr.leave'].create({
|
||||
'name': 'Bank Holiday (half day)',
|
||||
'holiday_type': 'company',
|
||||
'mode_company_id': self.company.id,
|
||||
'holiday_status_id': self.bank_holiday.id,
|
||||
'date_from': date(2020, 1, 7),
|
||||
'request_date_from': date(2020, 1, 7),
|
||||
'date_to': date(2020, 1, 7),
|
||||
'request_date_to': date(2020, 1, 7),
|
||||
'request_unit_hours': True,
|
||||
'request_hour_from': '5.5',
|
||||
'request_hour_to': '9',
|
||||
})
|
||||
|
||||
half_day_leave._compute_date_from_to()
|
||||
half_day_leave.action_validate()
|
||||
hours_leave._compute_date_from_to()
|
||||
hours_leave.action_validate()
|
||||
|
||||
employee_leaves = self.env['hr.leave'].search([('employee_id', '=', self.employee.id)], order='id')
|
||||
# half days leave
|
||||
self.assertEqual(employee_leaves[0].date_from, datetime(2020, 1, 6, 7, 0))
|
||||
self.assertEqual(employee_leaves[0].date_to, datetime(2020, 1, 6, 11, 0))
|
||||
self.assertEqual(employee_leaves[0].number_of_days, 0.5)
|
||||
# leave given in hours
|
||||
self.assertEqual(employee_leaves[1].date_from, datetime(2020, 1, 7, 3, 30))
|
||||
self.assertEqual(employee_leaves[1].date_to, datetime(2020, 1, 7, 7, 0))
|
||||
self.assertEqual(employee_leaves[1].number_of_hours_display, 1.0)
|
||||
|
||||
def test_leave_whole_company_10(self):
|
||||
"""
|
||||
Check leaves given in hours for a company,
|
||||
Making sure no leaves are given for 0 Hours / Week employee(i.e. Contractors billed for hours).
|
||||
"""
|
||||
employee_0_test_10, employee_1_test_10, employee_2_test_10 = self.env['hr.employee'].create([{
|
||||
'name': 'My Employee 0',
|
||||
'company_id': self.company.id,
|
||||
'tz': "Europe/Brussels",
|
||||
},{
|
||||
'name': 'My Employee 1',
|
||||
'company_id': self.company.id,
|
||||
'tz': "Europe/Brussels",
|
||||
},{
|
||||
'name': 'My Employee 2',
|
||||
'company_id': self.company.id,
|
||||
'tz': "Europe/Brussels",
|
||||
}])
|
||||
zero_hours_working_schedule = self.env['resource.calendar'].create({
|
||||
'name': 'Standard - Hours/Week',
|
||||
'hours_per_day': 0,
|
||||
'tz': "Europe/Brussels",
|
||||
})
|
||||
employee_0_test_10.resource_calendar_id = zero_hours_working_schedule
|
||||
self.env['hr.leave.allocation'].create({
|
||||
'name': 'Holiday (8 Hours)',
|
||||
'holiday_status_id': self.paid_time_off_hours.id,
|
||||
'holiday_type': 'company',
|
||||
'mode_company_id': self.company.id,
|
||||
'number_of_days': 1,
|
||||
})
|
||||
employee_leaves = self.env['hr.leave.allocation'].search([
|
||||
('name', '=', 'Holiday (8 Hours)'),
|
||||
('employee_id', 'in', [employee_0_test_10.id, employee_1_test_10.id, employee_2_test_10.id])])
|
||||
self.assertEqual(len(employee_leaves), 2)
|
||||
self.assertEqual(len(leaves), 101)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue