← Back to team overview

openerp-dev-web team mailing list archive

lp:~openerp-dev/openobject-server/6.0-bug-719406-empty-record-rules-vmt into lp:openobject-server/6.0

 

Vo Minh Thu (OpenERP) has proposed merging lp:~openerp-dev/openobject-server/6.0-bug-719406-empty-record-rules-vmt into lp:openobject-server/6.0.

Requested reviews:
  OpenERP Core Team (openerp)
Related bugs:
  #719406 Record rules with domain blank or [] result in application error
  https://bugs.launchpad.net/bugs/719406

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-server/6.0-bug-719406-empty-record-rules-vmt/+merge/51522
-- 
https://code.launchpad.net/~openerp-dev/openobject-server/6.0-bug-719406-empty-record-rules-vmt/+merge/51522
Your team OpenERP R&D Team is subscribed to branch lp:~openerp-dev/openobject-server/6.0-bug-719406-empty-record-rules-vmt.
=== modified file 'bin/addons/base/ir/ir_rule.py'
--- bin/addons/base/ir/ir_rule.py	2010-12-10 22:42:58 +0000
+++ bin/addons/base/ir/ir_rule.py	2011-02-28 12:06:47 +0000
@@ -34,9 +34,12 @@
     def _domain_force_get(self, cr, uid, ids, field_name, arg, context={}):
         res = {}
         for rule in self.browse(cr, uid, ids, context):
-            eval_user_data = {'user': self.pool.get('res.users').browse(cr, 1, uid),
-                              'time':time}
-            res[rule.id] = eval(rule.domain_force, eval_user_data)
+            if rule.domain_force:
+                eval_user_data = {'user': self.pool.get('res.users').browse(cr, 1, uid),
+                                  'time':time}
+                res[rule.id] = eval(rule.domain_force, eval_user_data)
+            else:
+                res[rule.id] = []
         return res
 
     def _get_value(self, cr, uid, ids, field_name, arg, context={}):
@@ -81,10 +84,15 @@
     ]
 
     def domain_create(self, cr, uid, rule_ids):
-        dom = ['&'] * (len(rule_ids)-1)
+        count = 0
+        dom = []
         for rule in self.browse(cr, uid, rule_ids):
-            dom += rule.domain
-        return dom
+            if rule.domain:
+                dom += rule.domain
+                count += 1
+        if count:
+            return ['&'] * (count-1) + dom
+        return []
 
     @tools.cache()
     def _compute_domain(self, cr, uid, model_name, mode="read"):
@@ -110,11 +118,18 @@
                     group_rule.setdefault(group.id, []).append(rule.id)
                 if not rule.groups:
                   global_rules.append(rule.id)
-            dom = self.domain_create(cr, uid, global_rules)
-            dom += ['|'] * (len(group_rule)-1)
+            global_domain = self.domain_create(cr, uid, global_rules)
+            count = 0
+            group_domains = []
             for value in group_rule.values():
-                dom += self.domain_create(cr, uid, value)
-            return dom
+                group_domain = self.domain_create(cr, uid, value)
+                if group_domain:
+                    group_domains += group_domain
+                    count += 1
+            if count and global_domain:
+                return ['&'] + global_domain + ['|'] * (count-1) + group_domains
+            if count:
+                return ['|'] * (count-1) + group_domains
         return []
 
     def clear_cache(self, cr, uid):


Follow ups