[FIX] mass_mailing: support partner_id field
A sale.order is an authorised model for mass mailing but it does not have an email or email_from field. When trying to send a mass mailing campaign on sale orders, an error was raised as sale_order.email_from does not exists closes odoo/odoo#30220
This commit is contained in:
@@ -6,8 +6,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Odoo Server 12.0\n"
|
"Project-Id-Version: Odoo Server 12.0\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2019-01-09 10:32+0000\n"
|
"POT-Creation-Date: 2019-01-15 10:48+0000\n"
|
||||||
"PO-Revision-Date: 2019-01-09 10:32+0000\n"
|
"PO-Revision-Date: 2019-01-15 10:48+0000\n"
|
||||||
"Last-Translator: <>\n"
|
"Last-Translator: <>\n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -2158,6 +2158,12 @@ msgstr ""
|
|||||||
msgid "Unsubscription Date"
|
msgid "Unsubscription Date"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: mass_mailing
|
||||||
|
#: code:addons/mass_mailing/models/mass_mailing.py:806
|
||||||
|
#, python-format
|
||||||
|
msgid "Unsupported mass mailing model %r"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#. module: mass_mailing
|
#. module: mass_mailing
|
||||||
#. openerp-web
|
#. openerp-web
|
||||||
#: code:addons/mass_mailing/static/src/xml/mass_mailing.xml:17
|
#: code:addons/mass_mailing/static/src/xml/mass_mailing.xml:17
|
||||||
|
|||||||
@@ -798,15 +798,28 @@ class MassMailing(models.Model):
|
|||||||
"""Returns a set of emails already targeted by current mailing/campaign (no duplicates)"""
|
"""Returns a set of emails already targeted by current mailing/campaign (no duplicates)"""
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
target = self.env[self.mailing_model_real]
|
target = self.env[self.mailing_model_real]
|
||||||
mail_field = 'email' if 'email' in target._fields else 'email_from'
|
if set(['email', 'email_from']) & set(target._fields):
|
||||||
# avoid loading a large number of records in memory
|
mail_field = 'email' if 'email' in target._fields else 'email_from'
|
||||||
# + use a basic heuristic for extracting emails
|
# avoid loading a large number of records in memory
|
||||||
query = """
|
# + use a basic heuristic for extracting emails
|
||||||
SELECT lower(substring(t.%(mail_field)s, '([^ ,;<@]+@[^> ,;]+)'))
|
query = """
|
||||||
FROM mail_mail_statistics s
|
SELECT lower(substring(t.%(mail_field)s, '([^ ,;<@]+@[^> ,;]+)'))
|
||||||
JOIN %(target)s t ON (s.res_id = t.id)
|
FROM mail_mail_statistics s
|
||||||
WHERE substring(t.%(mail_field)s, '([^ ,;<@]+@[^> ,;]+)') IS NOT NULL
|
JOIN %(target)s t ON (s.res_id = t.id)
|
||||||
"""
|
WHERE substring(t.%(mail_field)s, '([^ ,;<@]+@[^> ,;]+)') IS NOT NULL
|
||||||
|
"""
|
||||||
|
elif 'partner_id' in target._fields:
|
||||||
|
mail_field = 'email'
|
||||||
|
query = """
|
||||||
|
SELECT lower(substring(p.%(mail_field)s, '([^ ,;<@]+@[^> ,;]+)'))
|
||||||
|
FROM mail_mail_statistics s
|
||||||
|
JOIN %(target)s t ON (s.res_id = t.id)
|
||||||
|
JOIN res_partner p ON (t.partner_id = p.id)
|
||||||
|
WHERE substring(p.%(mail_field)s, '([^ ,;<@]+@[^> ,;]+)') IS NOT NULL
|
||||||
|
"""
|
||||||
|
else:
|
||||||
|
raise UserError(_("Unsupported mass mailing model %s") % self.mailing_model_id.name)
|
||||||
|
|
||||||
if self.mass_mailing_campaign_id.unique_ab_testing:
|
if self.mass_mailing_campaign_id.unique_ab_testing:
|
||||||
query +="""
|
query +="""
|
||||||
AND s.mass_mailing_campaign_id = %%(mailing_campaign_id)s;
|
AND s.mass_mailing_campaign_id = %%(mailing_campaign_id)s;
|
||||||
|
|||||||
Reference in New Issue
Block a user