From 688db2c1cdc4bc0ce93423d85e61f51ac79e05ec Mon Sep 17 00:00:00 2001
From: Romain Courteaud <romain@nexedi.com>
Date: Mon, 18 Apr 2005 08:31:17 +0000
Subject: [PATCH] Make movement group more generic, in order to be compatible
 with DeliveryBuilder. Each movement group can now store some properties.

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@2894 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5/MovementGroup.py | 54 ++++++++++++++++++++++++++++++-----
 1 file changed, 47 insertions(+), 7 deletions(-)

diff --git a/product/ERP5/MovementGroup.py b/product/ERP5/MovementGroup.py
index 609f0f9042..3c766370f3 100755
--- a/product/ERP5/MovementGroup.py
+++ b/product/ERP5/MovementGroup.py
@@ -3,6 +3,7 @@
 # Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved.
 #                    Sebastien Robin <seb@nexedi.com>
 #                    Yoshinori Okuji <yo@nexedi.com>
+#                    Romain Courteaud <romain@nexedi.com>
 #
 # WARNING: This program as such is intended to be used by professional
 # programmers who take the whole responsability of assessing all potential
@@ -47,7 +48,6 @@ class RootMovementGroup:
     """
       This sets an appropriate nested class.
     """
-
     #LOG('RootGroup.setNestedClass, class_list:',0,class_list)
     for i in range(len(class_list)):
       #LOG('RootGroup.setNestedClass, class_list[i]:',0,class_list[i])
@@ -64,11 +64,14 @@ class RootMovementGroup:
     self.nested_class = None
     class_list = [RootMovementGroup] + list(class_list)
     self.setNestedClass(class_list=class_list)
-    self.movement_list = []
+    self._movement_list = []
     self.group_list = []
     if movement is not None :
       self.append(movement,class_list=class_list)
 
+  def getGroupList(self):
+    return self.group_list
+
   def appendGroup(self, movement,class_list=None):
     if self.nested_class is not None:
       #LOG('RootGroup.appendGroup, class_list',0,class_list)
@@ -76,7 +79,7 @@ class RootMovementGroup:
       self.group_list.append(nested_instance)
 
   def append(self,movement,class_list=None):
-    self.movement_list.append(movement)
+    self._movement_list.append(movement)
     movement_in_group = 0
     for group in self.group_list :
       if group.test(movement) :
@@ -87,18 +90,38 @@ class RootMovementGroup:
       #LOG('RootGroup.append, class_list',0,class_list)
       self.appendGroup(movement,class_list=class_list)
 
-allow_class(RootMovementGroup)
+  def setGroupEdit(self, **kw):
+    """
+      Store properties for the futur created object 
+    """
+    self._property_dict = kw
 
-class OrderMovementGroup(RootMovementGroup):
+  def getGroupEditDict(self):
+    """
+      Get property dict for the futur created object 
+    """
+    if hasattr(self, '_property_dict'):
+      return self._property_dict
+    else:
+      return {}
+
+  def getMovementList(self):
+    """
+      Return movement list in the current group
+    """
+    return self._movement_list
 
 
+allow_class(RootMovementGroup)
+
+class OrderMovementGroup(RootMovementGroup):
   def __init__(self,movement,**kw):
     #LOG('OrderMovementGroup.__init__, kw:',0,kw)
     RootMovementGroup.__init__(self,movement,**kw)
     if hasattr(movement, 'getRootAppliedRule'):
       # This is a simulation movement
       order_value = movement.getRootAppliedRule().getCausalityValue(
-                                                portal_type=movement.getPortalOrderTypeList())
+                              portal_type=movement.getPortalOrderTypeList())
       if order_value is None:
         # In some cases (ex. DeliveryRule), there is no order
         # we may consider a PackingList as the order in the OrderGroup
@@ -114,11 +137,12 @@ class OrderMovementGroup(RootMovementGroup):
       # for this cell or line
       order_relative_url = order_value.getRelativeUrl()
     self.order = order_relative_url
+    self.setGroupEdit(causality_value=order_value)
 
   def test(self,movement):
     if hasattr(movement, 'getRootAppliedRule'):
       order_value = movement.getRootAppliedRule().getCausalityValue(
-                                                  portal_type=movement.getPortalOrderTypeList())
+                        portal_type=movement.getPortalOrderTypeList())
 
       if order_value is None:
         # In some cases (ex. DeliveryRule), there is no order
@@ -153,6 +177,12 @@ class PathMovementGroup(RootMovementGroup):
     #LOG('PathGroup.__init__ source_section',0,self.source_section)
     self.destination_section = movement.getDestinationSection()
     #LOG('PathGroup.__init__ destination_section',0,self.destination_section)
+    self.setGroupEdit(
+        source_value=movement.getSourceValue(),
+        destination_value=movement.getDestinationValue(),
+        source_section_value=movement.getSourceSectionValue(),
+        destination_section_value=movement.getDestinationSectionValue(),
+    )
 
 
   def test(self,movement):
@@ -173,6 +203,10 @@ class DateMovementGroup(RootMovementGroup):
     RootMovementGroup.__init__(self,movement,**kw)
     self.start_date = movement.getStartDate()
     self.stop_date = movement.getStopDate()
+    self.setGroupEdit(
+        start_date=movement.getStartDate(),
+        stop_date=movement.getStopDate()
+    )
 
   def test(self,movement):
     if movement.getStartDate() == self.start_date and \
@@ -207,6 +241,9 @@ class ResourceMovementGroup(RootMovementGroup):
   def __init__(self,movement,**kw):
     RootMovementGroup.__init__(self,movement,**kw)
     self.resource = movement.getResource()
+    self.setGroupEdit(
+        resource_value=self.resource
+    )
 
   def test(self,movement):
     if movement.getResource() == self.resource :
@@ -251,6 +288,9 @@ class VariantMovementGroup(RootMovementGroup):
     if self.category_list is None:
       #LOG('VariantGroup __init__', 0, 'movement = %s, movement.showDict() = %s' % (repr(movement), repr(movement.showDict())))
       self.category_list = []
+    self.setGroupEdit(
+        variation_category_list=self.category_list
+    )
 
   def test(self,movement):
     # we must have the same number of categories
-- 
2.30.9