|
|
"""Assign the context-dependent (best) linked contact as determined by `MailingContact._get_sort_key`.
Note: `mailing_contact_id` will be set to `False` if `default_list_ids` is provided and no linked contact
has a `mailing.subscription` for it (opted out or not).
This is particularly convenient to avoid creating duplicate contacts in `MailingContact._from_partners`
if a newer contacts subscribed to the context mailing list exists but is not linked to the partner.
"""
self.mailing_contact_id = False
active_list_id = self.env['mailing.contact']._get_context_active_list_id()
subscribing_contacts = self.env['mailing.subscription'].search(
Domain('contact_id', 'in', self.mailing_contact_ids.ids) & Domain('list_id', '=', active_list_id)
).contact_id
for partner in self.filtered('mailing_contact_ids'):
partner.mailing_contact_id = partner.mailing_contact_ids.sorted(
lambda c: c._get_sort_key(list_id=active_list_id, partner=partner))[-1]
if active_list_id and partner.mailing_contact_id not in subscribing_contacts:
partner.mailing_contact_id = False
|
|