summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Bohy <aab@odoo.com>2015-11-19 11:14:23 +0100
committerAaron Bohy <aab@odoo.com>2015-11-20 15:48:03 +0100
commita8239cd2ae300f94ea0efa39d52addac6574b992 (patch)
tree69eb66f714d86ff310be66eaff0123dd4d913fbc
parentc2dfea5cc9a7f860d513809cb82cfe26e639de7c (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.py2
-rw-r--r--addons/mail/models/mail_channel.py26
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