summaryrefslogtreecommitdiff
path: root/addons/mail/models
diff options
context:
space:
mode:
Diffstat (limited to 'addons/mail/models')
-rw-r--r--addons/mail/models/mail_activity.py7
-rw-r--r--addons/mail/models/mail_channel.py2
-rw-r--r--addons/mail/models/mail_followers.py6
-rw-r--r--addons/mail/models/mail_mail.py14
-rw-r--r--addons/mail/models/mail_thread.py2
5 files changed, 16 insertions, 15 deletions
diff --git a/addons/mail/models/mail_activity.py b/addons/mail/models/mail_activity.py
index 4602fe1ff8e..d7829ae0a1a 100644
--- a/addons/mail/models/mail_activity.py
+++ b/addons/mail/models/mail_activity.py
@@ -422,8 +422,10 @@ class MailActivity(models.Model):
@api.model
def get_activity_data(self, res_model, domain):
- res = self.env[res_model].search(domain)
- activity_domain = [('res_id', 'in', res.ids), ('res_model', '=', res_model)]
+ activity_domain = [('res_model', '=', res_model)]
+ if domain:
+ res = self.env[res_model].search(domain)
+ activity_domain.append(('res_id', 'in', res.ids))
grouped_activities = self.env['mail.activity'].read_group(
activity_domain,
['res_id', 'activity_type_id', 'res_name:max(res_name)', 'ids:array_agg(id)', 'date_deadline:min(date_deadline)'],
@@ -443,7 +445,6 @@ class MailActivity(models.Model):
state = self._compute_state_from_date(group['date_deadline'], self.user_id.sudo().tz)
activity_data[res_id][activity_type_id] = {
'count': group['__count'],
- 'domain': group['__domain'],
'ids': group['ids'],
'state': state,
'o_closest_deadline': group['date_deadline'],
diff --git a/addons/mail/models/mail_channel.py b/addons/mail/models/mail_channel.py
index 497f32fe628..17d11c89401 100644
--- a/addons/mail/models/mail_channel.py
+++ b/addons/mail/models/mail_channel.py
@@ -340,7 +340,7 @@ class Channel(models.Model):
@api.multi
def _notify_email_recipients(self, message, recipient_ids):
# Excluded Blacklisted
- whitelist = self.env['res.partner'].sudo().search([('id', 'in', recipient_ids), ('is_blacklisted', '=', False)])
+ whitelist = self.env['res.partner'].sudo().search([('id', 'in', recipient_ids)]).filtered(lambda p: not p.is_blacklisted)
# real mailing list: multiple recipients (hidden by X-Forge-To)
if self.alias_domain and self.alias_name:
return {
diff --git a/addons/mail/models/mail_followers.py b/addons/mail/models/mail_followers.py
index ccb245e18d3..f4f16c2e9f0 100644
--- a/addons/mail/models/mail_followers.py
+++ b/addons/mail/models/mail_followers.py
@@ -114,14 +114,14 @@ SELECT partner.id as pid, NULL AS cid,
partner.active as active, partner.partner_share as pshare, NULL as ctype,
users.notification_type AS notif, array_agg(groups.id) AS groups
FROM res_partner partner
- LEFT JOIN res_users users ON users.partner_id = partner.id
+ LEFT JOIN res_users users ON users.partner_id = partner.id AND users.active
LEFT JOIN res_groups_users_rel groups_rel ON groups_rel.uid = users.id
LEFT JOIN res_groups groups ON groups.id = groups_rel.gid
WHERE EXISTS (
SELECT partner_id FROM sub_followers
WHERE sub_followers.channel_id IS NULL
AND sub_followers.partner_id = partner.id
- AND (sub_followers.internal <> TRUE OR partner.partner_share <> TRUE)
+ AND (coalesce(sub_followers.internal, false) <> TRUE OR coalesce(partner.partner_share, false) <> TRUE)
) %s
GROUP BY partner.id, users.notification_type
UNION
@@ -148,7 +148,7 @@ SELECT partner.id as pid, NULL AS cid,
partner.active as active, partner.partner_share as pshare, NULL as ctype,
users.notification_type AS notif, NULL AS groups
FROM res_partner partner
-LEFT JOIN res_users users ON users.partner_id = partner.id
+LEFT JOIN res_users users ON users.partner_id = partner.id AND users.active
WHERE partner.id IN %s"""
params.append(tuple(pids))
if cids:
diff --git a/addons/mail/models/mail_mail.py b/addons/mail/models/mail_mail.py
index aea14012767..6a50a198347 100644
--- a/addons/mail/models/mail_mail.py
+++ b/addons/mail/models/mail_mail.py
@@ -375,9 +375,6 @@ class MailMail(models.Model):
# /!\ can't use mail.state here, as mail.refresh() will cause an error
# see revid:odo@openerp.com-20120622152536-42b2s28lvdv3odyr in 6.1
mail._postprocess_sent_message(success_pids=success_pids, failure_type=failure_type)
- except UnicodeEncodeError as exc:
- _logger.exception('UnicodeEncodeError on text "%s" while processing mail ID %r.', exc.object, mail.id)
- raise MailDeliveryException(_("Mail Delivery Failed"), "Invalid text: %s" % exc.object)
except MemoryError:
# prevent catching transient MemoryErrors, bubble up to notify user or abort cron job
# instead of marking the mail as failed
@@ -398,10 +395,13 @@ class MailMail(models.Model):
mail.write({'state': 'exception', 'failure_reason': failure_reason})
mail._postprocess_sent_message(success_pids=success_pids, failure_reason=failure_reason, failure_type='UNKNOWN')
if raise_exception:
- if isinstance(e, AssertionError):
- # get the args of the original error, wrap into a value and throw a MailDeliveryException
- # that is an except_orm, with name and value as arguments
- value = '. '.join(e.args)
+ if isinstance(e, (AssertionError, UnicodeEncodeError)):
+ if isinstance(e, UnicodeEncodeError):
+ value = "Invalid text: %s" % e.object
+ else:
+ # get the args of the original error, wrap into a value and throw a MailDeliveryException
+ # that is an except_orm, with name and value as arguments
+ value = '. '.join(e.args)
raise MailDeliveryException(_("Mail Delivery Failed"), value)
raise
diff --git a/addons/mail/models/mail_thread.py b/addons/mail/models/mail_thread.py
index a6ad7be4ee5..a4feb61b3fb 100644
--- a/addons/mail/models/mail_thread.py
+++ b/addons/mail/models/mail_thread.py
@@ -1169,7 +1169,7 @@ class MailThread(models.AbstractModel):
final_recipient_data = tools.decode_message_header(dsn, 'Final-Recipient')
partner_address = final_recipient_data.split(';', 1)[1].strip()
if partner_address:
- partners = partners.sudo().search([('email', 'like', partner_address)])
+ partners = partners.sudo().search([('email', '=', partner_address)])
for partner in partners:
partner.message_receive_bounce(partner_address, partner, mail_id=bounced_mail_id)