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:
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):
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in new issue
Block a user