mirror of
https://github.com/bringout/oca-ocb-test.git
synced 2026-04-21 14:41:59 +02:00
123 lines
6.3 KiB
Python
123 lines
6.3 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from datetime import datetime
|
|
|
|
from pytz import utc
|
|
|
|
from odoo.tools.date_utils import sum_intervals
|
|
from odoo.tools.intervals import Intervals
|
|
|
|
from odoo.addons.test_resource.tests.common import TestResourceCommon
|
|
|
|
|
|
class TestResource(TestResourceCommon):
|
|
|
|
def test_calendars_validity_within_period(self):
|
|
calendars = self.jean.resource_id._get_calendars_validity_within_period(
|
|
utc.localize(datetime(2021, 7, 1, 8, 0, 0)),
|
|
utc.localize(datetime(2021, 7, 30, 17, 0, 0)),
|
|
)
|
|
interval = Intervals([(
|
|
utc.localize(datetime(2021, 7, 1, 8, 0, 0)),
|
|
utc.localize(datetime(2021, 7, 30, 17, 0, 0)),
|
|
self.env['resource.calendar.attendance'],
|
|
)])
|
|
|
|
self.assertEqual(1, len(calendars), "The dict returned by calendars validity should only have 1 entry")
|
|
self.assertEqual(1, len(calendars[self.jean.resource_id.id]), "Jean should only have one calendar")
|
|
jean_entry = calendars[self.jean.resource_id.id]
|
|
jean_calendar = next(iter(jean_entry))
|
|
self.assertEqual(self.jean.resource_calendar_id, jean_calendar, "It should be Jean's Calendar")
|
|
self.assertFalse(jean_entry[jean_calendar] - interval, "Interval should cover all calendar's validity")
|
|
self.assertFalse(interval - jean_entry[jean_calendar], "Calendar validity should cover all interval")
|
|
|
|
calendars = self.env['resource.resource']._get_calendars_validity_within_period(
|
|
utc.localize(datetime(2021, 7, 1, 8, 0, 0)),
|
|
utc.localize(datetime(2021, 7, 30, 17, 0, 0)),
|
|
)
|
|
self.assertEqual(1, len(calendars), "The dict returned by calendars validity should only have 1 entry")
|
|
self.assertEqual(1, len(calendars[False]), "False (default) should only have one calendar")
|
|
false_entry = calendars[False]
|
|
false_calendar = next(iter(false_entry))
|
|
self.assertEqual(self.env.company.resource_calendar_id, false_calendar, "It should be company calendar Calendar")
|
|
self.assertFalse(false_entry[false_calendar] - interval, "Interval should cover all calendar's validity")
|
|
self.assertFalse(interval - false_entry[false_calendar], "Calendar validity should cover all interval")
|
|
|
|
def test_performance(self):
|
|
calendars = [self.calendar_jean, self.calendar_john, self.calendar_jules, self.calendar_patel]
|
|
calendars_len = len(calendars)
|
|
self.resources_test = self.env['resource.test'].create([{
|
|
'name': 'resource ' + str(i),
|
|
'resource_calendar_id': calendars[i % calendars_len].id,
|
|
} for i in range(0, 50)])
|
|
|
|
start = utc.localize(datetime(2021, 7, 7, 12, 0, 0))
|
|
end = utc.localize(datetime(2021, 7, 16, 23, 59, 59))
|
|
with self.assertQueryCount(13):
|
|
work_intervals, _ = self.resources_test.resource_id._get_valid_work_intervals(start, end)
|
|
|
|
self.assertEqual(len(work_intervals), 50)
|
|
|
|
def test_get_valid_work_intervals(self):
|
|
start = utc.localize(datetime(2021, 7, 7, 12, 0, 0))
|
|
end = utc.localize(datetime(2021, 7, 16, 23, 59, 59))
|
|
work_intervals, _ = self.jean.resource_id._get_valid_work_intervals(start, end)
|
|
sum_work_intervals = sum_intervals(work_intervals[self.jean.resource_id.id])
|
|
self.assertEqual(58, sum_work_intervals, "Sum of the work intervals for the resource jean should be 40h+18h = 58h")
|
|
|
|
def test_get_valid_work_intervals_calendars_only(self):
|
|
calendars = [self.calendar_jean, self.calendar_john, self.calendar_jules, self.calendar_patel]
|
|
start = utc.localize(datetime(2021, 7, 7, 12, 0, 0))
|
|
end = utc.localize(datetime(2021, 7, 16, 23, 59, 59))
|
|
_, calendars_intervals = self.env['resource.resource']._get_valid_work_intervals(start, end, calendars)
|
|
sum_work_intervals_jean = sum_intervals(calendars_intervals[self.calendar_jean.id])
|
|
self.assertEqual(58, sum_work_intervals_jean, "Sum of the work intervals for the calendar of jean should be 40h+18h = 58h")
|
|
sum_work_intervals_john = sum_intervals(calendars_intervals[self.calendar_john.id])
|
|
self.assertEqual(26 - 1 / 3600, sum_work_intervals_john, "Sum of the work intervals for the calendar of john should be 20h+6h-1s = 25h59m59s")
|
|
sum_work_intervals_jules = sum_intervals(calendars_intervals[self.calendar_jules.id])
|
|
self.assertEqual(31, sum_work_intervals_jules, "Sum of the work intervals for the calendar of jules should be Wodd:15h+Wpair:16h = 31h")
|
|
sum_work_intervals_patel = sum_intervals(calendars_intervals[self.calendar_patel.id])
|
|
self.assertEqual(49, sum_work_intervals_patel, "Sum of the work intervals for the calendar of patel should be 14+35h = 49h")
|
|
|
|
def test_switch_two_weeks_resource(self):
|
|
"""
|
|
Check that it is possible to switch the company's default calendar
|
|
"""
|
|
self.env.company.resource_calendar_id = self.two_weeks_resource
|
|
company_resource = self.env.company.resource_calendar_id
|
|
# Switch two times to be sure to test both cases
|
|
company_resource.switch_calendar_type()
|
|
company_resource.switch_calendar_type()
|
|
|
|
def test_create_company_using_two_weeks_resource(self):
|
|
"""
|
|
Check that we can create a new company
|
|
if the default company calendar is two weeks
|
|
"""
|
|
self.env.company.resource_calendar_id = self.two_weeks_resource
|
|
self.env['res.company'].create({'name': 'New Company'})
|
|
|
|
def test_empty_working_hours_for_two_weeks_resource(self):
|
|
resource = self._define_calendar_2_weeks(
|
|
'Two weeks resource',
|
|
[],
|
|
'Europe/Brussels',
|
|
)
|
|
self.env['resource.calendar.attendance'].create({
|
|
'name': 'test',
|
|
'calendar_id': resource.id,
|
|
'hour_from': 0,
|
|
'hour_to': 0,
|
|
})
|
|
resource_hour = resource._get_hours_per_day()
|
|
self.assertEqual(resource_hour, 0.0)
|
|
|
|
def test_resource_without_calendar(self):
|
|
resource = self.env['resource.resource'].create({
|
|
'name': 'resource',
|
|
'calendar_id': False,
|
|
})
|
|
|
|
resource.company_id.resource_calendar_id = False
|
|
unavailabilities = resource._get_unavailable_intervals(datetime(2024, 7, 11), datetime(2024, 7, 12))
|
|
self.assertFalse(unavailabilities)
|