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
(transplanted from d284eb9d3405d49c09eb5e59d2bac4ce9b4b27bc)
This commit is contained in:
Cédric Krier committed 2012-06-08 19:22:05 +02:00
1 parent 7acf30e755
commit cdbe6850f4
3 files changed
+13 -14

No files matched your search

@@ -177,13 +177,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 self.focus_out or not self.field:
@@ -198,18 +198,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)
@@ -627,20 +627,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
@@ -366,6 +368,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()