← Back to team overview

openerp-dev-web team mailing list archive

[Merge] lp:~openerp-dev/openobject-client/ir_filter_rga into lp:openobject-client

 

RGA(OpenERP) has proposed merging lp:~openerp-dev/openobject-client/ir_filter_rga into lp:openobject-client.

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


hello,
In order to make ir.filter more user-friendly the filter name should be specified already in the dialog box if the user tries to save a (active)filter and another filter is already active/selected
-- 
https://code.launchpad.net/~openerp-dev/openobject-client/ir_filter_rga/+merge/38220
Your team OpenERP R&D Team is subscribed to branch lp:~openerp-dev/openobject-client/ir_filter_rga.
=== modified file 'bin/widget/screen/screen.py'
--- bin/widget/screen/screen.py	2010-10-12 06:12:38 +0000
+++ bin/widget/screen/screen.py	2010-10-12 13:24:45 +0000
@@ -309,6 +309,9 @@
 
     def execute_action(self, combo):
         flag = combo.get_active_text()
+        combo_model = combo.get_model()
+        active_id = combo.get_active()
+        action_name = active_id != -1 and flag not in ['mf','blk','sh', 'sf'] and combo_model[active_id][2]
         # 'mf' Section manages Filters
         def clear_domain_ctx():
             for key in self.old_ctx.keys():
@@ -334,6 +337,7 @@
             value = obj._exec_action(act, {}, ctx)
 
         if flag in ['blk','mf']:
+            self.screen_container.last_active_filter = False
             clear_domain_ctx()
             self.search_filter()
             combo.set_active(0)
@@ -344,10 +348,19 @@
             widget = glade2.get_widget('action_name')
             win = glade2.get_widget('dia_get_action')
             win.set_icon(common.OPENERP_ICON)
+            lbl = glade2.get_widget('label157')
             if flag == 'sh':
                 win.set_title('Shortcut Entry')
-                lbl = glade2.get_widget('label157')
-                lbl.set_text('Enter Shortcut Name:')
+                lbl.set_text('Shortcut Name:')
+            else:
+                win.set_size_request(300, 165)
+                text_entry = glade2.get_widget('action_name')
+                lbl.set_text('Filter Name:')
+                table =  glade2.get_widget('table8')
+                info_lbl = gtk.Label('(Any existing filter with the \nsame name will be replaced)')
+                table.attach(info_lbl,1,2,2,3, gtk.FILL, gtk.EXPAND)
+                if self.screen_container.last_active_filter:
+                    text_entry.set_text(self.screen_container.last_active_filter)
             win.show_all()
             response = win.run()
             # grab a safe copy of the entered text before destroy() to avoid GTK bug https://bugzilla.gnome.org/show_bug.cgi?id=613241
@@ -355,22 +368,35 @@
             win.destroy()
             combo.set_active(0)
             if response == gtk.RESPONSE_OK and action_name:
+                filter_domain = self.filter_widget and self.filter_widget.value.get('domain',[])
+                filter_context = self.filter_widget and self.filter_widget.value.get('context',{})
                 values = {'name':action_name,
                        'model_id':self.name,
-                       'domain':str(self.filter_widget and self.filter_widget.value.get('domain',[])),
-                       'context':str(self.filter_widget and self.filter_widget.value.get('context',{})),
                        'user_id':rpc.session.uid
                        }
                 if flag == 'sf':
-                    action_id = rpc.session.rpc_exec_auth('/object', 'execute', 'ir.filters', 'create', values, self.context)
-                    self.screen_container.fill_filter_combo(self.name)
+                    domain, context = self.screen_container.get_filter(action_name)
+                    for dom in eval(domain):
+                        if dom not in filter_domain:
+                            filter_domain.append(dom)
+                    groupby_list = eval(context).get('group_by',[]) + filter_context.get('group_by',[])
+                    filter_context.update(eval(context))
+                    filter_context.update({'group_by':groupby_list})
+                    values.update({'domain':str(filter_domain),
+                                   'context':str(filter_context),
+                                   })
+                    action_id = rpc.session.rpc_exec_auth('/object', 'execute', 'ir.filters', 'create_or_replace', values, self.context)
+                    self.screen_container.fill_filter_combo(self.name, action_name)
                 if flag == 'sh':
                     values.update({'res_model':self.name,
-                                  'search_view_id':self.search_view['view_id'],
-                                  'default_user_ids': [[6, 0, [rpc.session.uid]]]})
+                                   'domain':str(filter_domain),
+                                   'context':str(filter_context),
+                                   'search_view_id':self.search_view['view_id'],
+                                   'default_user_ids': [[6, 0, [rpc.session.uid]]]})
                     rpc.session.rpc_exec_auth_try('/object', 'execute', 'ir.ui.menu', 'create_shortcut', values, self.context)
         else:
             try:
+                self.screen_container.last_active_filter = action_name
                 filter_domain = flag and tools.expr_eval(flag)
                 clear_domain_ctx()
                 if combo.get_active() >= 0:

=== modified file 'bin/widget/view/list.py'
--- bin/widget/view/list.py	2010-10-12 10:14:15 +0000
+++ bin/widget/view/list.py	2010-10-12 13:24:45 +0000
@@ -122,7 +122,7 @@
         if self.loaded:
             return
         self.loaded = True
-        gb = self.context.get('group_by', False)
+        gb = self.context.get('group_by', [])
         no_leaf = self.context.get('group_by_no_leaf', False)
         if gb or no_leaf:
             records = rpc.session.rpc_exec_auth('/object', 'execute', self.mgroup.resource, 'read_group',

=== modified file 'bin/widget/view/screen_container.py'
--- bin/widget/view/screen_container.py	2010-10-12 06:12:38 +0000
+++ bin/widget/view/screen_container.py	2010-10-12 13:24:45 +0000
@@ -36,6 +36,7 @@
         self.vp = gtk.Viewport()
         self.vp.set_shadow_type(gtk.SHADOW_NONE)
         self.vbox = gtk.VBox()
+        self.last_active_filter = False
         self.vbox.pack_end(self.sw)
         self.filter_vbox = None
         self.button = None
@@ -44,27 +45,47 @@
         self.help_frame = False
         self.help = {}
         self.win_search = win_search
+        self.domain = []
+        self.context = {}
+        self.handler_id = None
 
     def widget_get(self):
         return self.vbox
 
-    def fill_filter_combo(self, model):
+    def fill_filter_combo(self, model, action_name = False):
+        self.action_combo.handler_block(self.handler_id)
         self.action_list.clear()
+        self.action_combo.handler_unblock(self.handler_id)
+        active = False
         my_acts = rpc.session.rpc_exec_auth('/object', 'execute', 'ir.filters', 'get_filters', model)
         filters_list=[['blk','','-- Filters --']]
         sorted_filters = [[act.get('domain',act['id']),act['context'],act['name']] for act in my_acts]
         sorted_filters.sort(lambda x, y: cmp(x[2], y[2]))
         filters_list += sorted_filters
         filters_list += [['blk','','--Actions--'],['sh','','Save as a Shortcut'],['sf','','Save as a Filter'],['mf','','Manage Filters']]
-        for lim in filters_list:
-            self.action_list.append(lim)
-        self.action_combo.set_active(0)
+        for index, action in enumerate(filters_list):
+            if action[-1] == action_name:
+                active = index
+            self.action_list.append(action)
+        if active:
+            self.action_combo.set_active(active)
+        else:
+            self.action_combo.set_active(0)
+
 
     def fill_limit_combo(self):
         self.limit_combo.clear()
         for lim in [[100,'100'],[200,'200'],[500,'500'],[None,'Unlimited']]:
             self.limit_combo.append(lim)
         self.combo.set_active(0)
+    
+    
+    def get_filter(self, filter_name):
+        def fnct(filterstore, path, iter, filter_name):
+            if filterstore.get(iter, 2)[0].lower() == filter_name.lower():
+                self.domain, self.context = filterstore.get(iter, 0, 1)
+        self.action_list.foreach(fnct, filter_name)
+        return str(self.domain),str(self.context)
 
     def add_filter(self, widget, fnct, clear_fnct, next_fnct, prev_fnct, execute_action=None, add_custom=None, model=None, limit=100):
         self.filter_vbox = gtk.VBox(spacing=1)
@@ -108,10 +129,11 @@
             cell = gtk.CellRendererText()
             self.action_combo.pack_start(cell, True)
             self.action_combo.add_attribute(cell, 'text', 2)
-
+            
+            self.handler_id = self.action_combo.connect('changed', execute_action)
             self.fill_filter_combo(model)
             self.action_combo.set_active(0)
-            self.action_combo.connect('changed', execute_action)
+            
 
     #Custom Filter Button
             img2 = gtk.Image()


Follow ups