[Erp5-report] r6354 - /erp5/trunk/products/ERP5/TargetSolver/
nobody at svn.erp5.org
nobody at svn.erp5.org
Thu Mar 30 15:54:15 CEST 2006
Author: romain
Date: Thu Mar 30 15:54:11 2006
New Revision: 6354
URL: http://svn.erp5.org?rev=6354&view=rev
Log:
Add TransformationSourcingCopyToTarget, used to propagate aggregate relation,
in sourcing part of the simulation.
Added:
erp5/trunk/products/ERP5/TargetSolver/TransformationSourcingCopyToTarget.py
Modified:
erp5/trunk/products/ERP5/TargetSolver/CopyToTarget.py
Modified: erp5/trunk/products/ERP5/TargetSolver/CopyToTarget.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/TargetSolver/CopyToTarget.py?rev=6354&r1=6353&r2=6354&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/TargetSolver/CopyToTarget.py (original)
+++ erp5/trunk/products/ERP5/TargetSolver/CopyToTarget.py Thu Mar 30 15:54:11 2006
@@ -28,7 +28,6 @@
##############################################################################
from TargetSolver import TargetSolver
-from zLOG import LOG
class CopyToTarget(TargetSolver):
"""
@@ -36,9 +35,9 @@
only acceptable for root movements. The meaning of
this solver of other movements is far from certain.
"""
- def solve(self, movement):
+ def _generateValueDeltaDict(self, movement):
"""
- Adopt values as new target
+ Get interesting value
"""
# Get interesting value
old_quantity = movement.getQuantity()
@@ -58,33 +57,57 @@
start_date_delta = new_start_date - old_start_date
if new_stop_date is not None and old_stop_date is not None:
stop_date_delta = new_stop_date - old_stop_date
+ return {
+ 'quantity_ratio': quantity_ratio,
+ 'start_date_delta': start_date_delta,
+ 'stop_date_delta': stop_date_delta,
+ }
+
+ def solve(self, movement):
+ """
+ Adopt values as new target
+ """
+ value_dict = self._generateValueDeltaDict(movement)
# Modify recursively simulation movement
- self._recursivelySolve(movement, quantity_ratio=quantity_ratio,
- start_date_delta=start_date_delta,
- stop_date_delta=stop_date_delta)
+ self._recursivelySolve(movement, **value_dict)
- def _recursivelySolve(self, movement, quantity_ratio=1, start_date_delta=0,
- stop_date_delta=0):
+ def _generateValueDict(self, movement, quantity_ratio=1,
+ start_date_delta=0, stop_date_delta=0,
+ **value_delta_dict):
+ """
+ Generate values to save on movement.
+ """
+ value_dict = {}
+ # Modify quantity, start_date, stop_date
+ start_date = movement.getStartDate()
+ if start_date is not None:
+ value_dict['start_date'] = start_date + start_date_delta
+ stop_date = movement.getStopDate()
+ if stop_date is not None:
+ value_dict['stop_date'] = stop_date + stop_date_delta
+ value_dict['quantity'] = movement.getQuantity() * quantity_ratio
+ return value_dict
+
+ def _getParentParameters(self, movement,
+ **value_delta_dict):
+ """
+ Get parent movement, and its value delta dict.
+ """
+ applied_rule = movement.getParent()
+ parent_movement = applied_rule.getParent()
+ if parent_movement.getPortalType() != "Simulation Movement":
+ parent_movement = None
+ return parent_movement, value_delta_dict
+
+ def _recursivelySolve(self, movement, **value_delta_dict):
"""
Update value of the current simulation movement, and update his parent
movement.
"""
- # Modify quantity, start_date, stop_date
- start_date = movement.getStartDate()
- if start_date is not None:
- start_date = start_date + start_date_delta
- stop_date = movement.getStopDate()
- if stop_date is not None:
- stop_date = stop_date + stop_date_delta
- movement.edit(
- quantity=movement.getQuantity() * quantity_ratio,
- start_date=start_date,
- stop_date=stop_date
- )
- applied_rule = movement.getParent()
- parent_movement = applied_rule.getParent()
- if parent_movement.getPortalType() == "Simulation Movement":
+ value_dict = self._generateValueDict(movement, **value_delta_dict)
+ movement.edit(**value_dict)
+ parent_movement, parent_value_delta_dict = \
+ self._getParentParameters(movement, **value_delta_dict)
+ if parent_movement is not None:
# Modify the parent movement
- self._recursivelySolve(parent_movement, quantity_ratio=quantity_ratio,
- start_date_delta=start_date_delta,
- stop_date_delta=stop_date_delta)
+ self._recursivelySolve(parent_movement, **parent_value_delta_dict)
Added: erp5/trunk/products/ERP5/TargetSolver/TransformationSourcingCopyToTarget.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/TargetSolver/TransformationSourcingCopyToTarget.py?rev=6354&view=auto
==============================================================================
--- erp5/trunk/products/ERP5/TargetSolver/TransformationSourcingCopyToTarget.py (added)
+++ erp5/trunk/products/ERP5/TargetSolver/TransformationSourcingCopyToTarget.py Thu Mar 30 15:54:11 2006
@@ -1,0 +1,69 @@
+##############################################################################
+#
+# Copyright (c) 2006 Nexedi SARL and Contributors. All Rights Reserved.
+# Romain Courteaud <romain at nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# garantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+##############################################################################
+
+from CopyToTarget import CopyToTarget
+
+class TransformationSourcingCopyToTarget(CopyToTarget):
+ """
+ Copy values simulation movement as target, and
+ recursively solve the sourcing tree.
+ """
+ def _generateValueDeltaDict(self, movement):
+ """
+ Get interesting value
+ """
+ value_dict = CopyToTarget._generateValueDict(self, movement)
+ value_dict.update({
+ 'aggregate_list': movement.getDeliveryValue().getAggregateList(),
+ })
+ return value_dict
+
+ def _generateValueDict(self, movement, aggregate_list=None,
+ **value_delta_dict):
+ """
+ Generate values to save on movement.
+ """
+ value_dict = CopyToTarget._generateValueDict(self, movement,
+ **value_delta_dict)
+ # Modify aggregate_list
+ if aggregate_list is not None:
+ value_dict['aggregate_list'] = aggregate_list
+ return value_dict
+
+ def _getParentParameters(self, movement,
+ **value_delta_dict):
+ """
+ Get parent movement, and its value delta dict.
+ """
+ applied_rule = movement.getParent()
+ rule = applied_rule.getSpecialiseValue()
+ if rule.getPortalType() != "Transformation Sourcing Rule":
+ value_delta_dict.pop('aggregate_list', None)
+ return CopyToTarget._getParentParameters(self, movement,
+ **value_delta_dict)
+
More information about the Erp5-report
mailing list