diff --git a/tryton/gui/window/view_form/model/field.py b/tryton/gui/window/view_form/model/field.py index 808cceb0b0..6c2dc798cc 100644 --- a/tryton/gui/window/view_form/model/field.py +++ b/tryton/gui/window/view_form/model/field.py @@ -674,19 +674,20 @@ class O2MField(Field): if mode == 'list ids': records_to_remove = [r for r in group if r.id not in value] for record_to_remove in records_to_remove: - group.remove(record_to_remove, remove=True, signal=False) + group.remove(record_to_remove, remove=True, modified=False) group.load(value, modified=modified or default) else: for vals in value: new_record = record.value[self.name].new(default=False) if default: # Don't validate as parent will validate - new_record.set_default(vals, signal=False, validate=False) - group.add(new_record, signal=False) + new_record.set_default( + vals, modified=False, validate=False) + group.add(new_record, modified=False) else: - new_record.set(vals, signal=False) + new_record.set(vals, modified=False) group.append(new_record) - # Trigger signal only once with the last record + # Trigger modified only once group.record_modified() def set(self, record, value, _default=False): @@ -766,14 +767,14 @@ class O2MField(Field): record2 = group.get(record_id) if record2 is not None: group.remove( - record2, remove=False, signal=False, + record2, remove=False, modified=False, force_remove=False) if value and value.get('remove'): for record_id in value['remove']: record2 = group.get(record_id) if record2 is not None: group.remove( - record2, remove=True, signal=False, + record2, remove=True, modified=False, force_remove=False) if value and (value.get('add') or value.get('update', [])): @@ -796,7 +797,7 @@ class O2MField(Field): new_record = group.get(id_) if not new_record: new_record = group.new(obj_id=id_, default=False) - group.add(new_record, index, signal=False) + group.add(new_record, index, modified=False) new_record.set_on_change(vals) for vals in value.get('update', []): diff --git a/tryton/gui/window/view_form/model/group.py b/tryton/gui/window/view_form/model/group.py index 2bfc662c44..3c5228a37a 100644 --- a/tryton/gui/window/view_form/model/group.py +++ b/tryton/gui/window/view_form/model/group.py @@ -308,7 +308,7 @@ class Group(list): def context(self, value): self._context = value.copy() - def add(self, record, position=-1, signal=True): + def add(self, record, position=-1, modified=True): if record.group is not self: record.group = self if record not in self: @@ -323,8 +323,8 @@ class Group(list): if record_del.id == record.id: self.record_deleted.remove(record_del) self.current_idx = position - record.set_modified('id') - if signal: + record.modified_fields.setdefault('id') + if modified: # Set parent field to trigger on_change if self.parent and self.parent_name in self.fields: field = self.fields[self.parent_name] @@ -384,16 +384,15 @@ class Group(list): record.default_get(rec_name=rec_name) return record - def unremove(self, record, signal=True): + def unremove(self, record, modified=True): if record in self.record_removed: self.record_removed.remove(record) if record in self.record_deleted: self.record_deleted.remove(record) - if signal: + if modified: self.record_modified() - def remove(self, record, remove=False, modified=True, signal=True, - force_remove=False): + def remove(self, record, remove=False, modified=True, force_remove=False): idx = self.index(record) if record.id >= 0: if remove: @@ -406,10 +405,7 @@ class Group(list): self.record_removed.remove(record) if record not in self.record_deleted: self.record_deleted.append(record) - if record.parent: - record.parent.set_modified('id') - if modified: - record.set_modified('id') + record.modified_fields.setdefault('id') if record.id < 0 or force_remove: self._remove(record) @@ -418,7 +414,7 @@ class Group(list): else: self.current_idx = None - if signal: + if modified: self.record_modified() def prev(self): @@ -463,8 +459,8 @@ class Group(list): except RPCException: return False for record in new: - record.set_default(values, signal=False) - # Trigger signal only once with the last record + record.set_default(values, modified=False) + # Trigger modified only once with the last record self.record_modified() def get(self, id): @@ -483,7 +479,7 @@ class Group(list): self.parent.group.children.remove(self) except ValueError: pass - # One2Many connect the group to itself to send signals to the parent + # One2Many connect the group to itself to send modified to the parent # but as we are destroying the group, we do not need to notify the # parent otherwise it will trigger unnecessary display. self.screens.clear() diff --git a/tryton/gui/window/view_form/model/record.py b/tryton/gui/window/view_form/model/record.py index 581ba498af..5f87c0a2bb 100644 --- a/tryton/gui/window/view_form/model/record.py +++ b/tryton/gui/window/view_form/model/record.py @@ -141,7 +141,7 @@ class Record: if record and not record.destroyed and value: for key in record.modified_fields: value.pop(key, None) - record.set(value, signal=False) + record.set(value, modified=False) if name != '*': return self.group.fields[name] @@ -424,7 +424,7 @@ class Record: else: return self.group.local_context - def set_default(self, val, signal=True, validate=True): + def set_default(self, val, modified=True, validate=True): fieldnames = [] for fieldname, value in list(val.items()): if fieldname in {'_write', '_delete', '_timestamp'}: @@ -445,10 +445,10 @@ class Record: self.on_change_with(fieldnames) if validate: self.validate(softvalidation=True) - if signal: + if modified: self.set_modified() - def set(self, val, signal=True, validate=True): + def set(self, val, modified=True, validate=True): later = {} fieldnames = [] for fieldname, value in val.items(): @@ -479,7 +479,7 @@ class Record: self._loaded.add(fieldname) if validate: self.validate(fieldnames, softvalidation=True) - if signal: + if modified: self.set_modified() def set_on_change(self, values): @@ -505,7 +505,7 @@ class Record: def reset(self, value): self.cancel() - self.set(value, signal=False) + self.set(value, modified=False) if self.parent: self.parent.on_change([self.group.child_name]) diff --git a/tryton/gui/window/view_form/screen/screen.py b/tryton/gui/window/view_form/screen/screen.py index 2b2c7a2013..ccc8626889 100644 --- a/tryton/gui/window/view_form/screen/screen.py +++ b/tryton/gui/window/view_form/screen/screen.py @@ -796,7 +796,8 @@ class Screen: # set current model to None to prevent __select_changed # to save the previous_model as it can be already deleted. self.current_record = None - record.group.remove(record, remove=remove, signal=False, + record.group.remove( + record, remove=remove, modified=False, force_remove=force_remove) # call only once record.set_modified() @@ -978,7 +979,7 @@ class Screen: if set_cursor: self.set_cursor(reset_view=False) self.set_tree_state() - # Force record_message signal + # Force record_message self.current_record = self.current_record def display_next(self):