Set sequence order following the new position order
issue10299 review334181002
This commit is contained in:
1 parent
146c5f5128
commit
cb6bb0d076
4 files changed
+28
-10
No files matched your search
@@ -1,5 +1,7 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
import operator
|
||||
|
||||
from .record import Record
|
||||
from .field import Field, M2OField, ReferenceField
|
||||
from tryton import rpc
|
||||
@@ -346,9 +348,13 @@ class Group(SignalEvent, list):
|
||||
field.set_client(record, value)
|
||||
return record
|
||||
|
||||
def set_sequence(self, field='sequence'):
|
||||
def set_sequence(self, field='sequence', position=-1):
|
||||
changed = False
|
||||
prev = None
|
||||
if position == 0:
|
||||
cmp = operator.gt
|
||||
else:
|
||||
cmp = operator.lt
|
||||
for record in self:
|
||||
# Assume not loaded records are correctly ordered
|
||||
# as far as we do not change any previous records.
|
||||
@@ -362,11 +368,17 @@ class Group(SignalEvent, list):
|
||||
if value is None:
|
||||
if index:
|
||||
update = True
|
||||
elif prev and record.id >= 0:
|
||||
update = record.id < prev.id
|
||||
elif prev:
|
||||
if record.id >= 0:
|
||||
update = cmp(record.id, prev.id)
|
||||
elif position == 0:
|
||||
update = True
|
||||
elif value == index:
|
||||
if prev and record.id >= 0:
|
||||
update = record.id < prev.id
|
||||
if prev:
|
||||
if record.id >= 0:
|
||||
update = cmp(record.id, prev.id)
|
||||
elif position == 0:
|
||||
update = True
|
||||
elif value <= (index or 0):
|
||||
update = True
|
||||
if update:
|
||||
|
||||
@@ -348,7 +348,8 @@ class One2Many(Widget):
|
||||
|
||||
def update_sequence():
|
||||
if sequence:
|
||||
self.screen.group.set_sequence(field=sequence)
|
||||
self.screen.group.set_sequence(
|
||||
field=sequence, position=self.screen.new_position)
|
||||
|
||||
if self.screen.current_view.editable:
|
||||
self.screen.new()
|
||||
@@ -408,7 +409,8 @@ class One2Many(Widget):
|
||||
|
||||
sequence = self._sequence()
|
||||
if sequence:
|
||||
self.screen.group.set_sequence(field=sequence)
|
||||
self.screen.group.set_sequence(
|
||||
field=sequence, position=self.screen.new_position)
|
||||
|
||||
search_set()
|
||||
|
||||
@@ -471,7 +473,8 @@ class One2Many(Widget):
|
||||
self.screen.load(ids, modified=True)
|
||||
self.screen.display(res_id=ids[0])
|
||||
if sequence:
|
||||
self.screen.group.set_sequence(field=sequence)
|
||||
self.screen.group.set_sequence(
|
||||
field=sequence, position=self.screen.new_position)
|
||||
self.screen.set_cursor()
|
||||
self.wid_text.set_text('')
|
||||
|
||||
|
||||
@@ -831,7 +831,9 @@ class ViewTree(View):
|
||||
selection.unselect_all()
|
||||
selection.select_path(record.get_index_path(model.group))
|
||||
if self.attributes.get('sequence'):
|
||||
record.group.set_sequence(field=self.attributes['sequence'])
|
||||
record.group.set_sequence(
|
||||
field=self.attributes['sequence'],
|
||||
position=self.screen.new_position)
|
||||
return True
|
||||
|
||||
def drag_drop(self, treeview, context, x, y, time):
|
||||
|
||||
@@ -125,7 +125,8 @@ class EditableTreeView(TreeView):
|
||||
res = method(new_record)
|
||||
sequence = self.view.attributes.get('sequence')
|
||||
if sequence:
|
||||
model.group.set_sequence(field=sequence)
|
||||
model.group.set_sequence(
|
||||
field=sequence, position=self.view.screen.new_position)
|
||||
return res
|
||||
|
||||
def set_cursor(
|
||||
|
||||
Reference in new issue
Block a user