[Erp5-report] r31867 kazuhiko - /erp5/trunk/products/ERP5/Document/AcceptSolver.py

nobody at svn.erp5.org nobody at svn.erp5.org
Thu Jan 21 11:12:13 CET 2010


Author: kazuhiko
Date: Thu Jan 21 11:12:12 2010
New Revision: 31867

URL: http://svn.erp5.org?rev=31867&view=rev
Log:
accept solver should propagate the change to parent if not frozen.

Modified:
    erp5/trunk/products/ERP5/Document/AcceptSolver.py

Modified: erp5/trunk/products/ERP5/Document/AcceptSolver.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/AcceptSolver.py?rev=31867&r1=31866&r2=31867&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/AcceptSolver.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Document/AcceptSolver.py [utf8] Thu Jan 21 11:12:12 2010
@@ -66,6 +66,7 @@
     """
     solved_property = self._getPortalTypeValue().getTestedProperty()
     for movement in self.getDeliveryValueList():
+      import pdb; pdb.set_trace()
       new_value = movement.getProperty(solved_property)
       simulation_movement_list = movement.getDeliveryRelatedValueList()
       # if movement here is a delivery, we need to find simulation
@@ -75,15 +76,30 @@
           [x.getDeliveryRelatedValueList() \
            for x in self.getDeliveryValue().getMovementList()], [])
       for simulation_movement in simulation_movement_list:
-        if not simulation_movement.isPropertyRecorded(solved_property):
-          simulation_movement.recordProperty(solved_property)
         # XXX hard coded
         if solved_property == 'quantity':
-          simulation_movement.setProperty(
-            solved_property,
-            new_value * simulation_movement.getDeliveryRatio())
+          new_quantity = new_value * simulation_movement.getDeliveryRatio()
+          value_dict = {'quantity':new_quantity}
         else:
-          simulation_movement.setProperty(solved_property, new_value)
+          value_dict = {solved_property:new_value}
+        self._solveRecursively(simulation_movement, value_dict)
         simulation_movement.expand()
     # Finish solving
     self.succeed()
+
+  def _solveRecursively(self, simulation_movement, value_dict=None):
+    """
+      Update value of the current simulation movement, and update
+      his parent movement.
+    """
+    for property_id in value_dict.iterkeys():
+      if not simulation_movement.isPropertyRecorded(property_id):
+        simulation_movement.recordProperty(property_id)
+    simulation_movement.edit(**value_dict)
+
+    applied_rule = simulation_movement.getParentValue()
+    parent_movement = applied_rule.getParentValue()
+    if parent_movement.getPortalType() == 'Simulation Movement' and \
+           not parent_movement.isFrozen():
+      # backtrack to the parent movement while it is not frozen
+      self._solveRecursively(parent_movement, value_dict=value_dict)




More information about the Erp5-report mailing list