summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrea Grazioso (agr-odoo) <agr@odoo.com>2019-09-25 06:47:36 +0000
committerAndrea Grazioso (agr-odoo) <agr@odoo.com>2019-11-04 07:51:21 +0000
commitbaba6be668d96d26ef2890617246cb4a6aa82f75 (patch)
treee6908f626e6e40433c0059d2a6720bf51fa88e05
parente5d3f2a1abb3918dc90776881897a0a925c0db00 (diff)
[FIX] calendar,google_calendar: exclusions not propagating
Activate Google Synchronization, create on GC a recurrent event, synchronize OE, then delete an event of the recursion on GC, sync again on OE. The event will be deleted from GC but not from OE after sync. The exclusion on OE is not correctly working in that particular case, fixing require also to "suppress" the attendee to avoid that just created exclusions would be detected as changes to send in a following synchronization. closes odoo/odoo#37884 closes odoo/odoo#39510 Signed-off-by: Nicolas Martinelli (nim) <nim@odoo.com> Signed-off-by: Nicolas Martinelli (nim) <nim@odoo.com>
-rw-r--r--addons/calendar/models/calendar.py3
-rw-r--r--addons/google_calendar/models/calendar.py5
-rw-r--r--addons/google_calendar/models/google_calendar.py8
3 files changed, 15 insertions, 1 deletions
diff --git a/addons/calendar/models/calendar.py b/addons/calendar/models/calendar.py
index 9697a2c13b9..54ea446aed4 100644
--- a/addons/calendar/models/calendar.py
+++ b/addons/calendar/models/calendar.py
@@ -1033,6 +1033,9 @@ class Meeting(models.Model):
'event_id': meeting.id,
}
+ if self._context.get('google_internal_event_id', False):
+ values['google_internal_event_id'] = self._context.get('google_internal_event_id')
+
# current user don't have to accept his own meeting
if partner == self.env.user.partner_id:
values['state'] = 'accepted'
diff --git a/addons/google_calendar/models/calendar.py b/addons/google_calendar/models/calendar.py
index 672a85358a5..5be802cb6cb 100644
--- a/addons/google_calendar/models/calendar.py
+++ b/addons/google_calendar/models/calendar.py
@@ -20,7 +20,10 @@ class Meeting(models.Model):
def write(self, values):
sync_fields = set(self.get_fields_need_update_google())
if (set(values) and sync_fields) and 'oe_update_date' not in values and 'NewMeeting' not in self._context:
- values['oe_update_date'] = fields.Datetime.now()
+ if 'oe_update_date' in self._context:
+ values['oe_update_date'] = self._context.get('oe_update_date')
+ else:
+ values['oe_update_date'] = fields.Datetime.now()
return super(Meeting, self).write(values)
@api.returns('self', lambda value: value.id)
diff --git a/addons/google_calendar/models/google_calendar.py b/addons/google_calendar/models/google_calendar.py
index 84ac9aa1db0..487c1f1f148 100644
--- a/addons/google_calendar/models/google_calendar.py
+++ b/addons/google_calendar/models/google_calendar.py
@@ -850,6 +850,14 @@ class GoogleCalendar(models.AbstractModel):
parent_oe_id = event_to_synchronize[base_event][0][1].OE.event_id
if parent_oe_id:
CalendarEvent.browse("%s-%s" % (parent_oe_id, new_google_event_id)).with_context(curr_attendee=event.OE.attendee_id).unlink(can_be_deleted=True)
+ else:
+ main_att = CalendarAttendee.with_context(context_novirtual).search([('partner_id', '=', my_partner_id), ('google_internal_event_id', '=', event.GG.event['id'].rsplit('_', 1)[0])], limit=1)
+ if main_att:
+ excluded_event_id = str(main_att.event_id.id) + '-' + new_google_event_id
+
+ CalendarEvent.browse(excluded_event_id).with_context(google_internal_event_id=event.GG.event.get('id'), oe_update_date=False).unlink(can_be_deleted=False)
+ else:
+ _logger.warning("Could not create the correct exclusion for event")
elif isinstance(actToDo, Delete):
if actSrc == 'GG':