Make on_write works also when deleting records
This commit is contained in:
1 parent
2c2b245854
commit
2f6e2ff937
2 files changed
+32
-15
No files matched your search
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in new issue
Block a user