diff options
| author | Aaron Bohy <aab@odoo.com> | 2015-11-19 11:14:23 +0100 |
|---|---|---|
| committer | Aaron Bohy <aab@odoo.com> | 2015-11-20 15:48:03 +0100 |
| commit | a8239cd2ae300f94ea0efa39d52addac6574b992 (patch) | |
| tree | 69eb66f714d86ff310be66eaff0123dd4d913fbc | |
| parent | c2dfea5cc9a7f860d513809cb82cfe26e639de7c (diff) | |
[FIX] im_livechat,mail: detach chat on the receiver side
This commit concerns DM and livechat channels. Those channels are now
automatically detached on the receiver side. This allows users to directly
reply to DM's or livechats without coming back to the client action.
Note that they aren't detached if the user previously manually closed the
channel's chat window.
| -rw-r--r-- | addons/im_livechat/models/im_livechat_channel.py | 2 | ||||
| -rw-r--r-- | addons/mail/models/mail_channel.py | 26 |
2 files changed, 21 insertions, 7 deletions
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 @@ -141,6 +141,16 @@ class Channel(models.Model): 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() channel_partner = self.mapped('channel_last_seen_partner_ids').filtered(lambda cp: cp.partner_id == self.env.user.partner_id) @@ -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 |
