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

Reply via email to