Mohammed Shekha(Open ERP) has proposed merging 
lp:~openerp-dev/openobject-client-web/6.0-bug-16165-msh into 
lp:openobject-client-web/6.0.

Requested reviews:
  OpenERP Core Team (openerp)

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-client-web/6.0-bug-16165-msh/+merge/68787

Hello,

Change the code so that when record opened in new tab at that time menu remains 
persistent, before that when record was opened in new tab menu were changed and 
by default sale menu came. This was handled by revision no. 4642 but due to 
this revision issue 16165 was arise i.e. parent_id not found that is because we 
are setting id of data in active_id of context so according to revision 4642 
the code will make rpc call with active_id of context for fetching menu id 
which is actually id of data.


Thanx.
-- 
https://code.launchpad.net/~openerp-dev/openobject-client-web/6.0-bug-16165-msh/+merge/68787
Your team OpenERP R&D Team is subscribed to branch 
lp:~openerp-dev/openobject-client-web/6.0-bug-16165-msh.
=== modified file 'addons/openerp/controllers/actions.py'
--- addons/openerp/controllers/actions.py	2011-05-23 13:07:54 +0000
+++ addons/openerp/controllers/actions.py	2011-07-22 05:41:42 +0000
@@ -198,7 +198,7 @@
     if not action.get('opened'):
         action.setdefault('target', 'current')
         return act_window_opener(action, data)
-
+    
     for key in ('res_id', 'res_model', 'view_type',
                 'view_mode', 'limit', 'search_view'):
         data[key] = action.get(key, data.get(key))
@@ -226,7 +226,13 @@
         view_ids = [action['view_id'][0]]
     if not action.get('domain'):
         action['domain'] = '[]'
-
+    
+    global menu_id
+    menu_id = False
+    
+    if not data['context'].get('active_id'):
+        menu_id = data.get('id', False)
+    
     ctx = dict(data.get('context', {}),
         active_id=data.get('id', False),
         active_ids=data.get('ids', []),
@@ -367,8 +373,8 @@
 
     if open_new_tab:
         parent_id = False
-        if data['context'] and data['context'].get('active_id') and not data.get('model'):
-            parent = rpc.RPCProxy('ir.ui.menu').read([int(data['context']['active_id'])],['complete_name'], rpc.session.context)[0]['complete_name'].split('/')[0]
+        if menu_id:
+            parent = rpc.RPCProxy('ir.ui.menu').read([int(menu_id)],['complete_name'], rpc.session.context)[0]['complete_name'].split('/')[0]
             parent_id = rpc.RPCProxy('ir.ui.menu').search([('name','=', parent),('parent_id','=',False)],0,0,0, rpc.session.context)
         if parent_id:
             url = '/openerp/?' + urllib.urlencode({'active': parent_id[0],'next': url})

=== modified file 'addons/openerp/controllers/openo2m.py'
--- addons/openerp/controllers/openo2m.py	2011-04-04 15:02:36 +0000
+++ addons/openerp/controllers/openo2m.py	2011-07-22 05:41:42 +0000
@@ -38,7 +38,7 @@
         params.model = params.o2m_model
         params.view_mode = ['form', 'tree']
         params.view_type = 'form'
-
+        params['_o2m'] = 1
         #XXX: dirty hack to fix bug #401700
         if not params.get('_terp_view_ids'):
             params['_terp_view_ids'] = []

=== modified file 'addons/openerp/widgets/_views.py'
--- addons/openerp/widgets/_views.py	2011-06-24 11:10:14 +0000
+++ addons/openerp/widgets/_views.py	2011-07-22 05:41:42 +0000
@@ -63,7 +63,7 @@
                            context=screen.context,
                            editable=screen.editable,
                            readonly=screen.readonly,
-                           nodefault=screen.nodefault, nolinks=screen.link)
+                           nodefault=screen.nodefault, nolinks=screen.link, o2m=screen.o2m)
 
         if not screen.is_wizard and screen.ids is None:
             limit = screen.limit or 50

=== modified file 'addons/openerp/widgets/form/_form.py'
--- addons/openerp/widgets/form/_form.py	2011-07-18 09:36:24 +0000
+++ addons/openerp/widgets/form/_form.py	2011-07-22 05:41:42 +0000
@@ -623,8 +623,7 @@
 class Button(TinyInputWidget):
 
     template = "/openerp/widgets/form/templates/button.mako"
-    params = ["btype", "id", "confirm", "icon", "target", "context", "default_focus"]
-
+    params = ["btype", "id", "confirm", "icon", "target", "context", "default_focus", "readonly"]
     visible = True
     def __init__(self, **attrs):
         super(Button, self).__init__(**attrs)
@@ -639,7 +638,8 @@
         if self.icon:
             self.icon = icons.get_icon(self.icon)
         self.default_focus = attrs.get('default_focus', 0)
-
+        self.readonly = attrs.get('readonly', False)
+        
     def set_state(self, state):
         if self.states:
             self.visible = state in self.states
@@ -742,7 +742,7 @@
     params = ['id']
     member_widgets = ['frame', 'concurrency_info']
 
-    def __init__(self, prefix, model, view, ids=[], domain=[], context=None, editable=True, readonly=False, nodefault=False, nolinks=1):
+    def __init__(self, prefix, model, view, ids=[], domain=[], context=None, editable=True, readonly=False, nodefault=False, nolinks=1, o2m=None):
 
         super(Form, self).__init__(prefix=prefix, model=model, editable=editable, readonly=readonly, nodefault=nodefault)
         dom = xml.dom.minidom.parseString(view['arch'].encode('utf-8'))
@@ -753,7 +753,8 @@
         self.link = attrs.get('link', nolinks)
         self.model = model
         self.id = None
-
+        self.o2m = o2m
+        
         proxy = rpc.RPCProxy(model)
 
         self.context = dict(rpc.session.context,
@@ -807,7 +808,13 @@
 
         self.view_fields = []
         self.nb_couter = 0
-        self.frame = self.parse(prefix, dom, fields, values)[0]
+        self.btn_readonly = 0
+
+        if not self.id and self.o2m == 1:
+            self.btn_readonly = 1
+            self.frame = self.parse(prefix, dom, fields, values, self.btn_readonly)[0] 
+        else:
+            self.frame = self.parse(prefix, dom, fields, values)[0]
         self.values = [values]
         self.concurrency_info = ConcurrencyInfo(self.model, [self.id])
 
@@ -827,8 +834,9 @@
                 field = self._make_field_widget(attrs, values.get(name))
                 self.frame.add_hidden(field)
 
-    def parse(self, prefix='', root=None, fields=None, values={}):
-
+    def parse(self, prefix='', root=None, fields=None, values={}, btn_readonly=None):
+        
+        btn_readonly = btn_readonly or 0
         views = []
 
         for node in root.childNodes:
@@ -864,25 +872,27 @@
 
             elif node.localName=='button':
                 attrs['editable'] = self.editable
+                if btn_readonly == 1:
+                    attrs['readonly'] = True
                 views.append(Button(model=self.model, id=self.id, **attrs))
 
             elif node.localName == 'form':
-                n = self.parse(prefix=prefix, root=node, fields=fields, values=values)
+                n = self.parse(prefix=prefix, root=node, fields=fields, values=values, btn_readonly=btn_readonly)
                 views.append(Frame(children=n, **attrs))
 
             elif node.localName == 'notebook':
-                n = self.parse(prefix=prefix, root=node, fields=fields, values=values)
+                n = self.parse(prefix=prefix, root=node, fields=fields, values=values, btn_readonly=btn_readonly)
                 nb = Notebook(children=n, **attrs)
                 self.nb_couter += 1
                 nb._name = prefix.replace('/', '_') + '_notebook_%s'  % (self.nb_couter)
                 views.append(nb)
 
             elif node.localName == 'page':
-                n = self.parse(prefix=prefix, root=node, fields=fields, values=values)
+                n = self.parse(prefix=prefix, root=node, fields=fields, values=values, btn_readonly=btn_readonly)
                 views.append(Page(children=n, **attrs))
 
             elif node.localName=='group':
-                n = self.parse(prefix=prefix, root=node, fields=fields, values=values)
+                n = self.parse(prefix=prefix, root=node, fields=fields, values=values, btn_readonly=btn_readonly)
                 views.append(Group(children=n, **attrs))
 
             elif node.localName == 'field':
@@ -914,15 +924,15 @@
                 views.append(field)
 
             elif node.localName=='hpaned':
-                n = self.parse(prefix=prefix, root=node, fields=fields, values=values)
+                n = self.parse(prefix=prefix, root=node, fields=fields, values=values, btn_readonly=btn_readonly)
                 views.append(HPaned(children=n, **attrs))
 
             elif node.localName=='vpaned':
-                n = self.parse(prefix=prefix, root=node, fields=fields, values=values)
+                n = self.parse(prefix=prefix, root=node, fields=fields, values=values, btn_readonly=btn_readonly)
                 views.append(VPaned(children=n, **attrs))
 
             elif node.localName in ('child1', 'child2'):
-                n = self.parse(prefix=prefix, root=node, fields=fields, values=values)
+                n = self.parse(prefix=prefix, root=node, fields=fields, values=values, btn_readonly=btn_readonly)
                 attrs['name'] = get_node_xpath(node)
                 views.append(Dashbar(children=n, **attrs))
 
@@ -932,7 +942,7 @@
                 cherrypy.request._terp_dashboard = True
 
             else:
-                n = self.parse(prefix=prefix, root=node, fields=fields, values=values)
+                n = self.parse(prefix=prefix, root=node, fields=fields, values=values, btn_readonly=btn_readonly)
                 args = node_attributes(node)
                 attrs['args'] = args
                 attrs['tag_name'] = node.localName

=== modified file 'addons/openerp/widgets/form_view.py'
--- addons/openerp/widgets/form_view.py	2011-06-22 11:55:05 +0000
+++ addons/openerp/widgets/form_view.py	2011-07-22 05:41:42 +0000
@@ -87,7 +87,7 @@
             params.group_by_ctx = self.search.groupby
             
         self.screen = Screen(prefix='', hastoolbar=True, hassubmenu=True, editable=editable, readonly=readonly,
-                             selectable=params.selectable or 2)
+                             selectable=params.selectable or 2, _o2m= params._o2m or 0)
 
         if self.screen.widget and self.screen.view_type in ['form', 'tree']:
             self.logs = Logs()

_______________________________________________
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