[FIX] hr_holidays : keep leave out of approver's calendar
Steps : Install modules hr_holidays and google_calendar; Log into Odoo with two different users, one manager and one employee (subordinated): f.e. Admin e Demo; Set Google Client ID and Google Secret with a OAuth2.0; Check if in Odoo's Calendar the Synched with Google tag compares on the right (with manager); From employee user, go to Time Off -> My Time Off -> My Time Off Requests and Create with a date; From manager user, go to Time Off -> Managers -> Time Off and accept the time off created; Go to manager's Google Calendar. Current behavior: Google event is created and visible for manager, employee has an event since is an attendee of the first. Expected behavior: Google event is created and visible for employee, manager is not involved. Fix: Group the leaves with user and create events with this user. We could not modify easily the behavior of the calendar sync modules. The following approach was tested: odoo/odoo#86385 But it has some side effects on recurring events, oultier events (events not following the recurrence) and could bring performance issues. The solution of this fix was chosen because it is less intrusive. opw-2761158 closes odoo/odoo#88607 X-original-commit: ce96dd4f7488ce66d3fda5fd09a4566424c52bd2 Signed-off-by: Arnaud Joset <arj@odoo.com> Signed-off-by: Onockx Audric (auon) <auon@odoo.com>
This commit is contained in:
@@ -1119,21 +1119,26 @@ class HolidaysRequest(models.Model):
|
||||
holidays = self.filtered(lambda request: request.holiday_type == 'employee' and request.employee_id)
|
||||
holidays._create_resource_leave()
|
||||
meeting_holidays = holidays.filtered(lambda l: l.holiday_status_id.create_calendar_meeting)
|
||||
meetings = self.env['calendar.event']
|
||||
if meeting_holidays:
|
||||
meeting_values = meeting_holidays._prepare_holidays_meeting_values()
|
||||
meetings = self.env['calendar.event'].with_context(
|
||||
no_mail_to_attendees=True,
|
||||
calendar_no_videocall=True,
|
||||
active_model=self._name
|
||||
).create(meeting_values)
|
||||
for holiday, meeting in zip(meeting_holidays, meetings):
|
||||
holiday.meeting_id = meeting
|
||||
meeting_values_for_user_id = meeting_holidays._prepare_holidays_meeting_values()
|
||||
Meeting = self.env['calendar.event']
|
||||
for user_id, meeting_values in meeting_values_for_user_id.items():
|
||||
meetings += Meeting.with_user(user_id or self.env.uid).with_context(
|
||||
no_mail_to_attendees=True,
|
||||
calendar_no_videocall=True,
|
||||
active_model=self._name
|
||||
).create(meeting_values)
|
||||
Holiday = self.env['hr.leave']
|
||||
for meeting in meetings:
|
||||
Holiday.browse(meeting.res_id).meeting_id = meeting
|
||||
|
||||
def _prepare_holidays_meeting_values(self):
|
||||
result = []
|
||||
result = defaultdict(list)
|
||||
company_calendar = self.env.company.resource_calendar_id
|
||||
for holiday in self:
|
||||
calendar = holiday.employee_id.resource_calendar_id or company_calendar
|
||||
user = holiday.user_id
|
||||
if holiday.leave_type_request_unit == 'hour':
|
||||
meeting_name = _("%s on Time Off : %.2f hour(s)") % (holiday.employee_id.name or holiday.category_id.name, holiday.number_of_hours_display)
|
||||
else:
|
||||
@@ -1142,20 +1147,20 @@ class HolidaysRequest(models.Model):
|
||||
'name': meeting_name,
|
||||
'duration': holiday.number_of_days * (calendar.hours_per_day or HOURS_PER_DAY),
|
||||
'description': holiday.notes,
|
||||
'user_id': holiday.user_id.id,
|
||||
'user_id': user.id,
|
||||
'start': holiday.date_from,
|
||||
'stop': holiday.date_to,
|
||||
'allday': False,
|
||||
'privacy': 'confidential',
|
||||
'event_tz': holiday.user_id.tz,
|
||||
'event_tz': user.tz,
|
||||
'activity_ids': [(5, 0, 0)],
|
||||
'res_id': holiday.id,
|
||||
}
|
||||
# Add the partner_id (if exist) as an attendee
|
||||
if holiday.user_id and holiday.user_id.partner_id:
|
||||
if user and user.partner_id:
|
||||
meeting_values['partner_ids'] = [
|
||||
(4, holiday.user_id.partner_id.id)]
|
||||
result.append(meeting_values)
|
||||
(4, user.partner_id.id)]
|
||||
result[user.id].append(meeting_values)
|
||||
return result
|
||||
|
||||
def _prepare_employees_holiday_values(self, employees):
|
||||
|
||||
Reference in New Issue
Block a user