Added history

bzr revid: nicolas.vanhoren@openerp.com-20130213110810-qy95202kyma76fbw
This commit is contained in:
niv-openerp 2013-02-13 12:08:10 +01:00
parent 84c0f117c4
commit 719f67d2ca
7 changed files with 92 additions and 11 deletions

View File

@ -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),
}

View File

@ -119,6 +119,26 @@
</field>
</record>
<record model="ir.actions.act_window" id="action_history">
<field name="name">History</field>
<field name="res_model">im.message</field>
<field name="view_mode">list</field>
</record>
<menuitem name="History" parent="live_support" id="history" action="action_history" groups="group_live_support_manager"/>
<record id="im_message_form" model="ir.ui.view">
<field name="name">im.message.tree</field>
<field name="model">im.message</field>
<field name="arch" type="xml">
<tree string="History">
<field name="date"/>
<field name="support_member_id"/>
<field name="customer_id"/>
<field name="direction"/>
<field name="message"/>
</tree>
</field>
</record>
</data>
</openerp>

View File

@ -21,5 +21,16 @@
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<record id="message_rule_1" model="ir.rule">
<field name="name">Live Support Managers can read messages from live support</field>
<field name="model_id" ref="web_im.model_im_message"/>
<field name="groups" eval="[(6,0,[ref('live_support.group_live_support_manager')])]"/>
<field name="domain_force">["|", ('to_id.user', '=', None), ('from_id.user', '=', None)]</field>
<field name="perm_unlink" eval="0"/>
<field name="perm_write" eval="0"/>
<field name="perm_read" eval="1"/>
<field name="perm_create" eval="0"/>
</record>
</data>
</openerp>

View File

@ -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();

View File

@ -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

View File

@ -5,7 +5,7 @@
<field name="name">Can only read messages that you sent or messages sent to you</field>
<field name="model_id" ref="model_im_message"/>
<field name="groups" eval="[(6,0,[ref('base.group_user')])]"/>
<field name="domain_force">["|", ('to.user', '=', user.id), ('from.user', '=', user.id)]</field>
<field name="domain_force">["|", ('to_id.user', '=', user.id), ('from_id.user', '=', user.id)]</field>
<field name="perm_unlink" eval="0"/>
<field name="perm_write" eval="0"/>
<field name="perm_read" eval="1"/>

View File

@ -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();