[Erp5-report] r32059 kazuhiko - /erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/

nobody at svn.erp5.org nobody at svn.erp5.org
Thu Jan 28 14:04:13 CET 2010


Author: kazuhiko
Date: Thu Jan 28 14:04:09 2010
New Revision: 32059

URL: http://svn.erp5.org?rev=32059&view=rev
Log:
do not include movements that are already simulated by other rules.

Modified:
    erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/DeliveryRule.py

Modified: erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/DeliveryRule.py
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/DeliveryRule.py?rev=32059&r1=32058&r2=32059&view=diff
==============================================================================
--- erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/DeliveryRule.py [utf8] (original)
+++ erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/DeliveryRule.py [utf8] Thu Jan 28 14:04:09 2010
@@ -119,5 +119,36 @@
     if delivery is None:
       return []
     else:
-      return delivery.getMovementList(
-        portal_type=delivery.getPortalDeliveryMovementTypeList())
+      ret = []
+      existing_movement_list = context.objectValues()
+      for movement in delivery.getMovementList(
+        portal_type=delivery.getPortalDeliveryMovementTypeList()):
+        simulation_movement = self._getDeliveryRelatedSimulationMovement(movement)
+        if simulation_movement is None or \
+               simulation_movement in existing_movement_list:
+          ret.append(movement)
+      return ret
+
+  def _getDeliveryRelatedSimulationMovement(self, delivery_movement):
+    """Helper method to get the delivery related simulation movement.
+    This method is more robust than simply calling getDeliveryRelatedValue
+    which will not work if simulation movements are not indexed.
+    """
+    simulation_movement = delivery_movement.getDeliveryRelatedValue()
+    if simulation_movement is not None:
+      return simulation_movement
+    # simulation movement was not found, maybe simply because it's not indexed
+    # yet. We'll look in the simulation tree and try to find it anyway before
+    # creating another simulation movement.
+    # Try to find the one from trade model rule, which is the most common case
+    # where we may expand again before indexation of simulation movements is
+    # finished.
+    delivery = delivery_movement.getExplanationValue()
+    for movement in delivery.getMovementList():
+      related_simulation_movement = movement.getDeliveryRelatedValue()
+      if related_simulation_movement is not None:
+        for applied_rule in related_simulation_movement.contentValues():
+          for simulation_movement in applied_rule.contentValues():
+            if simulation_movement.getDeliveryValue() == delivery_movement:
+              return simulation_movement
+    return None




More information about the Erp5-report mailing list