[Erp5-report] r11285 - /erp5/trunk/products/ERP5/Document/
nobody at svn.erp5.org
nobody at svn.erp5.org
Tue Nov 14 11:06:18 CET 2006
Author: romain
Date: Tue Nov 14 11:06:13 2006
New Revision: 11285
URL: http://svn.erp5.org?rev=11285&view=rev
Log:
Causality is now tested by Divergence Tester.
Rules now need to include divergence testers.
Modified:
erp5/trunk/products/ERP5/Document/Delivery.py
erp5/trunk/products/ERP5/Document/DeliveryLine.py
erp5/trunk/products/ERP5/Document/DeliveryRule.py
erp5/trunk/products/ERP5/Document/InvoiceTransactionRule.py
erp5/trunk/products/ERP5/Document/Movement.py
erp5/trunk/products/ERP5/Document/Rule.py
Modified: erp5/trunk/products/ERP5/Document/Delivery.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/Delivery.py?rev=11285&r1=11284&r2=11285&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/Delivery.py (original)
+++ erp5/trunk/products/ERP5/Document/Delivery.py Tue Nov 14 11:06:13 2006
@@ -284,7 +284,7 @@
return 1
security.declareProtected(Permissions.View, 'isDivergent')
- def isDivergent(self,fast=0,**kw):
+ def isDivergent(self, fast=0, **kw):
"""
Returns 1 if the target is not met according to the current information
After and edit, the isOutOfTarget will be checked. If it is 1,
@@ -303,6 +303,16 @@
if movement.isDivergent():
return 1
return 0
+
+ security.declareProtected(Permissions.View, 'getDivergenceList')
+ def getDivergenceList(self):
+ """
+ Return a list of messages that contains the divergences
+ """
+ divergence_list = []
+ for movement in self.getMovementList():
+ divergence_list.extend(movement.getDivergenceList())
+ return divergence_list
def updateCausalityState(self,**kw):
"""
@@ -554,8 +564,8 @@
# Applied Rule stuff
def updateAppliedRule(self, rule_id,force=0,**kw):
"""
- Create a new Applied Rule is none is related, or call expand
- on the existing one.
+ Create a new Applied Rule is none is related, or call expand
+ on the existing one.
"""
if (rule_id is not None) and\
(self.getSimulationState() not in \
Modified: erp5/trunk/products/ERP5/Document/DeliveryLine.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/DeliveryLine.py?rev=11285&r1=11284&r2=11285&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/DeliveryLine.py (original)
+++ erp5/trunk/products/ERP5/Document/DeliveryLine.py Tue Nov 14 11:06:13 2006
@@ -69,6 +69,7 @@
, PropertySheet.Price
, PropertySheet.VariationRange
, PropertySheet.ItemAggregation
+ , PropertySheet.SortIndex
)
# Multiple inheritance definition
@@ -217,13 +218,25 @@
emit targetUnreachable !
"""
+ if self.getDivergenceList() == []:
+ return 0
+ else:
+ return 1
+
+ security.declareProtected(Permissions.View, 'getDivergentList')
+ def getDivergenceList(self):
+ """
+ Return a list of messages that contains the divergences
+ """
+ divergence_list = []
if self.hasCellContent():
- for cell in self.contentValues(filter={'portal_type': self.getPortalDeliveryMovementTypeList()}):
- if cell.isDivergent():
- return 1
+ for cell in self.contentValues(filter={
+ 'portal_type': self.getPortalDeliveryMovementTypeList()}):
+ divergence_list.extend(cell.getDivergenceList())
+ return divergence_list
else:
- return Movement.isDivergent(self)
-
+ return Movement.getDivergenceList(self)
+
def applyToDeliveryLineRelatedMovement(self, portal_type='Simulation Movement', method_id = 'expand'):
# Find related in simulation
for my_simulation_movement in self.getDeliveryRelatedValueList(
Modified: erp5/trunk/products/ERP5/Document/DeliveryRule.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/DeliveryRule.py?rev=11285&r1=11284&r2=11285&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/DeliveryRule.py (original)
+++ erp5/trunk/products/ERP5/Document/DeliveryRule.py Tue Nov 14 11:06:13 2006
@@ -89,9 +89,8 @@
delivery_movement_list = delivery.getMovementList()
# Check existing movements
for movement in applied_rule.contentValues(portal_type=movement_type):
- if movement.getLastExpandSimulationState() not in \
- delivery.getPortalCurrentInventoryStateList():
-
+ if movement.getLastExpandSimulationState() in \
+ delivery.getPortalDraftOrderStateList():
movement_delivery = movement.getDeliveryValue()
if not self._isTreeDelivered([movement], ignore_first=1) and \
movement_delivery not in delivery_movement_list:
@@ -184,7 +183,7 @@
# Solvers
security.declareProtected(Permissions.AccessContentsInformation, 'isStable')
- def isStable(self, movement):
+ def isStable(self, applied_rule):
"""
Checks that the applied_rule is stable
"""
Modified: erp5/trunk/products/ERP5/Document/InvoiceTransactionRule.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/InvoiceTransactionRule.py?rev=11285&r1=11284&r2=11285&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/InvoiceTransactionRule.py (original)
+++ erp5/trunk/products/ERP5/Document/InvoiceTransactionRule.py Tue Nov 14 11:06:13 2006
@@ -185,7 +185,6 @@
# Pass to base class
Rule.expand(self, applied_rule, force=force, **kw)
-
# Matrix related
security.declareProtected( Permissions.ModifyPortalContent,
@@ -221,24 +220,24 @@
and blocks expansion process
"""
- # Solvers
- security.declareProtected(Permissions.View, 'isDivergent')
- def isDivergent(self, applied_rule):
- """
- Returns 1 if divergent rule
- """
-
- security.declareProtected(Permissions.View, 'getDivergenceList')
- def getDivergenceList(self, applied_rule):
- """
- Returns a list Divergence descriptors
- """
-
- security.declareProtected(Permissions.View, 'getSolverList')
- def getSolverList(self, applied_rule):
- """
- Returns a list Divergence solvers
- """
+# # Solvers
+# security.declareProtected(Permissions.View, 'isDivergent')
+# def isDivergent(self, applied_rule):
+# """
+# Returns 1 if divergent rule
+# """
+#
+# security.declareProtected(Permissions.View, 'getDivergenceList')
+# def getDivergenceList(self, applied_rule):
+# """
+# Returns a list Divergence descriptors
+# """
+#
+# security.declareProtected(Permissions.View, 'getSolverList')
+# def getSolverList(self, applied_rule):
+# """
+# Returns a list Divergence solvers
+# """
# Deliverability / orderability
def isOrderable(self, m):
Modified: erp5/trunk/products/ERP5/Document/Movement.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/Movement.py?rev=11285&r1=11284&r2=11285&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/Movement.py (original)
+++ erp5/trunk/products/ERP5/Document/Movement.py Tue Nov 14 11:06:13 2006
@@ -38,7 +38,7 @@
from Products.ERP5.Document.Amount import Amount
-from zLOG import LOG, WARNING
+from zLOG import LOG, WARNING, DEBUG
class Movement(XMLObject, Amount):
"""
@@ -423,6 +423,16 @@
return 1
return 0
+ def getDivergenceList(self):
+ """
+ Return a list of messages that contains the divergences
+ """
+ divergence_list = []
+ for simulation_movement in self.getDeliveryRelatedValueList():
+ divergence_list.extend(simulation_movement.getDivergenceList())
+
+ return divergence_list
+
security.declareProtected(Permissions.AccessContentsInformation,
'isFrozen')
def isFrozen(self):
@@ -435,7 +445,7 @@
# XXX Hardcoded
# Maybe, we should use getPortalCurrentInventoryStateList
# and another portal method for cancelled (and deleted)
- #LOG("Movement, isFrozen", WARNING, "Hardcoded state list")
+# LOG("Movement, isFrozen", DEBUG, "Hardcoded state list")
if self.getSimulationState() in ('stopped', 'delivered', 'cancelled'):
return 1
if self._baseIsFrozen() == 0:
Modified: erp5/trunk/products/ERP5/Document/Rule.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/Rule.py?rev=11285&r1=11284&r2=11285&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/Rule.py (original)
+++ erp5/trunk/products/ERP5/Document/Rule.py Tue Nov 14 11:06:13 2006
@@ -175,53 +175,36 @@
# Solvers
security.declareProtected( Permissions.AccessContentsInformation,
'isDivergent')
- def isDivergent(self, movement, ignore_list=[]):
+ def isDivergent(self, sim_mvt, ignore_list=[]):
"""
Returns true if the Simulation Movement is divergent comparing to
the delivery value
"""
- delivery = movement.getDeliveryValue()
+ delivery = sim_mvt.getDeliveryValue()
if delivery is None:
return 0
+
+ if self.getDivergenceList(sim_mvt) == []:
+ return 0
+ else:
+ return 1
- default_match_list = (
- 'source_section', 'destination_section', 'source',
- 'destination', 'resource', 'variation_category_list',
- 'aggregate_list', 'start_date', 'stop_date')
- match_list = [x for x in default_match_list if x not in ignore_list]
- for prop in match_list:
- if movement.getProperty(prop) != delivery.getProperty(prop):
- return 1
-
- d_quantity = delivery.getQuantity()
- quantity = movement.getCorrectedQuantity()
- d_error = movement.getDeliveryError()
- if quantity is None:
- if d_quantity is None:
- return 0
- return 1
- if d_quantity is None:
- d_quantity = 0
- if d_error is None:
- d_error = 0
- delivery_ratio = movement.getDeliveryRatio()
- # if the delivery_ratio is None, make sure that we are
- # divergent even if the delivery quantity is 0
- if delivery_ratio is not None:
- d_quantity *= delivery_ratio
- if delivery_ratio == 0 and quantity > 0:
- return 1
- if d_quantity != quantity + d_error:
- return 1
- return 0
-
-# security.declareProtected(Permissions.View, 'getDivergenceList')
-# def getDivergenceList(self, applied_rule):
-# """
-# Returns a list Divergence descriptors
-# """
-#
+ security.declareProtected(Permissions.View, 'getDivergenceList')
+ def getDivergenceList(self, sim_mvt):
+ """
+ Return a list of messages that contains the divergences.
+ """
+ result_list = []
+ for divergence_tester in self.contentValues(
+ portal_type=self.getPortalDivergenceTesterTypeList()):
+ result = divergence_tester.explain(sim_mvt)
+ result_list.extend(result)
+ return result_list
+
+ # XXX getSolverList is not part of the API and should be removed.
+ # Use getDivergenceList instead.
# security.declareProtected(Permissions.View, 'getSolverList')
+
# def getSolverList(self, applied_rule):
# """
# Returns a list Divergence solvers
@@ -330,8 +313,8 @@
p_matched_list.append(movement)
# XXX hardcoded ...
- LOG("Rule, _getCompensatedMovementList", WARNING,
- "Hardcoded properties check")
+# LOG("Rule, _getCompensatedMovementList", WARNING,
+# "Hardcoded properties check")
# Movements exist, we'll try to make them match the prevision
if p_matched_list != []:
# Check the quantity
More information about the Erp5-report
mailing list