From bbf936f40d30cc68106c3abba6473f3ef6d960c3 Mon Sep 17 00:00:00 2001 From: grzana12 Date: Wed, 4 May 2022 20:13:55 +0000 Subject: [PATCH] [FW][FIX] mass_mailing: check fields for seen list are stored before going into SQL Seen list (aka already mailed records) computation is done in SQL to speedup computation. It is based on an heuristic to find fields to check (either a partner, either an email). However it checks fields are present in model but does not check they are stored. This leads to traceback if fields are not stored. Task-2852943 X-original-commit: fa11070d4533475778ea933225e30d06a09406bc Part-of: odoo/odoo#94532 --- addons/mass_mailing/models/mailing.py | 8 ++++---- addons/mass_mailing_sms/models/mailing_mailing.py | 11 +++++++---- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/addons/mass_mailing/models/mailing.py b/addons/mass_mailing/models/mailing.py index a59b969119a..86a77f76490 100644 --- a/addons/mass_mailing/models/mailing.py +++ b/addons/mass_mailing/models/mailing.py @@ -922,7 +922,7 @@ class MassMailing(models.Model): """ # Apply same 'get email field' rule from mail_thread.message_get_default_recipients - if 'partner_id' in target._fields: + if 'partner_id' in target._fields and target._fields['partner_id'].store: mail_field = 'email' query = """ SELECT lower(substring(p.%(mail_field)s, '([^ ,;<@]+@[^> ,;]+)')) @@ -935,11 +935,11 @@ class MassMailing(models.Model): """ elif issubclass(type(target), self.pool['mail.thread.blacklist']): mail_field = 'email_normalized' - elif 'email_from' in target._fields: + elif 'email_from' in target._fields and target._fields['email_from'].store: mail_field = 'email_from' - elif 'partner_email' in target._fields: + elif 'partner_email' in target._fields and target._fields['partner_email'].store: mail_field = 'partner_email' - elif 'email' in target._fields: + elif 'email' in target._fields and target._fields['email'].store: mail_field = 'email' else: raise UserError(_("Unsupported mass mailing model %s", self.mailing_model_id.name)) diff --git a/addons/mass_mailing_sms/models/mailing_mailing.py b/addons/mass_mailing_sms/models/mailing_mailing.py index cd4a5a02d94..e1468bd5365 100644 --- a/addons/mass_mailing_sms/models/mailing_mailing.py +++ b/addons/mass_mailing_sms/models/mailing_mailing.py @@ -178,16 +178,19 @@ class Mailing(models.Model): if issubclass(type(target), self.pool['mail.thread.phone']): phone_fields = ['phone_sanitized'] elif issubclass(type(target), self.pool['mail.thread']): - phone_fields = target._sms_get_number_fields() + phone_fields = [ + fname for fname in target._sms_get_number_fields() + if fname in target._fields and target._fields[fname].store + ] partner_fields = target._sms_get_partner_fields() else: phone_fields = [] - if 'mobile' in target._fields: + if 'mobile' in target._fields and target._fields['mobile'].store: phone_fields.append('mobile') - if 'phone' in target._fields: + if 'phone' in target._fields and target._fields['phone'].store: phone_fields.append('phone') partner_field = next( - (fname for fname in partner_fields if target._fields[fname].type == 'many2one'), + (fname for fname in partner_fields if target._fields[fname].store and target._fields[fname].type == 'many2one'), False ) if not phone_fields and not partner_field: