Naresh(OpenERP) has proposed merging 
lp:~openerp-dev/openobject-client/trunk-ORing_in_filter-nch into 
lp:openobject-client.

Requested reviews:
  Xavier (Open ERP) (xmo)
  OpenERP sa GTK client R&D (openerp-dev-gtk)

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-client/trunk-ORing_in_filter-nch/+merge/76517

ORing between series of Filters i.e <filter1> '|' <filter2> 


Thanks
-- 
https://code.launchpad.net/~openerp-dev/openobject-client/trunk-ORing_in_filter-nch/+merge/76517
Your team OpenERP sa GTK client R&D is requested to review the proposed merge 
of lp:~openerp-dev/openobject-client/trunk-ORing_in_filter-nch into 
lp:openobject-client.
=== modified file 'bin/widget_search/filter.py'
--- bin/widget_search/filter.py	2011-07-27 12:55:13 +0000
+++ bin/widget_search/filter.py	2011-09-22 06:51:29 +0000
@@ -44,7 +44,7 @@
         self.butt.set_image_position(gtk.POS_TOP)
         self.butt.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.color_parse("grey"))
         self.butt.modify_bg(gtk.STATE_PRELIGHT, gtk.gdk.color_parse("light grey"))
-        help = attrs.get('help', False) or attrs.get('string', False)
+        help = attrs.get('help') or attrs.get('string')
         if help:
             self.butt.set_tooltip_markup(tools.to_xml(help))
         self.domain = attrs.get('domain', "[]")
@@ -55,17 +55,17 @@
         self.butt.connect('toggled', call[1])
         self.screen_context = call[0].context
         self.widget = self.butt
+        self.filter_group = False
 
     def _value_get(self):
         if not self.butt.get_active():
             ctx = tools.expr_eval(self.context, {'context':self.screen_context})
             group = ctx.get('group_by',False)
             if group:
-                return {'context': {'remove_group':True}, 'name':self.name}
+                return {'context': {'remove_group':True}}
             return {}
         return {'domain': tools.expr_eval(self.domain, {'context':self.screen_context}),
-                'context': tools.expr_eval(self.context, {'context':self.screen_context}),
-                'name':self.name }
+                'context': tools.expr_eval(self.context, {'context':self.screen_context})}
 
     def sig_exec(self, widget):
         pass

=== modified file 'bin/widget_search/form.py'
--- bin/widget_search/form.py	2011-09-16 08:48:53 +0000
+++ bin/widget_search/form.py	2011-09-22 06:51:29 +0000
@@ -64,8 +64,6 @@
             self.cont[-1] = (table, 1, y+1)
         if new_table:
             self.new(col=4)
-#           table= gtk.Table(1, 8)
-#        table.resize(y+1,self.col[-1])
 
     def wid_add(self, widget, colspan=1, name=None, expand=False, xoptions=False, ypadding=0, help=False, rowspan=1):
         self.count += 1
@@ -125,7 +123,6 @@
             for f in common_fields:
                 del all_fields[f]
             field_dict = all_fields
-
             self.fields.update(field_dict)
             self.name_lst1=[('field',(field_dict[x])) for x in field_dict]
         self.parent = parent
@@ -154,19 +151,19 @@
     def _psr_char(self, char):
         pass
 
-    def dummy_start(self,name,attrs):
-            flag=False
+    def dummy_start(self, name, attrs):
+            flag = False
             if name =='field' and 'name' in attrs:
-                    for i in range (0,len(self.name_lst)):
-                       if 'name' in self.name_lst[i][1]:
-                           if self.name_lst[i][1]['name']==attrs['name']:
-                               flag=True
-                               if 'select' in attrs:
-                                   self.name_lst[i]=(name,attrs)
-                    if not flag:
-                        self.name_lst.append((name,attrs))
+                for i in range (0, len(self.name_lst)):
+                    if 'name' in self.name_lst[i][1]:
+                        if self.name_lst[i][1]['name'] == attrs['name']:
+                            flag = True
+                            if 'select' in attrs:
+                                self.name_lst[i] = (name, attrs)
+                if not flag:
+                    self.name_lst.append((name, attrs))
             else:
-                self.name_lst.append((name,attrs))
+                self.name_lst.append((name, attrs))
 
     def parse_filter(self, xml_data, max_width, root_node, call=None):
         psr = expat.ParserCreate()
@@ -182,10 +179,10 @@
         attrs = tools.node_attributes(root_node)
         container.new()
         self.container = container
-
+        filter_group = False
         for node in root_node:
             attrs = tools.node_attributes(node)
-            if attrs.get('invisible', False):
+            if attrs.get('invisible'):
                 visval = eval(attrs['invisible'], {'context':call[0].context})
                 if visval:
                     continue
@@ -209,9 +206,10 @@
                 if node is not None and len(node):
                     mywidget = gtk.HBox(homogeneous=False, spacing=0)
                     mywidget.pack_start(widget_act.widget,expand=True,fill=True)
+                    child_filter_group = False
                     for node_child in node:
                         attrs_child = tools.node_attributes(node_child)
-                        if attrs_child.get('invisible', False):
+                        if attrs_child.get('invisible'):
                             visval = eval(attrs_child['invisible'], {'context':call[0].context})
                             if visval:
                                 continue
@@ -219,58 +217,66 @@
                             widget_child = widgets_type['filter'][0]('', self.parent, attrs_child, call)
                             mywidget.pack_start(widget_child.widget)
                             dict_widget[str(attrs['name']) + str(uuid.uuid1())] = (widget_child, mywidget, 1)
+                            if not child_filter_group:
+                                child_filter_group = uuid.uuid1()
+                            widget_child.filter_group = child_filter_group
+
                         elif node_child.tag == 'separator':
+                            child_filter_group = False
                             if attrs_child.get('orientation','vertical') == 'horizontal':
                                 sep = gtk.HSeparator()
                                 sep.set_size_request(30,5)
-                                mywidget.pack_start(sep,False,True,5)
+                                mywidget.pack_start(sep, False, True, 5)
                             else:
                                 sep = gtk.VSeparator()
                                 sep.set_size_request(3,40)
-                                mywidget.pack_start(sep,False,False,5)
-#                    mywidget.pack_start(widget_act.widget,expand=False,fill=False)
+                                mywidget.pack_start(sep, False, False, 5)
                 xoptions = gtk.SHRINK
-                wid = container.wid_add(mywidget, 1,label, int(self.fields[str(attrs['name'])].get('expand',0)),xoptions=xoptions)
+                wid = container.wid_add(mywidget, 1,label, int(self.fields[str(attrs['name'])].get('expand',0)), xoptions=xoptions)
                 dict_widget[str(attrs['name'])] = (widget_act, wid, 1)
 
             elif node.tag == 'filter':
                 name = str(attrs.get('string','filter'))
                 widget_act = filter.filter(name, self.parent, attrs, call)
-                help = attrs.get('help', False) or name
+                help = attrs.get('help', name)
                 wid = container.wid_add(widget_act.butt, xoptions=gtk.SHRINK, help=help)
                 dict_widget[name + str(uuid.uuid1())] = (widget_act, widget_act, 1)
+                if not filter_group:
+                    filter_group = uuid.uuid1()
+                widget_act.filter_group = filter_group 
 
             elif node.tag == 'separator':
+                filter_group = False
                 if attrs.get('orientation','vertical') == 'horizontal':
                     sep_box = gtk.VBox(homogeneous=False, spacing=0)
                     sep = gtk.HSeparator()
                     sep.set_size_request(30,5)
-                    sep_box.pack_start(gtk.Label(''),expand=False,fill=False)
-                    sep_box.pack_start(sep,False,True,5)
+                    sep_box.pack_start(gtk.Label(''), expand=False, fill=False)
+                    sep_box.pack_start(sep, False, True, 5)
                 else:
                     sep_box = gtk.HBox(homogeneous=False, spacing=0)
                     sep = gtk.VSeparator()
                     sep.set_size_request(3,45)
