[Erp5-report] r29997 - /erp5/trunk/products/ERP5/interfaces/divergence_tester.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Sun Oct 25 20:47:37 CET 2009
Author: jp
Date: Sun Oct 25 20:47:37 2009
New Revision: 29997
URL: http://svn.erp5.org?rev=29997&view=rev
Log:
Progressing towards the completion of divergence testers API. It is now understood that divergence testers provide comparison functions which can be used both as a way to test divergence and to match existing simulation movements with prevision movements generated by rules.
Modified:
erp5/trunk/products/ERP5/interfaces/divergence_tester.py
Modified: erp5/trunk/products/ERP5/interfaces/divergence_tester.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/interfaces/divergence_tester.py?rev=29997&r1=29996&r2=29997&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/interfaces/divergence_tester.py [utf8] (original)
+++ erp5/trunk/products/ERP5/interfaces/divergence_tester.py [utf8] Sun Oct 25 20:47:37 2009
@@ -1,7 +1,8 @@
# -*- coding: utf-8 -*-
##############################################################################
#
-# Copyright (c) 2006 Nexedi SARL and Contributors. All Rights Reserved.
+# Copyright (c) 2006-2009 Nexedi SA and Contributors. All Rights Reserved.
+# Jean-Paul Smets-Solanes <jp at nexedi.com>
# Rafael Monnerat <rafael at nexedi.com>
#
# WARNING: This program as such is intended to be used by professional
@@ -34,17 +35,119 @@
class IDivergenceTester(Interface):
"""
- ERP5 Divergence Tester
+ Divergence Tester interface specification
+
+ All divergence testers in ERP5 must implement IDivergenceTester.
+ IDivergenceTester provides methods to test simulation movements
+ divergence with related delivery movements. A list of
+ explanation messages can be generated if needed, and used
+ to help users understand why a given delivery line and its related
+ simulation movements are divergent.
+
+ IDivergenceTester also provides methods to match movements
+ each other, based on comparison and hash keys. Movement matching
+ is required by Rules to decide which simulation movements should
+ be updated, deleted, or compensated.
+
+ IDivergenceTester provides helper methods to copy or update properties
+ between movements, from simulation to deliveries or from deliveries to
+ simulation.
"""
def test(simulation_movement):
"""
- This is the fast method to test, return 0 or 1.
- It depends if the simulation_movement is divergent or not.
+ Tests if simulation_movement is divergent. Returnn False (0)
+ or True (1).
+
+ If decision_movement is a simulation movement, use
+ the recorded properties instead of the native ones.
+
+ simulation_movement -- a simulation movement
"""
def explain(simulation_movement):
"""
- This method returns a list of messages that contains
- the divergence of the Delivery Line.
+ Returns a list of messages which explain the nature of
+ the divergence of simulation_movement with its related
+ delivery movement.
+
+ If decision_movement is a simulation movement, use
+ the recorded properties instead of the native ones.
+
+ simulation_movement -- a simulation movement
"""
+
+ def generateHashKey(movement):
+ """
+ Returns a hash key which can be used to optimise the
+ matching algorithm between movements. The purpose
+ of this hash key is to reduce the size of lists of
+ movements which need to be compared using the compare
+ method (quadratic complexity).
+
+ If decision_movement is a simulation movement, use
+ the recorded properties instead of the native ones.
+ """
+
+ def compare(prevision_movement, decision_movement):
+ """
+ Returns True if simulation_movement and delivery_movement
+ match. Returns False else. The method is asymetric and
+ the order of parameter matters. For example, a sourcing
+ rule may use a tester which makes sure that movements are
+ delivered no sooner than 2 weeks before production but
+ no later than the production date.
+
+ If decision_movement is a simulation movement, use
+ the recorded properties instead of the native ones.
+
+ prevision_movement -- a simulation movement (prevision)
+
+ decision_movement -- a delivery movement (decision)
+ """
+
+ def update(prevision_movement, decision_movement):
+ """
+ Updates decision_movement with properties from
+ prevision_movement so that next call to
+ compare returns True. This method is normally
+ invoked to copy properties from simulation movements
+ to delivery movements. It is also invoked to copy
+ properties from temp simulation movements of
+ Aggregated Amount Lists to pre-existing simulation
+ movements.
+
+ If decision_movement is a simulation movement, then
+ do not update recorded properties.
+
+ prevision_movement -- a simulation movement (prevision)
+
+ decision_movement -- a delivery movement (decision)
+
+ NOTE: recorded (forced) properties are not updated by
+ expand.
+
+ NOTE2: it is still unkown how to update properties from
+ a simulation movement to the relevant level of
+ delivery / line / cell.
+ """
+
+ def accept(simulation_movement):
+ """
+ Copies the properties handled by the divergence tester
+ from the related delivery movement to simulation_movement.
+
+ NOTE: the future existence of this method is still unknown
+ because it is likely to be implemented in TargetSolver
+ instead.
+ """
+
+ def adopt(simulation_movement):
+ """
+ Copies the properties handled by the divergence tester
+ from simulation_movement to the related delivery movement
+
+ NOTE: the future existence of this method is still unknown
+ because it is likely to be implemented in TargetSolver
+ instead.
+ """
More information about the Erp5-report
mailing list