Skip to content

Commit 8cac849

Browse files
tivisseOmar (OSAH)
authored andcommitted
[FIX] hr_calendar: pass resource objects instead of employees in _get_schedule
This commit aims to fix the issue where the _get_schedule method of the hr.calendar model was receiving a list of employee ids instead of a list of resource objects, leading to some test failures as '_is_flexible' method was not accessible from the employee object that was initially passed. Additionally, the _get_schedule method in res_partner was passing employee_id instead of the employee's resource_id to fetch the calendar_intervals. This was also fixed in this commit. related ticket-id: 4492625 Enterprise: 79532 Part-of: odoo#198032 Related: odoo/enterprise#79532 Signed-off-by: Xavier Bol (xbo) <xbo@odoo.com>
1 parent 071b447 commit 8cac849

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

addons/hr_calendar/models/res_partner.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,19 +45,19 @@ def _get_schedule(self, start_period, stop_period, everybody=False, merge=True):
4545
return {}
4646
interval_by_calendar = defaultdict()
4747
calendar_periods_by_employee = defaultdict(list)
48-
employees_by_calendar = defaultdict(list)
48+
resources_by_calendar = defaultdict(lambda: self.env['resource.resource'])
4949

5050
# Compute employee's calendars's period and order employee by his involved calendars
5151
employees = sum(employees_by_partner.values(), start=self.env['hr.employee'])
5252
calendar_periods_by_employee = employees._get_calendar_periods(start_period, stop_period)
5353
for employee, calendar_periods in calendar_periods_by_employee.items():
5454
for (start, stop, calendar) in calendar_periods:
55-
employees_by_calendar[calendar].append(employee)
55+
resources_by_calendar[calendar] += employee.resource_id
5656

5757
# Compute all work intervals per calendar
58-
for calendar, employees in employees_by_calendar.items():
58+
for calendar, resources in resources_by_calendar.items():
5959
calendar = calendar or self.env.company.resource_calendar_id # No calendar if fully flexible
60-
work_intervals = calendar._work_intervals_batch(start_period, stop_period, resources=employees, tz=timezone(calendar.tz))
60+
work_intervals = calendar._work_intervals_batch(start_period, stop_period, resources=resources, tz=timezone(calendar.tz))
6161
del work_intervals[False]
6262
# Merge all employees intervals to avoid to compute it multiples times
6363
if merge:
@@ -75,7 +75,7 @@ def _get_schedule(self, start_period, stop_period, everybody=False, merge=True):
7575
if merge:
7676
calendar_interval = interval_by_calendar[calendar]
7777
else:
78-
calendar_interval = interval_by_calendar[calendar][employee.id]
78+
calendar_interval = interval_by_calendar[calendar][employee.resource_id.id]
7979
employee_interval = employee_interval | (calendar_interval & interval)
8080
schedule_by_employee[employee] = employee_interval
8181

0 commit comments

Comments
 (0)