summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Kersten <jke@odoo.com>2019-03-20 09:41:55 +0000
committerJeremy Kersten <jke@odoo.com>2019-03-20 13:04:00 +0000
commit9854e0e908a6e960ff2445b94ffcad3489be4dfd (patch)
treec809271adcf0bf1835ed8bbeacda5cf1323e9480
parent7e6577398afb4df9f75a99cff5becb5a3cdd2182 (diff)
[FIX] mass_mailing: support partner_id field
Manual cherrypick of 83b37a8 sale.order but also event.track need to use partner_id as email field Closes #31954 closes odoo/odoo#31967 Signed-off-by: Jérémy Kersten (jke) <jke@openerp.com>
-rw-r--r--addons/mass_mailing/i18n/mass_mailing.pot6
-rw-r--r--addons/mass_mailing/models/mass_mailing.py31
2 files changed, 28 insertions, 9 deletions
diff --git a/addons/mass_mailing/i18n/mass_mailing.pot b/addons/mass_mailing/i18n/mass_mailing.pot
index 33d8f3f3928..60a4c414166 100644
--- a/addons/mass_mailing/i18n/mass_mailing.pot
+++ b/addons/mass_mailing/i18n/mass_mailing.pot
@@ -1687,6 +1687,12 @@ msgid "Unsubscription Date"
msgstr ""
#. module: mass_mailing
+#: code:addons/mass_mailing/models/mass_mailing.py:639
+#, python-format
+msgid "Unsupported mass mailing model %s"
+msgstr ""
+
+#. module: mass_mailing
#: model:ir.ui.view,arch_db:mass_mailing.s_mail_block_paragraph
msgid "Usability improvements made on Odoo will automatically apply to all\n"
" of our fully integrated apps."
diff --git a/addons/mass_mailing/models/mass_mailing.py b/addons/mass_mailing/models/mass_mailing.py
index 3c1fa6dcc46..9000262b057 100644
--- a/addons/mass_mailing/models/mass_mailing.py
+++ b/addons/mass_mailing/models/mass_mailing.py
@@ -616,15 +616,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(%(mail_field)s, '([^ ,;<@]+@[^> ,;]+)'))
- FROM mail_mail_statistics s
- JOIN %(target)s t ON (s.res_id = t.id)
- WHERE substring(%(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(%(mail_field)s, '([^ ,;<@]+@[^> ,;]+)'))
+ FROM mail_mail_statistics s
+ JOIN %(target)s t ON (s.res_id = t.id)
+ WHERE substring(%(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;