From 3aadca7bf0d30238ca1997351320584006ca8671 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Tue, 27 Sep 2016 12:00:24 +0200 Subject: [PATCH] Improve Group.set_sequence - do not load record if there is no record changed above as it can be assumed that the sequence is still valid. - do not update the sequence if the tuple sequence and id is still valid. issue5873 review28801002 --- tryton/gui/window/view_form/model/group.py | 29 ++++++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/tryton/gui/window/view_form/model/group.py b/tryton/gui/window/view_form/model/group.py index f09ce7e3cb..72584aefd8 100644 --- a/tryton/gui/window/view_form/model/group.py +++ b/tryton/gui/window/view_form/model/group.py @@ -294,11 +294,31 @@ class Group(SignalEvent, list): return record def set_sequence(self, field='sequence'): - index = 0 changed = False + prev = None for record in self: - if record[field]: - if index >= record[field].get(record): + # Assume not loaded records are correctly ordered + # as far as we do not change any previous records. + if (record.get_loaded([field]) and not changed) or record.id < 0: + if prev: + index = prev[field].get(prev) + else: + index = None + update = False + value = record[field].get(record) + if value is None: + if index: + update = True + elif prev and record.id >= 0: + update = record.id < prev.id + if value == index: + if prev and record.id >= 0: + update = record.id < prev.id + elif value < index: + update = True + if update: + if index is None: + index = 0 index += 1 record.signal_unconnect(self, 'record-changed') try: @@ -307,8 +327,7 @@ class Group(SignalEvent, list): record.signal_connect(self, 'record-changed', self._record_changed) changed = record - else: - index = record[field].get(record) + prev = record if changed: self.signal('group-changed', changed)