diff --git a/addons/im_livechat/models/im_livechat_channel.py b/addons/im_livechat/models/im_livechat_channel.py index 128a3de7220..68e1bf54fd9 100644 --- a/addons/im_livechat/models/im_livechat_channel.py +++ b/addons/im_livechat/models/im_livechat_channel.py @@ -173,6 +173,8 @@ class ImLivechatChannel(models.Model): 'public': 'public', 'email_send': False, }) + # minimize channel on operator's side + mail_channel._minimize([operator_partner_id]) return mail_channel.sudo().with_context(im_livechat_operator_partner_id=operator_partner_id).channel_info()[0] @api.model diff --git a/addons/mail/models/mail_channel.py b/addons/mail/models/mail_channel.py index 90761db60cc..2b3332b42aa 100644 --- a/addons/mail/models/mail_channel.py +++ b/addons/mail/models/mail_channel.py @@ -140,6 +140,16 @@ class Channel(models.Model): for mail_channel in self: mail_channel.write({'channel_partner_ids': [(4, pid) for pid in mail_channel.mapped('group_ids').mapped('users').mapped('partner_id').ids]}) + @api.multi + def _minimize(self, partner_ids): + self.ensure_one() + domain = [('channel_id', '=', self.id), ('partner_id', 'in', tuple(partner_ids))] + channel_partners = self.env['mail.channel.partner'].search(domain) + channel_partners.write({ + 'is_minimized': True, + 'fold_state': 'open', + }) + @api.multi def action_follow(self): self.ensure_one() @@ -317,8 +327,8 @@ class Channel(models.Model): :rtype : dict """ if partners_to: - partners_to.append(self.env.user.partner_id.id) - # determine type according to the number of partner in the channel + partners = partners_to + [self.env.user.partner_id.id] + # determine type according to the number of partners in the channel self.env.cr.execute(""" SELECT P.channel_id as channel_id FROM mail_channel C, mail_channel_partner P @@ -328,7 +338,7 @@ class Channel(models.Model): AND channel_type LIKE 'chat' GROUP BY P.channel_id HAVING COUNT(P.partner_id) = %s - """, (tuple(partners_to), len(partners_to),)) + """, (tuple(partners), len(partners),)) result = self.env.cr.dictfetchall() if result: # get the existing channel between the given partners @@ -339,14 +349,16 @@ class Channel(models.Model): else: # create a new one channel = self.create({ - 'channel_partner_ids': [(4, partner_id) for partner_id in partners_to], + 'channel_partner_ids': [(4, partner_id) for partner_id in partners], 'public': 'private', 'channel_type': 'chat', 'email_send': False, - 'name': ', '.join(self.env['res.partner'].sudo().browse(partners_to).mapped('name')), + 'name': ', '.join(self.env['res.partner'].sudo().browse(partners).mapped('name')), }) - # broadcast the channel header to the other partner (not me) - channel._broadcast(partners_to) + # minimize the DM on other partners' side + channel._minimize(partners_to) + # broadcast the channel header + channel._broadcast(partners) return channel.channel_info()[0] return False