57 lines
2.7 KiB
Python
57 lines
2.7 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details
|
|
|
|
from datetime import datetime
|
|
from dateutil.relativedelta import relativedelta
|
|
from odoo.addons.planning.tests.test_period_duplication import TestPeriodDuplication
|
|
|
|
|
|
class TestPeriodDuplicationHolidays(TestPeriodDuplication):
|
|
def test_duplication_should_create_open_shift_when_time_off(self):
|
|
PlanningSlot = self.env['planning.slot']
|
|
dt = datetime(2023, 7, 24, 0, 0)
|
|
slot = PlanningSlot.create({
|
|
'resource_id': self.resource_joseph.id,
|
|
'start_datetime': dt + relativedelta(hours=9),
|
|
'end_datetime': dt + relativedelta(hours=15),
|
|
})
|
|
self.env.user.tz = 'UTC'
|
|
self.env['hr.leave'].create({
|
|
'name': 'Time Off',
|
|
'holiday_status_id': self.env.ref('hr_holidays.leave_type_sick_time_off').id,
|
|
'request_date_from': dt + relativedelta(weeks=1),
|
|
'request_date_to': dt + relativedelta(weeks=1, days=1),
|
|
'employee_id': self.employee_joseph.id,
|
|
}).action_approve()
|
|
copied, _dummy = PlanningSlot.with_context(tz='Europe/Brussels').action_copy_previous_week(
|
|
str(dt + relativedelta(weeks=1)), [
|
|
['start_datetime', '<=', dt + relativedelta(weeks=1)],
|
|
['end_datetime', '>=', dt],
|
|
['resource_id', '=', self.resource_joseph.id],
|
|
]
|
|
)
|
|
self.assertEqual(len(copied), 1, "2 slots should be generated")
|
|
copied_slot = PlanningSlot.browse(copied)
|
|
self.assertFalse(copied_slot.resource_id, "The shifts should be copied as open, as the employees are on time off")
|
|
self.assertEqual(slot.allocated_hours, copied_slot.allocated_hours, "The allocated hours should stay unchanged")
|
|
|
|
def test_duplication_should_not_create_shift_when_holiday(self):
|
|
PlanningSlot = self.env['planning.slot']
|
|
dt = datetime(2023, 7, 24, 0, 0)
|
|
PlanningSlot.create({
|
|
'resource_id': self.resource_joseph.id,
|
|
'start_datetime': dt + relativedelta(hours=9),
|
|
'end_datetime': dt + relativedelta(hours=15),
|
|
})
|
|
self.env.user.tz = 'UTC'
|
|
self.env['resource.calendar.leaves'].create({
|
|
'date_from': dt + relativedelta(weeks=1),
|
|
'date_to': dt + relativedelta(weeks=1, days=1),
|
|
})
|
|
self.assertFalse(PlanningSlot.with_context(tz='Europe/Brussels').action_copy_previous_week(
|
|
str(dt + relativedelta(weeks=1)), [
|
|
['start_datetime', '<=', dt + relativedelta(weeks=1)],
|
|
['end_datetime', '>=', dt],
|
|
['resource_id', '=', self.resource_joseph.id],
|
|
]
|
|
), "The shift should be copied as open, as the company is on time off")
|