[FIX] im_chat : fix the im_search method

This commit is contained in:
Jérome Maes 2014-08-27 10:42:56 +02:00
parent 34c5a5cf9c
commit d0315f1b5c
1 changed files with 13 additions and 16 deletions

View File

@ -306,22 +306,19 @@ class res_users(osv.Model):
}
def im_search(self, cr, uid, name, limit, context=None):
""" search users with a name and return its id, name and im_status """
group_user_id = self.pool.get("ir.model.data").get_object_reference(cr, uid, 'base', 'group_user')[1]
user_ids = self.name_search(cr, uid, name, [('id','!=', uid), ('groups_id', 'in', [group_user_id])], limit=limit, context=context)
domain = [('user_id', 'in', [i[0] for i in user_ids])]
ids = self.pool['im_chat.presence'].search(cr, uid, domain, order="last_poll desc", context=context)
presences = self.pool['im_chat.presence'].read(cr, uid, ids, ['user_id','status'], context=context)
res = []
for user_id in user_ids:
user = {
'id' : user_id[0],
'name' : user_id[1]
}
tmp = filter(lambda p: p['user_id'][0] == user_id[0], presences)
user['im_status'] = len(tmp) > 0 and tmp[0]['status'] or 'offline'
res.append(user)
return res
group_employee = self.pool['ir.model.data'].get_object_reference(cr, uid, 'base', 'group_user')[1]
found_presence_ids = self.pool["im_chat.presence"].search(cr, uid, [["user_id.name", "ilike", name], ["user_id.id", "<>", uid], ["status", "!=", "offline"], ["user_id.groups_id", "in", [group_employee]]],
limit=limit, context=context)
if len(found_presence_ids) < limit:
found_presence_ids += self.pool["im_chat.presence"].search(cr, uid, [["user_id.name", "ilike", name], ["user_id.id", "<>", uid], ["status", "!=", "offline"], ["id", "not in", found_presence_ids]],
limit=limit, context=context)
found_user_ids = [p.user_id.id for p in self.pool["im_chat.presence"].browse(cr, uid, found_presence_ids, context=context)]
if len(found_user_ids) < limit:
found_user_ids += self.search(cr, uid, [["name", "ilike", name], ["id", "<>", uid], ["id", "not in", found_user_ids]],
limit=limit-len(found_user_ids), context=context)
users = self.read(cr,openerp.SUPERUSER_ID, found_user_ids, ["name", "id", "im_status"], context=context)
users.sort(key=lambda obj: found_user_ids.index(obj['id']))
return users
#----------------------------------------------------------
# Controllers