[Erp5-report] r31196 kazuhiko - /erp5/trunk/products/ERP5/mixin/rule.py

nobody at svn.erp5.org nobody at svn.erp5.org
Wed Dec 9 16:09:22 CET 2009


Author: kazuhiko
Date: Wed Dec  9 16:09:21 2009
New Revision: 31196

URL: http://svn.erp5.org?rev=31196&view=rev
Log:
Rule should be IDivergenceController.

Modified:
    erp5/trunk/products/ERP5/mixin/rule.py

Modified: erp5/trunk/products/ERP5/mixin/rule.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/mixin/rule.py?rev=31196&r1=31195&r2=31196&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/mixin/rule.py [utf8] (original)
+++ erp5/trunk/products/ERP5/mixin/rule.py [utf8] Wed Dec  9 16:09:21 2009
@@ -50,6 +50,7 @@
 
   # Declarative interfaces
   zope.interface.implements(interfaces.IRule,
+                            interfaces.IDivergenceController,
                             interfaces.IMovementCollectionUpdater,)
 
   # Portal Type of created children
@@ -100,6 +101,40 @@
     # And forward expand
     for movement in applied_rule.getMovementList():
       movement.expand(**kw)
+
+  # Implementation of IDivergenceController
+  security.declareProtected( Permissions.AccessContentsInformation,
+                            'isDivergent')
+  def isDivergent(self, movement, ignore_list=[]):
+    """
+    Returns true if the Simulation Movement is divergent comparing to
+    the delivery value
+    """
+    delivery = movement.getDeliveryValue()
+    if delivery is None:
+      return False
+    if len(self.getDivergenceList(movement)) == 0:
+      return False
+    else:
+      return True
+
+  security.declareProtected(Permissions.View, 'getDivergenceList')
+  def getDivergenceList(self, movement):
+    """
+    Returns a list of divergences of the movements provided
+    in delivery_or_movement.
+
+    movement -- a movement, a delivery, a simulation movement,
+                or a list thereof
+    """
+    result_list = []
+    for divergence_tester in self._getDivergenceTesterList():
+      result = divergence_tester.explain(movement)
+      if isinstance(result, (list, tuple)): # for compatibility
+        result_list.extend(result)
+      elif result is not None:
+        result_list.append(result)
+    return result_list
 
   # Implementation of IMovementCollectionUpdater
   def getMovementCollectionDiff(self, context, rounding=False, movement_generator=None):




More information about the Erp5-report mailing list