[FIX] google_calendar: fix event privacy synchronization

Before this commit, when user set privacy as 'Available' from odoo it is not
properly synchronize in google calendar.

After this commit, privacy value changes will be properly synchronized when
changes will be made from odoo to google calendar.

task-3667696

closes odoo/odoo#162486

X-original-commit: 888e65c9ff08866a7cda2cdf2e2b8c766fb773ca
Signed-off-by: Arnaud Joset (arj) <arj@odoo.com>
This commit is contained in:
pash-odoo
2024-04-24 09:28:15 +00:00
parent aa2d54d001
commit 91184dcd84
3 changed files with 79 additions and 9 deletions
+3 -1
View File
@@ -45,7 +45,7 @@ class Meeting(models.Model):
@api.model
def _get_google_synced_fields(self):
return {'name', 'description', 'allday', 'start', 'date_end', 'stop',
'attendee_ids', 'alarm_ids', 'location', 'privacy', 'active'}
'attendee_ids', 'alarm_ids', 'location', 'privacy', 'active', 'show_as'}
@api.model
def _restart_google_sync(self):
@@ -324,6 +324,8 @@ class Meeting(models.Model):
values['conferenceData'] = {'createRequest': {'requestId': uuid4().hex}}
if self.privacy:
values['visibility'] = self.privacy
if self.show_as:
values['transparency'] = 'opaque' if self.show_as == 'busy' else 'transparent'
if not self.active:
values['status'] = 'cancelled'
if self.user_id and self.user_id != self.env.user and not bool(self.user_id.sudo().google_calendar_token):
@@ -387,6 +387,7 @@ class TestSyncGoogle2Odoo(TestSyncGoogle):
'reminders': {'useDefault': True},
'start': {'date': '2020-01-6'},
'end': {'date': '2020-01-7'},
'transparency': 'opaque',
}
self.env['calendar.recurrence']._sync_google2odoo(GoogleEvent([values]))
recurrence = self.env['calendar.recurrence'].search([('google_id', '=', values.get('id'))])
@@ -1098,6 +1099,7 @@ class TestSyncGoogle2Odoo(TestSyncGoogle):
'timeZone': 'Europe/Brussels',
'date': None
},
'transparency': 'opaque',
}
self.env['calendar.event']._sync_google2odoo(GoogleEvent([values]))
self.assertEqual(event.attendee_ids.state, 'declined')
@@ -1135,6 +1137,7 @@ class TestSyncGoogle2Odoo(TestSyncGoogle):
'%s_owner_id' % self.env.cr.dbname: other_user.id}},
'reminders': {'overrides': [], 'useDefault': False},
'visibility': 'public',
'transparency': 'opaque',
}, timeout=3)
@patch_api
@@ -57,7 +57,8 @@ class TestSyncOdoo2Google(TestSyncGoogle):
'reminders': {'useDefault': False, 'overrides': [{'method': 'popup', 'minutes': alarm.duration_minutes}]},
'organizer': {'email': 'odoobot@example.com', 'self': True},
'attendees': [{'email': 'jean-luc@opoo.com', 'responseStatus': 'needsAction'}],
'extendedProperties': {'shared': {'%s_odoo_id' % self.env.cr.dbname: event.id}}
'extendedProperties': {'shared': {'%s_odoo_id' % self.env.cr.dbname: event.id}},
'transparency': 'opaque',
})
@patch_api
@@ -170,7 +171,8 @@ class TestSyncOdoo2Google(TestSyncGoogle):
'organizer': {'email': 'odoobot@example.com', 'self': True},
'attendees': [{'email': 'jean-luc@opoo.com', 'responseStatus': 'needsAction'},
{'email': 'phineas@opoo.com', 'responseStatus': 'needsAction'}],
'extendedProperties': {'shared': {'%s_odoo_id' % self.env.cr.dbname: event.id}}
'extendedProperties': {'shared': {'%s_odoo_id' % self.env.cr.dbname: event.id}},
'transparency': 'opaque',
})
@patch_api
@@ -195,7 +197,8 @@ class TestSyncOdoo2Google(TestSyncGoogle):
'reminders': {'overrides': [], 'useDefault': False},
'organizer': {'email': 'odoobot@example.com', 'self': True},
'attendees': [{'email': 'odoobot@example.com', 'responseStatus': 'accepted'}],
'extendedProperties': {'shared': {'%s_odoo_id' % self.env.cr.dbname: event.id}}
'extendedProperties': {'shared': {'%s_odoo_id' % self.env.cr.dbname: event.id}},
'transparency': 'opaque',
})
@patch_api
@@ -257,7 +260,8 @@ class TestSyncOdoo2Google(TestSyncGoogle):
'organizer': {'email': 'odoobot@example.com', 'self': True},
'attendees': [{'email': 'odoobot@example.com', 'responseStatus': 'accepted'}],
'recurrence': ['RRULE:FREQ=WEEKLY;COUNT=2;BYDAY=WE'],
'extendedProperties': {'shared': {'%s_odoo_id' % self.env.cr.dbname: recurrence.id}}
'extendedProperties': {'shared': {'%s_odoo_id' % self.env.cr.dbname: recurrence.id}},
'transparency': 'opaque',
})
@patch_api
@@ -292,7 +296,8 @@ class TestSyncOdoo2Google(TestSyncGoogle):
'organizer': {'email': 'odoobot@example.com', 'self': True},
'attendees': [{'email': 'odoobot@example.com', 'responseStatus': 'accepted'}],
'recurrence': ['RRULE:FREQ=WEEKLY;COUNT=2;BYDAY=WE'],
'extendedProperties': {'shared': {'%s_odoo_id' % self.env.cr.dbname: event.recurrence_id.id}}
'extendedProperties': {'shared': {'%s_odoo_id' % self.env.cr.dbname: event.recurrence_id.id}},
'transparency': 'opaque',
}, timeout=3)
self.assertGoogleEventDeleted(google_id)
@@ -340,7 +345,8 @@ class TestSyncOdoo2Google(TestSyncGoogle):
'extendedProperties': {'shared': {'%s_odoo_id' % self.env.cr.dbname: event.recurrence_id.id}},
'reminders': {'overrides': [], 'useDefault': False},
'visibility': 'public',
'recurrence': ['RRULE:FREQ=WEEKLY;WKST=SU;COUNT=1;BYDAY=WE']
'recurrence': ['RRULE:FREQ=WEEKLY;WKST=SU;COUNT=1;BYDAY=WE'],
'transparency': 'opaque',
}, timeout=3)
@patch_api
@@ -390,7 +396,8 @@ class TestSyncOdoo2Google(TestSyncGoogle):
'reminders': {'overrides': [], 'useDefault': False},
'organizer': {'email': 'jean-luc@opoo.com', 'self': True},
'attendees': [{'email': 'jean-luc@opoo.com', 'responseStatus': 'accepted'}],
'extendedProperties': {'shared': {'%s_odoo_id' % self.env.cr.dbname: event.id}}
'extendedProperties': {'shared': {'%s_odoo_id' % self.env.cr.dbname: event.id}},
'transparency': 'opaque',
}, timeout=3)
@patch_api
@@ -429,6 +436,7 @@ class TestSyncOdoo2Google(TestSyncGoogle):
'extendedProperties': {'shared': {'%s_odoo_id' % self.env.cr.dbname: new_recurrence.id}},
'reminders': {'overrides': [], 'useDefault': False},
'visibility': 'public',
'transparency': 'opaque',
}, timeout=3)
@patch_api
@@ -558,6 +566,7 @@ class TestSyncOdoo2Google(TestSyncGoogle):
'extendedProperties': {'shared': {'%s_odoo_id' % self.env.cr.dbname: event.id}},
'reminders': {'overrides': [], 'useDefault': False},
'visibility': 'public',
'transparency': 'opaque',
})
@@ -596,6 +605,7 @@ class TestSyncOdoo2Google(TestSyncGoogle):
'extendedProperties': {'shared': {'%s_odoo_id' % self.env.cr.dbname: new_recurrence.id}},
'reminders': {'overrides': [], 'useDefault': False},
'visibility': 'public',
'transparency': 'opaque',
}, timeout=3)
@patch.object(GoogleService, '_do_request')
@@ -668,7 +678,8 @@ class TestSyncOdoo2Google(TestSyncGoogle):
'extendedProperties': {'shared': {'%s_odoo_id' % self.env.cr.dbname: event_1.id}},
'reminders': {'overrides': [], 'useDefault': False},
'visibility': 'public',
'status': 'cancelled'
'status': 'cancelled',
'transparency': 'opaque',
}, timeout=3)
# Assert that deleted event is not active anymore and the recurrence updated its calendar_event_ids.
self.assertFalse(event_1.active)
@@ -778,3 +789,57 @@ class TestSyncOdoo2Google(TestSyncGoogle):
})
event._sync_odoo2google(self.google_service)
self.assertGoogleEventHasNoConferenceData()
@patch_api
def test_event_available_privacy(self):
""" Create an event with "Available" value for 'show_as' and assert value is properly sync in google calendar. """
event = self.env['calendar.event'].create({
'name': "Event",
'start': datetime(2024, 3, 29, 10, 0),
'stop': datetime(2024, 3, 29, 10, 0),
'need_sync': False,
'show_as': 'free'
})
event._sync_odoo2google(self.google_service)
self.assertGoogleEventInserted({
'id': False,
'start': {'dateTime': '2024-03-29T10:00:00+00:00', 'date': None},
'end': {'dateTime': '2024-03-29T10:00:00+00:00', 'date': None},
'summary': 'Event',
'description': '',
'location': '',
'visibility': 'public',
'guestsCanModify': True,
'reminders': {'overrides': [], 'useDefault': False},
'organizer': {'email': 'odoobot@example.com', 'self': True},
'attendees': [{'email': 'odoobot@example.com', 'responseStatus': 'accepted'}],
'extendedProperties': {'shared': {'%s_odoo_id' % self.env.cr.dbname: event.id}},
'transparency': 'transparent',
})
@patch_api
def test_event_busy_privacy(self):
""" Create an event with "busy" value for 'show_as' and assert value is properly sync in google calendar. """
event = self.env['calendar.event'].create({
'name': "Event",
'start': datetime(2024, 3, 29, 10, 0),
'stop': datetime(2024, 3, 29, 10, 0),
'need_sync': False,
'show_as': 'busy'
})
event._sync_odoo2google(self.google_service)
self.assertGoogleEventInserted({
'id': False,
'start': {'dateTime': '2024-03-29T10:00:00+00:00', 'date': None},
'end': {'dateTime': '2024-03-29T10:00:00+00:00', 'date': None},
'summary': 'Event',
'description': '',
'location': '',
'visibility': 'public',
'guestsCanModify': True,
'reminders': {'overrides': [], 'useDefault': False},
'organizer': {'email': 'odoobot@example.com', 'self': True},
'attendees': [{'email': 'odoobot@example.com', 'responseStatus': 'accepted'}],
'extendedProperties': {'shared': {'%s_odoo_id' % self.env.cr.dbname: event.id}},
'transparency': 'opaque',
})