[FIX] mail: computed fields with new records only
This commit is contained in:
@@ -176,44 +176,42 @@ class MailThread(models.AbstractModel):
|
||||
|
||||
@api.multi
|
||||
def _get_message_unread(self):
|
||||
res = dict((res_id, 0) for res_id in self.ids)
|
||||
partner_id = self.env.user.partner_id.id
|
||||
|
||||
# search for unread messages, directly in SQL to improve performances
|
||||
self._cr.execute(""" SELECT msg.res_id FROM mail_message msg
|
||||
RIGHT JOIN mail_message_mail_channel_rel rel
|
||||
ON rel.mail_message_id = msg.id
|
||||
RIGHT JOIN mail_channel_partner cp
|
||||
ON (cp.channel_id = rel.mail_channel_id AND cp.partner_id = %s AND
|
||||
(cp.seen_message_id IS NULL OR cp.seen_message_id < msg.id))
|
||||
WHERE msg.model = %s AND msg.res_id = ANY(%s) AND
|
||||
(msg.author_id IS NULL OR msg.author_id != %s) AND
|
||||
(msg.message_type != 'notification' OR msg.model != 'mail.channel')""",
|
||||
(partner_id, self._name, list(self.ids), partner_id,))
|
||||
for result in self._cr.fetchall():
|
||||
res[result[0]] += 1
|
||||
res = dict.fromkeys(self.ids, 0)
|
||||
if self.ids:
|
||||
# search for unread messages, directly in SQL to improve performances
|
||||
self._cr.execute(""" SELECT msg.res_id FROM mail_message msg
|
||||
RIGHT JOIN mail_message_mail_channel_rel rel
|
||||
ON rel.mail_message_id = msg.id
|
||||
RIGHT JOIN mail_channel_partner cp
|
||||
ON (cp.channel_id = rel.mail_channel_id AND cp.partner_id = %s AND
|
||||
(cp.seen_message_id IS NULL OR cp.seen_message_id < msg.id))
|
||||
WHERE msg.model = %s AND msg.res_id = ANY(%s) AND
|
||||
(msg.author_id IS NULL OR msg.author_id != %s) AND
|
||||
(msg.message_type != 'notification' OR msg.model != 'mail.channel')""",
|
||||
(partner_id, self._name, list(self.ids), partner_id,))
|
||||
for result in self._cr.fetchall():
|
||||
res[result[0]] += 1
|
||||
|
||||
for record in self:
|
||||
record.message_unread_counter = res.get(record.id, 0)
|
||||
record.message_unread_counter = res.get(record._origin.id, 0)
|
||||
record.message_unread = bool(record.message_unread_counter)
|
||||
|
||||
@api.multi
|
||||
def _get_message_needaction(self):
|
||||
res = dict((res_id, 0) for res_id in self.ids)
|
||||
if not res:
|
||||
return
|
||||
|
||||
# search for unread messages, directly in SQL to improve performances
|
||||
self._cr.execute(""" SELECT msg.res_id FROM mail_message msg
|
||||
RIGHT JOIN mail_message_res_partner_needaction_rel rel
|
||||
ON rel.mail_message_id = msg.id AND rel.res_partner_id = %s AND (rel.is_read = false OR rel.is_read IS NULL)
|
||||
WHERE msg.model = %s AND msg.res_id in %s""",
|
||||
(self.env.user.partner_id.id, self._name, tuple(self.ids),))
|
||||
for result in self._cr.fetchall():
|
||||
res[result[0]] += 1
|
||||
res = dict.fromkeys(self.ids, 0)
|
||||
if self.ids:
|
||||
# search for unread messages, directly in SQL to improve performances
|
||||
self._cr.execute(""" SELECT msg.res_id FROM mail_message msg
|
||||
RIGHT JOIN mail_message_res_partner_needaction_rel rel
|
||||
ON rel.mail_message_id = msg.id AND rel.res_partner_id = %s AND (rel.is_read = false OR rel.is_read IS NULL)
|
||||
WHERE msg.model = %s AND msg.res_id in %s""",
|
||||
(self.env.user.partner_id.id, self._name, tuple(self.ids),))
|
||||
for result in self._cr.fetchall():
|
||||
res[result[0]] += 1
|
||||
|
||||
for record in self:
|
||||
record.message_needaction_counter = res.get(record.id, 0)
|
||||
record.message_needaction_counter = res.get(record._origin.id, 0)
|
||||
record.message_needaction = bool(record.message_needaction_counter)
|
||||
|
||||
@api.model
|
||||
@@ -222,18 +220,18 @@ class MailThread(models.AbstractModel):
|
||||
|
||||
@api.multi
|
||||
def _compute_message_has_error(self):
|
||||
self._cr.execute(""" SELECT msg.res_id, COUNT(msg.res_id) FROM mail_message msg
|
||||
RIGHT JOIN mail_message_res_partner_needaction_rel rel
|
||||
ON rel.mail_message_id = msg.id AND rel.email_status in ('exception','bounce')
|
||||
WHERE msg.author_id = %s AND msg.model = %s AND msg.res_id in %s
|
||||
GROUP BY msg.res_id""",
|
||||
(self.env.user.partner_id.id, self._name, tuple(self.ids),))
|
||||
res = dict()
|
||||
for result in self._cr.fetchall():
|
||||
res[result[0]] = result[1]
|
||||
res = {}
|
||||
if self.ids:
|
||||
self._cr.execute(""" SELECT msg.res_id, COUNT(msg.res_id) FROM mail_message msg
|
||||
RIGHT JOIN mail_message_res_partner_needaction_rel rel
|
||||
ON rel.mail_message_id = msg.id AND rel.email_status in ('exception','bounce')
|
||||
WHERE msg.author_id = %s AND msg.model = %s AND msg.res_id in %s
|
||||
GROUP BY msg.res_id""",
|
||||
(self.env.user.partner_id.id, self._name, tuple(self.ids),))
|
||||
res.update(self._cr.fetchall())
|
||||
|
||||
for record in self:
|
||||
record.message_has_error_counter = res.get(record.id, 0)
|
||||
record.message_has_error_counter = res.get(record._origin.id, 0)
|
||||
record.message_has_error = bool(record.message_has_error_counter)
|
||||
|
||||
@api.model
|
||||
|
||||
Reference in New Issue
Block a user