summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorMartin Trigaux <mat@odoo.com>2019-01-15 10:45:01 +0000
committerMartin Trigaux <mat@odoo.com>2019-01-30 10:26:51 +0000
commit83b37a800449dda8caa9be62fd5c6c4665ddb9c2 (patch)
tree619ce0f8ffcdee5d1b9689b746c6875f2167fc6f /addons
parent0edd3ea5b4367de18bfd11332075f1cb0a71ff2c (diff)
[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
Diffstat (limited to 'addons')
-rw-r--r--addons/mass_mailing/i18n/mass_mailing.pot10
-rw-r--r--addons/mass_mailing/models/mass_mailing.py31
2 files changed, 30 insertions, 11 deletions
diff --git a/addons/mass_mailing/i18n/mass_mailing.pot b/addons/mass_mailing/i18n/mass_mailing.pot
index 6d166998f08..2d62ee6174e 100644
--- a/addons/mass_mailing/i18n/mass_mailing.pot
+++ b/addons/mass_mailing/i18n/mass_mailing.pot
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-01-09 10:32+0000\n"
-"PO-Revision-Date: 2019-01-09 10:32+0000\n"
+"POT-Creation-Date: 2019-01-15 10:48+0000\n"
+"PO-Revision-Date: 2019-01-15 10:48+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -2159,6 +2159,12 @@ msgid "Unsubscription Date"
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
#. openerp-web
#: code:addons/mass_mailing/static/src/xml/mass_mailing.xml:17
#, python-format
diff --git a/addons/mass_mailing/models/mass_mailing.py b/addons/mass_mailing/models/mass_mailing.py
index d93aa998dc2..22aefea4cc7 100644
--- a/addons/mass_mailing/models/mass_mailing.py
+++ b/addons/mass_mailing/models/mass_mailing.py
@@ -798,15 +798,28 @@ class MassMailing(models.Model):
"""Returns a set of emails already targeted by current mailing/campaign (no duplicates)"""
self.ensure_one()
target = self.env[self.mailing_model_real]
- mail_field = 'email' if 'email' in target._fields else 'email_from'
- # avoid loading a large number of records in memory
- # + use a basic heuristic for extracting emails
- query = """
- SELECT lower(substring(t.%(mail_field)s, '([^ ,;<@]+@[^> ,;]+)'))
- FROM mail_mail_statistics s
- JOIN %(target)s t ON (s.res_id = t.id)
- WHERE substring(t.%(mail_field)s, '([^ ,;<@]+@[^> ,;]+)') IS NOT NULL
- """
+ if set(['email', 'email_from']) & set(target._fields):
+ mail_field = 'email' if 'email' in target._fields else 'email_from'
+ # avoid loading a large number of records in memory
+ # + use a basic heuristic for extracting emails
+ query = """
+ SELECT lower(substring(t.%(mail_field)s, '([^ ,;<@]+@[^> ,;]+)'))
+ FROM mail_mail_statistics s
+ 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:
query +="""
AND s.mass_mailing_campaign_id = %%(mailing_campaign_id)s;