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