Manage error when saving record from Many2One

The save of the current record must be done at the same level as the
validation.

issue2614
review393001
This commit is contained in:
Cédric Krier committed 2012-06-08 19:22:05 +02:00
1 parent bafd15808d
commit e10ca956e5
3 files changed
+13 -14

No files matched your search

@@ -181,13 +181,13 @@ class Many2One(WidgetInterface):
screen = self.get_screen()
def callback(result):
if result and screen.save_current():
if result:
self.field.set_client(self.record,
self.value_from_id(screen.current_record.id,
screen.current_record.rec_name()))
self.display(self.record, self.field)
self.focus_out = True
WinForm(screen, callback, new=True)
WinForm(screen, callback, new=True, save_current=True)
def sig_edit(self, widget):
if not common.MODELACCESS[self.get_model()]['read']:
@@ -204,18 +204,15 @@ class Many2One(WidgetInterface):
screen.load([self.id_from_value(self.field.get(self.record))])
def callback(result):
if result and screen.save_current():
if result:
self.field.set_client(self.record,
self.value_from_id(screen.current_record.id,
screen.current_record.rec_name()),
force_change=True)
elif result:
screen.display()
return WinForm(screen, callback)
self.focus_out = True
self.display(self.record, self.field)
self.changed = True
WinForm(screen, callback)
WinForm(screen, callback, save_current=True)
return
elif model and not self._readonly:
domain = self.field.domain_get(self.record)
@@ -649,20 +649,17 @@ class M2O(Char):
mode=['form'])
def open_callback(result):
if result and screen.save_current():
if result:
value = (screen.current_record.id,
screen.current_record.rec_name())
field.set_client(record, value, force_change=True)
elif result:
screen.display()
return WinForm(screen, open_callback)
if callback:
callback()
if obj_id:
screen.load([obj_id])
WinForm(screen, open_callback)
WinForm(screen, open_callback, save_current=True)
else:
WinForm(screen, open_callback, new=True)
WinForm(screen, open_callback, new=True, save_current=True)
def search_remote(self, record, relation, ids=None, domain=None,
context=None, callback=None):
+6 -1
View File
@@ -16,12 +16,14 @@ class WinForm(NoModal):
"Form window"
def __init__(self, screen, callback, view_type='form',
new=False, many=False, domain=None, context=None):
new=False, many=False, domain=None, context=None,
save_current=False):
NoModal.__init__(self)
self.screen = screen
self.callback = callback
self.domain = domain
self.context = context
self.save_current = save_current
self.prev_view = self.screen.current_view
self.screen.screen_container.alternate_view = True
switch_new = False
@@ -375,6 +377,9 @@ class WinForm(NoModal):
and self.screen.current_record is not None):
validate = self.screen.current_record.validate(
self.screen.current_view.get_fields())
if validate and self.save_current:
if not self.screen.save_current():
validate = False
if not validate:
self.screen.set_cursor()
self.screen.display()