From a021f476b33eee9315fcbc9b1b9bdf47dc7d9376 Mon Sep 17 00:00:00 2001 From: Kazuhiko Shiozaki <kazuhiko@nexedi.com> Date: Wed, 9 Dec 2009 15:09:21 +0000 Subject: [PATCH] Rule should be IDivergenceController. git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@31196 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ERP5/mixin/rule.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/product/ERP5/mixin/rule.py b/product/ERP5/mixin/rule.py index 11fa3bddb7..02d0d83251 100644 --- a/product/ERP5/mixin/rule.py +++ b/product/ERP5/mixin/rule.py @@ -50,6 +50,7 @@ class RuleMixin: # Declarative interfaces zope.interface.implements(interfaces.IRule, + interfaces.IDivergenceController, interfaces.IMovementCollectionUpdater,) # Portal Type of created children @@ -101,6 +102,40 @@ class RuleMixin: 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): """ -- 2.30.9