From 21552d4fba8f2a2e37d1127a87c415f745bf8aed Mon Sep 17 00:00:00 2001 From: ntsirintanis Date: Thu, 18 Apr 2024 10:44:23 +0200 Subject: [PATCH] [FIX] google_calendar: ignore no partner created --- addons/google_calendar/models/calendar.py | 27 ++++++++++++++--------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/addons/google_calendar/models/calendar.py b/addons/google_calendar/models/calendar.py index 464790b22e22e..02fbc632daca7 100644 --- a/addons/google_calendar/models/calendar.py +++ b/addons/google_calendar/models/calendar.py @@ -109,22 +109,29 @@ def _odoo_attendee_commands(self, google_event): if google_event.exists(self.env): existing_attendees = self.browse(google_event.odoo_id(self.env)).attendee_ids attendees_by_emails = {tools.email_normalize(a.email): a for a in existing_attendees} - for attendee in google_attendees: - email = attendee.get('email') - + partners = self.env['mail.thread']._mail_find_partner_from_emails(emails, records=self, force_create=True, extra_domain=[('type', '!=', 'private')]) + for attendee in zip(emails, partners, google_attendees): + email = attendee[0] + state = attendee[2].get('status', {}).get('response', 'accepted') if email in attendees_by_emails: # Update existing attendees - attendee_commands += [(1, attendees_by_emails[email].id, {'state': attendee.get('responseStatus')})] + attendee_commands += [(1, attendees_by_emails[email].id, {'state': state})] else: # Create new attendees - partner = self.env.user.partner_id if attendee.get('self') else self.env['res.partner'].find_or_create(attendee.get('email')) - attendee_commands += [(0, 0, {'state': attendee.get('responseStatus'), 'partner_id': partner.id})] + if attendee[2].get('self'): + partner = self.env.user.partner_id + elif attendee[1]: + partner = attendee[1] + else: + continue + attendee_commands += [(0, 0, {'state': state, 'partner_id': partner.id})] partner_commands += [(4, partner.id)] - if attendee.get('displayName') and not partner.name: - partner.name = attendee.get('displayName') + if attendee[2].get('displayName') and not partner.name: + partner.name = attendee[2].get('displayName') for odoo_attendee in attendees_by_emails.values(): - # Remove old attendees - if tools.email_normalize(odoo_attendee.email) not in emails: + # Remove old attendees but only if it does not correspond to the current user. + email = tools.email_normalize(odoo_attendee.email) + if email not in emails and email != self.env.user.email: attendee_commands += [(2, odoo_attendee.id)] partner_commands += [(3, odoo_attendee.partner_id.id)] return attendee_commands, partner_commands