Add method set_sequence on ModelList
This method register the current order into sequence field. issue6133 review43501002
This commit is contained in:
1 parent
789b8483b7
commit
928c7d2efe
3 files changed
+53
No files matched your search
@@ -1,3 +1,4 @@
|
||||
* Add set_sequence method to ModelList
|
||||
* Add __int__ to Model
|
||||
* Allow to use keyword arguments with trytond configuration
|
||||
|
||||
|
||||
@@ -106,6 +106,28 @@ The report is executed with a list of records and some extra data.
|
||||
|
||||
>>> type_, data, print_, name = label.execute([party], {})
|
||||
|
||||
Sorting addresses and register order
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Addresses are ordered by sequence which means they can be stored following a
|
||||
specific order. The `set_sequence` method stores the current order.
|
||||
|
||||
>>> address = party.addresses.new(zip='69')
|
||||
>>> party.save()
|
||||
>>> address = party.addresses.new(zip='23')
|
||||
>>> party.save()
|
||||
|
||||
Now changing the order.
|
||||
|
||||
>>> reversed_addresses = list(reversed(party.addresses))
|
||||
>>> while party.addresses:
|
||||
... _ = party.addresses.pop()
|
||||
>>> party.addresses.extend(reversed_addresses)
|
||||
>>> party.addresses.set_sequence()
|
||||
>>> party.save()
|
||||
>>> party.addresses == reversed_addresses
|
||||
True
|
||||
|
||||
Support
|
||||
-------
|
||||
|
||||
|
||||
@@ -620,6 +620,36 @@ class ModelList(list):
|
||||
with Relation._config.set_context(self._get_context()):
|
||||
return Relation.find(new_domain, offset, limit, order)
|
||||
|
||||
def set_sequence(self, field='sequence'):
|
||||
changed = False
|
||||
prev = None
|
||||
for record in self:
|
||||
if prev:
|
||||
index = getattr(prev, field)
|
||||
else:
|
||||
index = None
|
||||
update = False
|
||||
value = getattr(record, field)
|
||||
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 or 0):
|
||||
update = True
|
||||
if update:
|
||||
if index is None:
|
||||
index = 0
|
||||
index += 1
|
||||
setattr(record, field, index)
|
||||
changed = record
|
||||
prev = record
|
||||
if changed:
|
||||
self._changed()
|
||||
|
||||
|
||||
class Model(object):
|
||||
'Model class for Tryton records'
|
||||
|
||||
Reference in new issue
Block a user