-                    sep_box.pack_start(sep,False,False,5)
-                wid = container.wid_add(sep_box,xoptions=gtk.SHRINK)
+                    sep_box.pack_start(sep, False, False, 5)
+                wid = container.wid_add(sep_box, xoptions=gtk.SHRINK)
                 wid.show()
             elif node.tag=='newline':
                 container.newline(node.getparent() is not None and node.getparent().tag == 'group')
 
             elif node.tag=='group':
-                if attrs.get('invisible', False):
+                if attrs.get('invisible'):
                     continue
-                if attrs.get('expand', False):
-                    attrs['expand'] = tools.expr_eval(attrs.get('expand',False),{'context':call[0].context})
-                    frame = gtk.Expander(attrs.get('string', None))
+                if attrs.get('expand'):
+                    attrs['expand'] = tools.expr_eval(attrs.get('expand'),{'context':call[0].context})
+                    frame = gtk.Expander(attrs.get('string'))
                     frame.set_expanded(bool(attrs['expand']))
                 else:
-                    frame = gtk.Frame(attrs.get('string', None))
-                    if not attrs.get('string', None):
+                    frame = gtk.Frame(attrs.get('string'))
+                    if not attrs.get('string'):
                         frame.set_shadow_type(gtk.SHADOW_NONE)
                 frame.attrs = attrs
                 frame.set_border_width(0)
-                container.wid_add(frame, colspan=1, expand=int(attrs.get('expand',0)), ypadding=0)
+                container.wid_add(frame, colspan=1, expand=int(attrs.get('expand', 0)), ypadding=0)
                 container.new()
                 widget, widgets = self.parse_filter(xml_data, max_width, node, call= call)
                 dict_widget.update(widgets)
@@ -283,7 +289,7 @@
                     frame.add(tb)
                 else:
                     frame.add(widget)
-                if not attrs.get('string', None):
+                if not attrs.get('string'):
                     container.get().set_border_width(0)
                 container.pop()
         self.widget = container.pop()
@@ -436,26 +442,37 @@
     def _value_get(self):
         domain = []
         context = {}
-
+        filter_group = {}
+        
         for x in self.widgets.values() + self.custom_widgets.values():
             filters = x[0].value
-            domain += filters.get('domain', [])
+            dom = filters.get('domain', [])
+            if isinstance(x[0], filter.filter) and dom:
+                filter_group.setdefault(x[0].filter_group, [])
+                if dom in filter_group[x[0].filter_group]:
+                    continue
+                filter_group[x[0].filter_group].append(dom)
+            else:                
+                domain += dom
             ctx = filters.get('context', {})
-            gp_name = filters.pop('name', False)
             ctx_groupby = ctx.pop('group_by', False)
             ctx_remove_group = ctx.pop('remove_group', False)
             if ctx_groupby:
                 if not isinstance(ctx_groupby, list):
                     ctx_groupby = [ctx_groupby]
-                self.groupby.setdefault(gp_name, [])
-                if gp_name not in self.gp_filters:
-                    self.gp_filters.append(gp_name)
-                self.groupby[gp_name] = ctx_groupby
+                self.groupby.setdefault(x[0].name, [])
+                if x[0].name not in self.gp_filters:
+                    self.gp_filters.append(x[0].name)
+                self.groupby[x[0].name] = ctx_groupby
             elif ctx_remove_group:
-                if gp_name in self.gp_filters:
-                    self.gp_filters.remove(gp_name)
+                if x[0].name in self.gp_filters:
+                    self.gp_filters.remove(x[0].name)
             context.update(ctx)
         ordered_gp = []
+        for group, domains in filter_group.iteritems():
+            domain += ( ['|'] * ( len(domains) - 1) )
+            for dom in domains:
+                domain += dom
         for val in self.gp_filters:
             ordered_gp += self.groupby[val]
         if ordered_gp:
@@ -466,9 +483,7 @@
         for (ref, value) in self.__dict__.items():
             if isinstance(value, gtk.Object) and not isinstance(value, gtk.Window):
                 value.destroy()
-
         self.parser.destroy()
-
         del self.widgets
         del self.focusable
         del self.parent

_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help   : https://help.launchpad.net/ListHelp

Reply via email to