From 722ea57aa022b411edcf6ca72aa3087e245b266b Mon Sep 17 00:00:00 2001 From: Arnaud Joset Date: Tue, 29 Jun 2021 10:15:45 +0000 Subject: [PATCH] [FIX] microsoft_calendar: find attendee based on mail and favour the one with internal users Before this commit, attendee were found based on the email sent by Microsoft. When multiple partners would match the mail, the first one was selected but we should favour the partner with a user. The method _mail_find_partner_from_emails has this exact purpose and therefore is used. X-original-commit: 4f944f89a5785a2569842dc402c484f21b7aa121 --- addons/microsoft_calendar/models/calendar.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/addons/microsoft_calendar/models/calendar.py b/addons/microsoft_calendar/models/calendar.py index 566bd629873..2c336d06a23 100644 --- a/addons/microsoft_calendar/models/calendar.py +++ b/addons/microsoft_calendar/models/calendar.py @@ -141,21 +141,22 @@ class Meeting(models.Model): elif self.env.user.partner_id.email not in emails: commands_attendee += [(0, 0, {'state': 'accepted', 'partner_id': self.env.user.partner_id.id})] commands_partner += [(4, self.env.user.partner_id.id)] + partners = self.env['mail.thread']._mail_find_partner_from_emails(emails, records=self, force_create=True) attendees_by_emails = {a.email: a for a in existing_attendees} - for attendee in microsoft_attendees: - email = attendee.get('emailAddress').get('address') - state = ATTENDEE_CONVERTER_M2O.get(attendee.get('status').get('response')) + for attendee in zip(emails, partners, microsoft_attendees): + email = attendee[0] + state = ATTENDEE_CONVERTER_M2O.get(attendee[2].get('status').get('response')) if email in attendees_by_emails: # Update existing attendees commands_attendee += [(1, attendees_by_emails[email].id, {'state': state})] else: # Create new attendees - partner = self.env['res.partner'].find_or_create(email) + partner = attendee[1] commands_attendee += [(0, 0, {'state': state, 'partner_id': partner.id})] commands_partner += [(4, partner.id)] - if attendee.get('emailAddress').get('name') and not partner.name: - partner.name = attendee.get('emailAddress').get('name') + if attendee[2].get('emailAddress').get('name') and not partner.name: + partner.name = attendee[2].get('emailAddress').get('name') for odoo_attendee in attendees_by_emails.values(): # Remove old attendees if odoo_attendee.email not in emails: