Mohammed Shekha(Open ERP) has proposed merging 
lp:~openerp-dev/openobject-client-web/6.0-bug-6179-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-6179-msh/+merge/68641

Hello,

If record is not saved and user opens a o2m popup at that time buttons inside 
that o2m will be readonly and that buttons will be accessible only if record is 
saved which is normal behavior.


-- 
https://code.launchpad.net/~openerp-dev/openobject-client-web/6.0-bug-6179-msh/+merge/68641
Your team OpenERP R&D Team is subscribed to branch 
lp:~openerp-dev/openobject-client-web/6.0-bug-6179-msh.
=== 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-21 08:52:36 +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-21 08:52:36 +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-21 08:52:36 +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-21 08:52:36 +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