~openerp-dev/openobject-server/7.0-mail_issues-adh-1168376

« back to all changes in this revision

Viewing changes to openerp/addons/base/res/res_users.py

  • Committer: Denis Ledoux
  • Date: 2014-04-16 11:22:39 UTC
  • Revision ID: dle@openerp.com-20140416112239-vl20z3xzgp61vygu
[FIX] base: search groups by full name not working with operators 'in' nor with operand boolean

Show diffs side-by-side

added added

removed removed

Lines of Context:
28
28
from openerp import SUPERUSER_ID
29
29
from openerp import pooler, tools
30
30
import openerp.exceptions
31
 
from openerp.osv import fields,osv
 
31
from openerp.osv import fields,osv, expression
32
32
from openerp.osv.orm import browse_record
33
33
from openerp.tools.translate import _
34
34
 
51
51
    def _search_group(self, cr, uid, obj, name, args, context=None):
52
52
        operand = args[0][2]
53
53
        operator = args[0][1]
54
 
        values = operand.split('/')
55
 
        group_name = values[0]
56
 
        where = [('name', operator, group_name)]
57
 
        if len(values) > 1:
58
 
            application_name = values[0]
59
 
            group_name = values[1]
60
 
            where = ['|',('category_id.name', operator, application_name)] + where
 
54
        lst = True
 
55
        if isinstance(operand, bool):
 
56
            domains = [[('name', operator, operand)], [('category_id.name', operator, operand)]]
 
57
            if operator in expression.NEGATIVE_TERM_OPERATORS == (not operand):
 
58
                return expression.AND(domains)
 
59
            else:
 
60
                return expression.OR(domains)
 
61
        if isinstance(operand, basestring):
 
62
            lst = False
 
63
            operand = [operand]
 
64
        where = []
 
65
        for group in operand:
 
66
            values = filter(bool, group.split('/'))
 
67
            group_name = values.pop().strip()
 
68
            category_name = values and '/'.join(values).strip() or group_name
 
69
            group_domain = [('name', operator, lst and [group_name] or group_name)]
 
70
            category_domain = [('category_id.name', operator, lst and [category_name] or category_name)]
 
71
            if operator in expression.NEGATIVE_TERM_OPERATORS and not values:
 
72
                category_domain = expression.OR([category_domain, [('category_id', '=', False)]])
 
73
            if (operator in expression.NEGATIVE_TERM_OPERATORS) == (not values):
 
74
                sub_where = expression.AND([group_domain, category_domain])
 
75
            else:
 
76
                sub_where = expression.OR([group_domain, category_domain])
 
77
            if operator in expression.NEGATIVE_TERM_OPERATORS:
 
78
                where = expression.AND([where, sub_where])
 
79
            else:
 
80
                where = expression.OR([where, sub_where])
61
81
        return where
62
82
 
63
83
    _columns = {