diff --git a/addons/live_support/live_support.py b/addons/live_support/live_support.py
index eb3adf4f7e7..dc649b766eb 100644
--- a/addons/live_support/live_support.py
+++ b/addons/live_support/live_support.py
@@ -201,3 +201,50 @@ class im_user(osv.osv):
_columns = {
'support_channel_ids': fields.many2many('live_support.channel', 'live_support_channel_im_user', 'user_id', 'channel_id', string="Support Channels"),
}
+
+
+class im_message(osv.osv):
+ _inherit = 'im.message'
+
+ def _support_member(self, cr, uid, ids, name, arg, context=None):
+ res = {}
+ for record in self.browse(cr, uid, ids, context=context):
+ res[record.id] = False
+ if record.to_id.user and record.from_id.user:
+ continue
+ elif record.to_id.user:
+ res[record.id] = record.to_id.user.id
+ elif record.from_id.user:
+ res[record.id] = record.from_id.user.id
+ return res
+
+ def _customer(self, cr, uid, ids, name, arg, context=None):
+ res = {}
+ for record in self.browse(cr, uid, ids, context=context):
+ res[record.id] = False
+ if record.to_id.uuid and record.from_id.uuid:
+ continue
+ elif record.to_id.uuid:
+ res[record.id] = record.to_id.id
+ elif record.from_id.uuid:
+ res[record.id] = record.from_id.id
+ return res
+
+ def _direction(self, cr, uid, ids, name, arg, context=None):
+ res = {}
+ for record in self.browse(cr, uid, ids, context=context):
+ res[record.id] = False
+ if not not record.to_id.user and not not record.from_id.user:
+ continue
+ elif not not record.to_id.user:
+ res[record.id] = "c2s"
+ elif not not record.from_id.user:
+ res[record.id] = "s2c"
+ return res
+
+ _columns = {
+ 'support_member_id': fields.function(_support_member, type='many2one', relation='res.users', string='Support Member', store=True, select=True),
+ 'customer_id': fields.function(_customer, type='many2one', relation='im.user', string='Customer', store=True, select=True),
+ 'direction': fields.function(_direction, type="selection", selection=[("s2c", "Support Member to Customer"), ("c2s", "Customer to Support Member")],
+ string='Direction', store=False),
+ }
diff --git a/addons/live_support/live_support_view.xml b/addons/live_support/live_support_view.xml
index 5f3db09f5c5..d9276b18dfa 100644
--- a/addons/live_support/live_support_view.xml
+++ b/addons/live_support/live_support_view.xml
@@ -119,6 +119,26 @@
+
+ History
+ im.message
+ list
+
+
+
+
+ im.message.tree
+ im.message
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/live_support/security/live_support_security.xml b/addons/live_support/security/live_support_security.xml
index b42c35b6163..7e5bc895010 100644
--- a/addons/live_support/security/live_support_security.xml
+++ b/addons/live_support/security/live_support_security.xml
@@ -21,5 +21,16 @@
+
+ Live Support Managers can read messages from live support
+
+
+ ["|", ('to_id.user', '=', None), ('from_id.user', '=', None)]
+
+
+
+
+
+
diff --git a/addons/live_support/static/ext/static/js/livesupport.js b/addons/live_support/static/ext/static/js/livesupport.js
index 93aef638ee9..d5afdca8189 100644
--- a/addons/live_support/static/ext/static/js/livesupport.js
+++ b/addons/live_support/static/ext/static/js/livesupport.js
@@ -249,10 +249,10 @@ define(["nova", "underscore", "oeclient", "require", "jquery",
self.get_user(el.id).set(el);
});
self.last = result.last;
- var user_ids = _.pluck(_.pluck(result.res, "from"), 0);
+ var user_ids = _.pluck(_.pluck(result.res, "from_id"), 0);
self.ensure_users(user_ids).then(function() {
_.each(result.res, function(mes) {
- var user = self.get_user(mes.from[0]);
+ var user = self.get_user(mes.from_id[0]);
self.received_message(mes, user);
});
self.poll();
diff --git a/addons/web_im/im.py b/addons/web_im/im.py
index 5253d350aef..97420b26871 100644
--- a/addons/web_im/im.py
+++ b/addons/web_im/im.py
@@ -202,11 +202,14 @@ def assert_uuid(uuid):
class im_message(osv.osv):
_name = 'im.message'
+
+ _order = "date"
+
_columns = {
'message': fields.char(string="Message", size=200, required=True),
- 'from': fields.many2one("im.user", "From", required= True, ondelete='cascade'),
- 'to': fields.many2one("im.user", "To", required=True, select=True, ondelete='cascade'),
- 'date': fields.datetime("Date", required=True),
+ 'from_id': fields.many2one("im.user", "From", required= True, ondelete='cascade'),
+ 'to_id': fields.many2one("im.user", "To", required=True, select=True, ondelete='cascade'),
+ 'date': fields.datetime("Date", required=True, select=True),
}
_defaults = {
@@ -228,8 +231,8 @@ class im_message(osv.osv):
last = c_user.im_last_received or -1
# how fun it is to always need to reorder results from read
- mess_ids = self.search(cr, openerp.SUPERUSER_ID, [['id', '>', last], ['to', '=', my_id]], order="id", context=context)
- mess = self.read(cr, openerp.SUPERUSER_ID, mess_ids, ["id", "message", "from", "date"], context=context)
+ mess_ids = self.search(cr, openerp.SUPERUSER_ID, [['id', '>', last], ['to_id', '=', my_id]], order="id", context=context)
+ mess = self.read(cr, openerp.SUPERUSER_ID, mess_ids, ["id", "message", "from_id", "date"], context=context)
index = {}
for i in xrange(len(mess)):
index[mess[i]["id"]] = mess[i]
@@ -245,7 +248,7 @@ class im_message(osv.osv):
def post(self, cr, uid, message, to_user_id, uuid=None, context=None):
assert_uuid(uuid)
my_id = self.pool.get('im.user').get_by_user_id(cr, uid, uuid or uid)["id"]
- self.create(cr, openerp.SUPERUSER_ID, {"message": message, 'from': my_id, 'to': to_user_id}, context=context)
+ self.create(cr, openerp.SUPERUSER_ID, {"message": message, 'from_id': my_id, 'to_id': to_user_id}, context=context)
notify_channel(cr, "im_channel", {'type': 'message', 'receiver': to_user_id})
return False
diff --git a/addons/web_im/security/web_im_security.xml b/addons/web_im/security/web_im_security.xml
index a5f71eee58c..10297ac0669 100644
--- a/addons/web_im/security/web_im_security.xml
+++ b/addons/web_im/security/web_im_security.xml
@@ -5,7 +5,7 @@
Can only read messages that you sent or messages sent to you
- ["|", ('to.user', '=', user.id), ('from.user', '=', user.id)]
+ ["|", ('to_id.user', '=', user.id), ('from_id.user', '=', user.id)]
diff --git a/addons/web_im/static/src/js/im.js b/addons/web_im/static/src/js/im.js
index 053efc341d7..a2ad2536ec6 100644
--- a/addons/web_im/static/src/js/im.js
+++ b/addons/web_im/static/src/js/im.js
@@ -267,10 +267,10 @@ openerp.web_im = function(instance) {
self.get_user(el.id).set(el);
});
self.last = result.last;
- var user_ids = _.pluck(_.pluck(result.res, "from"), 0);
+ var user_ids = _.pluck(_.pluck(result.res, "from_id"), 0);
self.ensure_users(user_ids).then(function() {
_.each(result.res, function(mes) {
- var user = self.get_user(mes.from[0]);
+ var user = self.get_user(mes.from_id[0]);
self.received_message(mes, user);
});
self.poll();