From be148c7e1f80c66130adf7fbd996ebc0012389ab Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Mon, 6 Jan 2014 16:41:34 +0100 Subject: [PATCH] [FIX] im: add fnct search to im_status to search connected users search display connected users before discconnected users bzr revid: dle@openerp.com-20140106154134-28ncdioyoca9102c --- addons/im/im.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/addons/im/im.py b/addons/im/im.py index f91017e1712..729f73da658 100644 --- a/addons/im/im.py +++ b/addons/im/im.py @@ -26,7 +26,7 @@ import openerp.addons.web.http as http from openerp.addons.web.http import request from openerp.tools.misc import DEFAULT_SERVER_DATETIME_FORMAT import datetime -from openerp.osv import osv, fields +from openerp.osv import osv, fields, expression import time import logging import json @@ -249,10 +249,24 @@ class im_user(osv.osv): res[obj["id"]] = obj["im_last_status"] and (last_update + delta) > current return res + def _status_search(self, cr, uid, obj, name, domain, context=None): + current = datetime.datetime.now() + delta = datetime.timedelta(0, DISCONNECTION_TIMER) + field, operator, value = domain[0] + if operator in expression.NEGATIVE_TERM_OPERATORS: + value = not value + if value: + return ['&', ('im_last_status', '=', True), ('im_last_status_update', '>', (current - delta).strftime(DEFAULT_SERVER_DATETIME_FORMAT))] + else: + return ['|', ('im_last_status', '=', False), ('im_last_status_update', '<=', (current - delta).strftime(DEFAULT_SERVER_DATETIME_FORMAT))] + def search_users(self, cr, uid, text_search, fields, limit, context=None): my_id = self.get_my_id(cr, uid, None, context) - found = self.search(cr, uid, [["name", "ilike", text_search], ["id", "<>", my_id], ["uuid", "=", False]], + found = self.search(cr, uid, [["name", "ilike", text_search], ["id", "<>", my_id], ["uuid", "=", False], ["im_status", "=", True]], order="name asc", limit=limit, context=context) + if len(found) < limit: + found.extend(self.search(cr, uid, [["name", "ilike", text_search], ["id", "<>", my_id], ["uuid", "=", False], ["im_status", "=", False]], + order="name asc", limit=limit-len(found), context=context)) return self.read(cr, uid, found, fields, context=context) def im_connect(self, cr, uid, uuid=None, context=None): @@ -303,12 +317,12 @@ class im_user(osv.osv): 'name': fields.function(_get_name, type='char', size=200, string="Name", store=True, readonly=True), 'assigned_name': fields.char(string="Assigned Name", size=200, required=False), 'image': fields.related('user_id', 'image_small', type='binary', string="Image", readonly=True), - 'user_id': fields.many2one("res.users", string="User", select=True, ondelete='cascade'), + 'user_id': fields.many2one("res.users", string="User", select=True, ondelete='cascade', oldname='user'), 'uuid': fields.char(string="UUID", size=50, select=True), 'im_last_received': fields.integer(string="Instant Messaging Last Received Message"), 'im_last_status': fields.boolean(strint="Instant Messaging Last Status"), 'im_last_status_update': fields.datetime(string="Instant Messaging Last Status Update"), - 'im_status': fields.function(_im_status, string="Instant Messaging Status", type='boolean'), + 'im_status': fields.function(_im_status, string="Instant Messaging Status", type='boolean', fnct_search=_status_search), } _defaults = {