diff --git a/tryton/gui/window/view_form/model/group.py b/tryton/gui/window/view_form/model/group.py index 159b2f41e0..0ff3df186b 100644 --- a/tryton/gui/window/view_form/model/group.py +++ b/tryton/gui/window/view_form/model/group.py @@ -99,31 +99,36 @@ class ModelRecordGroup(SignalEvent): self.writen(saved) def writen(self, edited_id): - if not self.on_write: + ids = self.on_write_ids([edited_id]) + if not ids: return - try: - new_ids = getattr(self.rpc, self.on_write)(edited_id, self.context) - except Exception, exception: - rpc.process_exception(exception, self.window) - return - model_idx = self.models.index(self[edited_id]) - result = False - for new_id in new_ids: + index = self.models.index(self[edited_id]) + self.reload(ids, index) + + def reload(self, ids, index): + for obj_id in ids: cont = False for model in self.models: - if model.id == new_id: + if model.id == obj_id: cont = True model.reload() if cont: continue - newmod = ModelRecord(self.resource, new_id, self.window, + newmod = ModelRecord(self.resource, obj_id, self.window, parent=self.parent, group=self) newmod.reload() - if not result: - result = newmod - new_index = min(model_idx, len(self.models)-1) + new_index = min(index, len(self.models)-1) self.model_add(newmod, new_index) - return result + + def on_write_ids(self, ids): + if not self.on_write: + return False + try: + res = getattr(self.rpc, self.on_write)(ids, self.context) + except Exception, exception: + rpc.process_exception(exception, self.window) + return False + return res def _load_for(self, values): if len(values)>10: diff --git a/tryton/gui/window/view_form/screen/screen.py b/tryton/gui/window/view_form/screen/screen.py index dce3881600..d5f4c367c5 100644 --- a/tryton/gui/window/view_form/screen/screen.py +++ b/tryton/gui/window/view_form/screen/screen.py @@ -417,6 +417,9 @@ class Screen(SignalEvent): obj_id = self.current_model.id if unlink and obj_id: try: + reload_ids = self.models.on_write_ids(obj_id) + if reload_ids and obj_id in reload_ids: + reload_ids.remove(obj_id) if not self.rpc.unlink([obj_id]): return False except Exception, exception: @@ -429,6 +432,8 @@ class Screen(SignalEvent): self.current_model = self.models.models[idx] else: self.current_model = None + if reload_ids: + self.models.reload(reload_ids, idx) self.display() self.current_view.set_cursor() res = obj_id @@ -436,6 +441,11 @@ class Screen(SignalEvent): ids = self.current_view.sel_ids_get() if unlink and ids: try: + reload_ids = self.models.on_write_ids(ids) + if reload_ids: + for obj_id in ids: + if obj_id in reload_ids: + reload_ids.remove(obj_id) if not self.rpc.unlink(ids): return False except Exception, exception: @@ -444,6 +454,8 @@ class Screen(SignalEvent): for model in self.current_view.sel_models_get(): self.models.remove(model) self.current_model = None + if reload_ids: + self.models.reload(reload_ids, 0) self.display() self.current_view.set_cursor() res = ids