Commit 766c9a01 authored by Julien Muchembled's avatar Julien Muchembled

Simplify Delivery.getMovementList

parent b4b5bcf8
No related merge requests found
...@@ -241,58 +241,42 @@ class Delivery(XMLObject, ImmobilisationDelivery, ...@@ -241,58 +241,42 @@ class Delivery(XMLObject, ImmobilisationDelivery,
""" """
Return a list of movements Return a list of movements
""" """
movement_portal_type_list = self.getPortalMovementTypeList() movement_portal_type_set = set(
sub_object_list = self.objectValues( self.getPortalObject().getPortalMovementTypeList())
portal_type=movement_portal_type_list, **kw) movement_list = self.objectValues(
if not sub_object_list: portal_type=movement_portal_type_set, **kw)
return [] if movement_list:
if isinstance(portal_type, str): if isinstance(portal_type, str):
portal_type = set((portal_type,)) portal_type = set((portal_type,))
elif isinstance(portal_type, (list, tuple)): elif isinstance(portal_type, (list, tuple)):
portal_type = set(portal_type) portal_type = set(portal_type)
# Browse lines recursively and collect leafs.
stack = [iter(movement_list)]
movement_list = [] movement_list = []
add_movement = movement_list.append while stack:
object_list_stack = [sub_object_list] for sub_object in stack[-1]:
stack_index = 0
object_list_index_stack = []
object_index = 0
while object_list_stack:
try:
sub_object = object_list_stack[stack_index][object_index]
except IndexError:
object_list_stack.pop()
stack_index -= 1
if object_list_index_stack:
object_index = object_list_index_stack.pop()
else:
content_list = sub_object.objectValues( content_list = sub_object.objectValues(
portal_type=movement_portal_type_list, **kw) portal_type=movement_portal_type_set, **kw)
new_stack = []
if sub_object.hasCellContent(): if sub_object.hasCellContent():
cell_list = sub_object.getCellValueList() cell_list = sub_object.getCellValueList()
if len(cell_list) != len(content_list): if len(cell_list) != len(content_list):
for x in content_list: content_list = set(content_list).difference(cell_list)
if x not in cell_list: if content_list:
new_stack.append(x) stack.append(iter(content_list))
break
else: else:
for sub_object in content_list: movement_list.extend(x for x in content_list
if (portal_type is None or if portal_type is None or x.getPortalType() in portal_type)
sub_object.getPortalType() in portal_type):
add_movement(sub_object)
elif content_list: elif content_list:
new_stack = content_list stack.append(iter(content_list))
elif portal_type is None or sub_object.getPortalType() in portal_type: break
add_movement(sub_object) elif portal_type is None or \
sub_object.getPortalType() in portal_type:
object_index += 1 movement_list.append(sub_object)
if new_stack: else:
object_list_stack.append(new_stack) del stack[-1]
object_list_index_stack.append(object_index)
stack_index += 1
object_index = 0
return movement_list return movement_list
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment