[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