Ravi Gadhia (OpenERP) has proposed merging
lp:~openerp-dev/openobject-client/trunk-bug-788098-rga into
lp:openobject-client.
Requested reviews:
Naresh(OpenERP) (nch-openerp)
Related bugs:
Bug #788098 in OpenERP GTK Client: "Invalid view, duplicate field: date"
https://bugs.launchpad.net/openobject-client/+bug/788098
For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-client/trunk-bug-788098-rga/+merge/63980
--
https://code.launchpad.net/~openerp-dev/openobject-client/trunk-bug-788098-rga/+merge/63980
Your team OpenERP R&D Team is subscribed to branch
lp:~openerp-dev/openobject-client/trunk-bug-788098-rga.
=== modified file 'bin/common/common.py'
--- bin/common/common.py 2011-03-31 09:26:25 +0000
+++ bin/common/common.py 2011-06-09 10:21:02 +0000
@@ -499,7 +499,7 @@
if not isinstance(message, basestring):
message = str(message)
- xmlGlade.get_widget('title_error').set_markup("<i>%s</i>" % escape(message))
+ xmlGlade.get_widget('title_error').set_markup("<i>%s</i>" % message)
details_buffer = gtk.TextBuffer()
details_buffer.set_text(details)
=== modified file 'bin/widget/screen/screen.py'
--- bin/widget/screen/screen.py 2011-05-10 11:13:09 +0000
+++ bin/widget/screen/screen.py 2011-06-09 10:21:02 +0000
@@ -578,16 +578,16 @@
return self.add_view(self.views_preload[view_type]['arch'],
self.views_preload[view_type]['fields'], display,
toolbar=self.views_preload[view_type].get('toolbar', False),
- submenu=self.views_preload[view_type].get('submenu', False), help=help,
+ submenu=self.views_preload[view_type].get('submenu', False), name=self.views_preload[view_type].get('name', False), help=help,
context=context)
else:
view = self.rpc.fields_view_get(view_id, view_type, self.context,
self.hastoolbar, self.hassubmenu)
context.update({'view_type' : view_type})
return self.add_view(view['arch'], view['fields'], display, help=help,
- toolbar=view.get('toolbar', False), submenu=view.get('submenu', False), context=context)
+ toolbar=view.get('toolbar', False), submenu=view.get('submenu', False), name=view.get('name',False), context=context)
- def add_view(self, arch, fields, display=False, custom=False, toolbar=None, submenu=None, help={},
+ def add_view(self, arch, fields, display=False, custom=False, toolbar=None, submenu=None, name=False, help={},
context=None):
if toolbar is None:
toolbar = {}
@@ -627,7 +627,7 @@
self.fields = self.models.fields
parser = widget_parse(parent=self.parent, window=self.window)
- view = parser.parse(self, root_node, self.fields, toolbar=toolbar, submenu=submenu, help=help)
+ view = parser.parse(self, root_node, self.fields, toolbar=toolbar, submenu=submenu, name=name, help=help)
if view:
self.views.append(view)
=== modified file 'bin/widget/view/form_gtk/parser.py'
--- bin/widget/view/form_gtk/parser.py 2011-04-20 09:31:42 +0000
+++ bin/widget/view/form_gtk/parser.py 2011-06-09 10:21:02 +0000
@@ -447,6 +447,7 @@
elif node.tag =='field':
name = str(attrs['name'])
+ self.field_list.append(name)
del attrs['name']
name = unicode(name)
type = attrs.get('widget', fields[name]['type'])
=== modified file 'bin/widget/view/interface.py'
--- bin/widget/view/interface.py 2010-01-12 09:24:17 +0000
+++ bin/widget/view/interface.py 2011-06-09 10:21:02 +0000
@@ -32,6 +32,7 @@
self.title = None
self.buttons = {}
self.screen = screen
+ self.field_list = []
class parser_view(object):
def __init__(self, window, screen, widget, children=None, state_aware_widgets=None, toolbar=None, submenu=None):
=== modified file 'bin/widget/view/tree_gtk/parser.py'
--- bin/widget/view/tree_gtk/parser.py 2011-03-20 11:26:23 +0000
+++ bin/widget/view/tree_gtk/parser.py 2011-06-09 10:21:02 +0000
@@ -137,6 +137,7 @@
if node.tag == 'field':
handler_id = False
fname = str(node_attrs['name'])
+ self.field_list.append(fname)
if fields[fname]['type'] in ('image', 'binary'):
continue # not showed types
if fname == 'sequence':
=== modified file 'bin/widget/view/widget_parse.py'
--- bin/widget/view/widget_parse.py 2010-10-11 13:19:15 +0000
+++ bin/widget/view/widget_parse.py 2011-06-09 10:21:02 +0000
@@ -19,10 +19,9 @@
#
##############################################################################
-
+import common
+import gtk
import interface
-from lxml import etree
-
import form_gtk
import tree_gtk
import graph_gtk
@@ -47,7 +46,7 @@
}
class widget_parse(interface.parser_interface):
- def parse(self, screen, node, fields, toolbar={}, submenu={}, help={}):
+ def parse(self, screen, node, fields, toolbar={}, submenu={}, name=False, help={}):
if node is not None:
if node.tag not in parsers:
raise Exception(_("This type (%s) is not supported by the GTK client !") % node.tag)
@@ -55,6 +54,20 @@
# Select the parser for the view (form, tree, graph, calendar or gantt)
widget = widget_parser(self.window, self.parent, self.attrs, screen)
wid, child, buttons, on_write = widget.parse(screen.resource, node, fields)
+ results = {}
+ for field in widget.field_list:
+ results.setdefault(field, 0)
+ results[field] += 1
+ if results[field] > 1:
+ view = node.tag.capitalize()
+ msg = "<b>%s</b> view has duplicate field: <b>%s</b>\n\n Model: <b>%s</b>"
+ var = (view, field ,screen.resource)
+ if name:
+ msg = "<b>%s</b> view has duplicate field: <b>%s</b>\n\n Model: <b>%s</b>\n View: <b>%s</b>"
+ var = (view, field ,screen.resource, name)
+ common.message( _(msg) % var,
+ _('View Error!'), type=gtk.MESSAGE_ERROR, parent=None, msg_to_xml=False)
+ return
if isinstance(wid, calendar_gtk.EmptyCalendar):
view_parser = calendar_gtk.DummyViewCalendar
screen.set_on_write(on_write)
_______________________________________________
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