openerp-dev-web team mailing list archive
-
openerp-dev-web team
-
Mailing list archive
-
Message #04638
[Merge] lp:~openerp-dev/openobject-client/trunk-bug-720178-rga into lp:openobject-client
Ravi Gadhia (OpenERP) has proposed merging lp:~openerp-dev/openobject-client/trunk-bug-720178-rga into lp:openobject-client.
Requested reviews:
tfr (Openerp) (tfr)
Naresh(OpenERP) (nch-openerp)
For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-client/trunk-bug-720178-rga/+merge/54851
Hello tfr
I improve error message of validation. it's display appropriate error message even field/column is invisible-visible based on context (journal item/project task) and also if field is children of one2many field.
--
https://code.launchpad.net/~openerp-dev/openobject-client/trunk-bug-720178-rga/+merge/54851
Your team OpenERP R&D Team is subscribed to branch lp:~openerp-dev/openobject-client/trunk-bug-720178-rga.
=== modified file 'bin/common/common.py'
--- bin/common/common.py 2010-12-16 07:01:07 +0000
+++ bin/common/common.py 2011-03-25 12:08:23 +0000
@@ -128,6 +128,27 @@
self.help_frame.show_all()
return True
return False
+
+def get_invalid_field(model, context={}):
+ """
+ Return [('field_string','is_visible'), .. ]
+ """
+ fields = []
+ for field, attribute in model.state_attrs.items():
+ if not attribute.get('valid', False):
+ if attribute.get('invisible',False):
+ fields.append((attribute['string'], tools.expr_eval(attribute['invisible'], {'context':context})))
+ continue
+ fields.append((attribute['string'], attribute.get('invisible',False)))
+
+ if attribute['type'] == 'one2many':
+ child_field =[]
+ for child_model in model.value[attribute['name']].models:
+ child_field = get_invalid_field(child_model, context)
+ for req, inv in child_field:
+ req = '-- ' + req
+ fields.append((req , inv))
+ return fields
def OpenERP_Progressbar(parent=None, title=_('OpenERP Computing')):
@@ -499,13 +520,14 @@
win.destroy()
return True
-def message(msg, title=None, type=gtk.MESSAGE_INFO, parent=None):
+def message(msg, title=None, type=gtk.MESSAGE_INFO, parent=None, msg_to_xml=True):
if not parent:
parent=service.LocalService('gui.main').window
dialog = gtk.MessageDialog(parent,
gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
type, gtk.BUTTONS_OK)
- msg = to_xml(msg)
+ if msg_to_xml:
+ msg = to_xml(msg)
if title is not None:
msg = '<b>%s</b>\n\n%s' % (to_xml(title), msg)
dialog.set_icon(OPENERP_ICON)
@@ -517,7 +539,6 @@
return True
def to_xml(s):
- from cgi import escape
return escape(s)
def message_box(title, msg, parent=None):
@@ -543,8 +564,8 @@
return True
-def warning(msg, title=None, parent=None):
- return message(msg=msg, title=title, type=gtk.MESSAGE_WARNING, parent=parent)
+def warning(msg, title=None, parent=None, to_xml=True):
+ return message(msg=msg, title=title, type=gtk.MESSAGE_WARNING, parent=parent, msg_to_xml=to_xml)
def sur(msg, parent=None):
if not parent:
=== modified file 'bin/modules/gui/window/form.py'
--- bin/modules/gui/window/form.py 2011-01-27 10:49:17 +0000
+++ bin/modules/gui/window/form.py 2011-03-25 12:08:23 +0000
@@ -39,6 +39,7 @@
import service
import options
import copy
+import tools
from observator import oregistry
@@ -331,7 +332,15 @@
if id:
self.message_state(_('Document Saved.'), color="darkgreen")
elif len(self.screen.models.models) and res != None:
- common.warning(_('Invalid form, correct red fields !'),_('Error !'), parent=self.screen.current_view.window)
+ fields = common.get_invalid_field(self.screen.current_model, self.screen.context)
+ msg = ''
+ for req, inv in fields:
+ if inv:
+ msg += req + ' (<b>invisible</b>) '
+ else:
+ msg += req
+ msg += '\n'
+ common.warning(_('Correct following red fields !\n\n%s') % ( msg ),_('Input Error !'), parent=self.screen.current_view.window, to_xml=False)
self.message_state(_('Invalid form, correct red fields !'), color="red")
if warning:
common.warning(warning,_('Warning !'), parent=self.screen.current_view.window)
=== modified file 'bin/widget/view/form_gtk/parser.py'
--- bin/widget/view/form_gtk/parser.py 2010-12-21 12:18:44 +0000
+++ bin/widget/view/form_gtk/parser.py 2011-03-25 12:08:23 +0000
@@ -123,7 +123,15 @@
model.get_button_action(self.form.screen, id, self.attrs)
self.warn('misc-message', '')
else:
- common.warning(_('Invalid form, correct red fields !'), _('Error !'),parent=self.form.screen.current_view.window)
+ fields = common.get_invalid_field(self.form.screen.current_model, self.form.screen.context)
+ msg = ''
+ for req, inv in fields:
+ if inv:
+ msg += req + ' (<b>invisible</b>) '
+ else:
+ msg += req
+ msg += '\n'
+ common.warning(_('Correct following red fields !\n\n%s') % ( msg ),_('Input Error !'), parent=self.form.screen.current_view.window, to_xml=False)
self.warn('misc-message', _('Invalid form, correct red fields !'), "red")
self.form.screen.display()
self.form.screen.current_view.set_cursor()
@@ -154,6 +162,8 @@
result = True
result = result and tools.calc_condition(self, model, v)
if k == 'invisible':
+ if model and model.state_attrs.get(sa['name']):
+ model.state_attrs.get(sa['name'])['invisible'] = result
func = ['show', 'hide'][bool(result)]
getattr(self.widget, func)()
if self.label:
Follow ups