From 8c9fdafff570f5daedbdbc43b82423183ebd8165 Mon Sep 17 00:00:00 2001 From: niyasraphy Date: Fri, 21 Oct 2022 11:50:20 +0000 Subject: [PATCH] [FIX] mail: channel/partner create error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit closes odoo/odoo#106370 X-original-commit: e998b2c5d31ad0e601ed4d5e0439b999872627b8 Signed-off-by: Sébastien Theys (seb) --- addons/mail/models/mail_channel_member.py | 43 ++++++++++++----------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/addons/mail/models/mail_channel_member.py b/addons/mail/models/mail_channel_member.py index a97f2cd56a1..fd4e147b7bf 100644 --- a/addons/mail/models/mail_channel_member.py +++ b/addons/mail/models/mail_channel_member.py @@ -36,26 +36,29 @@ class ChannelMember(models.Model): @api.depends('channel_id.message_ids', 'seen_message_id') def _compute_message_unread(self): - self.env['mail.message'].flush_model() - self.flush_recordset(['channel_id', 'seen_message_id']) - self.env.cr.execute(""" - SELECT count(mail_message.id) AS count, - mail_channel_member.id - FROM mail_message - INNER JOIN mail_channel_member - ON mail_channel_member.channel_id = mail_message.res_id - WHERE mail_message.model = 'mail.channel' - AND mail_message.message_type NOT IN ('notification', 'user_notification') - AND ( - mail_message.id > mail_channel_member.seen_message_id - OR mail_channel_member.seen_message_id IS NULL - ) - AND mail_channel_member.id IN %(ids)s - GROUP BY mail_channel_member.id - """, {'ids': tuple(self.ids)}) - unread_counter_by_member = {res['id']: res['count'] for res in self.env.cr.dictfetchall()} - for member in self: - member.message_unread_counter = unread_counter_by_member.get(member.id) + if self.ids: + self.env['mail.message'].flush_model() + self.flush_recordset(['channel_id', 'seen_message_id']) + self.env.cr.execute(""" + SELECT count(mail_message.id) AS count, + mail_channel_member.id + FROM mail_message + INNER JOIN mail_channel_member + ON mail_channel_member.channel_id = mail_message.res_id + WHERE mail_message.model = 'mail.channel' + AND mail_message.message_type NOT IN ('notification', 'user_notification') + AND ( + mail_message.id > mail_channel_member.seen_message_id + OR mail_channel_member.seen_message_id IS NULL + ) + AND mail_channel_member.id IN %(ids)s + GROUP BY mail_channel_member.id + """, {'ids': tuple(self.ids)}) + unread_counter_by_member = {res['id']: res['count'] for res in self.env.cr.dictfetchall()} + for member in self: + member.message_unread_counter = unread_counter_by_member.get(member.id) + else: + self.message_unread_counter = 0 def name_get(self): return [(record.id, record.partner_id.name or record.guest_id.name) for record in self]