[Erp5-report] r32472 kazuhiko - /erp5/trunk/products/ERP5/Document/
nobody at svn.erp5.org
nobody at svn.erp5.org
Fri Feb 12 07:51:00 CET 2010
Author: kazuhiko
Date: Fri Feb 12 07:50:59 2010
New Revision: 32472
URL: http://svn.erp5.org?rev=32472&view=rev
Log:
* simplify Delivery Rule and Order Rule.
* set default matching property list for compatibility.
Modified:
erp5/trunk/products/ERP5/Document/DeliveryRule.py
erp5/trunk/products/ERP5/Document/OrderRule.py
Modified: erp5/trunk/products/ERP5/Document/DeliveryRule.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/DeliveryRule.py?rev=32472&r1=32471&r2=32472&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/DeliveryRule.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Document/DeliveryRule.py [utf8] Fri Feb 12 07:50:59 2010
@@ -61,74 +61,7 @@
Else if the movement is not in current state, it can be modified.
Else, it cannot be modified.
"""
- if self._isBPM():
- Rule.expand(self, applied_rule,
- delivery_movement_type_list=delivery_movement_type_list, **kw)
- return
- existing_movement_list = []
- immutable_movement_list = []
- delivery = applied_rule.getDefaultCausalityValue()
- if delivery_movement_type_list is None:
- delivery_movement_type_list = self.getPortalDeliveryMovementTypeList()
- if delivery is not None:
- delivery_movement_list = delivery.getMovementList(
- portal_type=delivery_movement_type_list)
- # Check existing movements
- for movement in applied_rule.contentValues(portal_type=self.movement_type):
- if movement.getLastExpandSimulationState() not in \
- self.getPortalCurrentInventoryStateList():
- # XXX: This condition is quick and dirty hack - knowing if Simulation
- # Movement is frozen shall not be ever hardcoded, this is BPM
- # configuration
- movement_delivery = movement.getDeliveryValue()
- if not movement._isTreeDelivered(ignore_first=1) and \
- movement_delivery not in delivery_movement_list:
- applied_rule._delObject(movement.getId())
- else:
- existing_movement_list.append(movement)
- else:
- existing_movement_list.append(movement)
- immutable_movement_list.append(movement)
-
- # Create or modify movements
- for deliv_mvt in delivery_movement_list:
- sim_mvt = self._getDeliveryRelatedSimulationMovement(deliv_mvt)
- if sim_mvt is None:
- # create a new deliv_mvt
- if deliv_mvt.getParentUid() == deliv_mvt.getExplanationUid():
- # We are on a line
- new_id = deliv_mvt.getId()
- else:
- # We are on a cell
- new_id = "%s_%s" % (deliv_mvt.getParentId(), deliv_mvt.getId())
- # Generate the simulation deliv_mvt
- property_dict = self._getExpandablePropertyDict(
- applied_rule, deliv_mvt)
- new_sim_mvt = applied_rule.newContent(
- portal_type=self.movement_type,
- id=new_id,
- order_value=deliv_mvt,
- order_ratio=1,
- delivery_value=deliv_mvt,
- delivery_ratio=1,
- **property_dict)
- elif sim_mvt in existing_movement_list:
- if sim_mvt not in immutable_movement_list:
- # modification allowed
- property_dict = self._getExpandablePropertyDict(
- applied_rule, deliv_mvt)
- sim_mvt.edit(
- delivery_value=deliv_mvt,
- delivery_ratio=1,
- **property_dict)
- else:
- # modification disallowed, must compensate
- pass
-
- # Now we can set the last expand simulation state to the current state
- applied_rule.setLastExpandSimulationState(delivery.getSimulationState())
- # Pass to base class
- Rule.expand(self, applied_rule, **kw)
+ return Rule._expand(self, applied_rule, **kw)
def _getDeliveryRelatedSimulationMovement(self, delivery_movement):
"""Helper method to get the delivery related simulation movement.
@@ -268,3 +201,19 @@
'order': movement.getRelativeUrl(),
'delivery': movement.getRelativeUrl(),
}
+
+ security.declareProtected(Permissions.AccessContentsInformation,
+ 'getMatchingPropertyList')
+ def getMatchingPropertyList(self, default=None):
+ """
+ Return a list of properties used in expand.
+ """
+ property_list = self._baseGetMatchingPropertyList()
+ # For backward compatibility, we keep for some time the list
+ # of hardcoded properties. Theses properties should now be
+ # defined on the rule itself
+ if len(property_list) == 0:
+ LOG("Invoice Transaction Rule , getMatchingPropertyList", WARNING,
+ "Hardcoded properties set, please define your rule correctly")
+ property_list=['delivery',]
+ return property_list
Modified: erp5/trunk/products/ERP5/Document/OrderRule.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/OrderRule.py?rev=32472&r1=32471&r2=32472&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/OrderRule.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Document/OrderRule.py [utf8] Fri Feb 12 07:50:59 2010
@@ -62,75 +62,7 @@
delivered child, and is in order, it can be modified.
Else, it cannot be modified.
"""
- if self._isBPM():
- DeliveryRule.expand(self, applied_rule, force=force, **kw)
- return
-
- existing_movement_list = []
- immutable_movement_list = []
- order = applied_rule.getDefaultCausalityValue()
- if order is not None:
- order_movement_list = order.getMovementList(
- portal_type=order.getPortalOrderMovementTypeList())
- # check existing movements
- for movement in applied_rule.contentValues(portal_type=self.movement_type):
- if (not movement.getLastExpandSimulationState() in
- order.getPortalReservedInventoryStateList() and
- not movement.getLastExpandSimulationState() in
- order.getPortalCurrentInventoryStateList()) and \
- not movement._isTreeDelivered():
-
- movement_order = movement.getOrderValue()
- if movement_order in order_movement_list:
- existing_movement_list.append(movement)
- else:
- applied_rule._delObject(movement.getId())
- else:
- existing_movement_list.append(movement)
- immutable_movement_list.append(movement)
-
- # this dict simulates getOrderRelatedValue, but it will not work if an
- # order was generated from multiple applied rules
- order_movement_dict = {}
- for s_m in applied_rule.objectValues():
- order_movement = s_m.getOrderValue()
- if order_movement is not None:
- order_movement_dict[order_movement.getPath()] = s_m
- # Create or modify movements
- for movement in order_movement_list:
- related_order = order_movement_dict.get(movement.getPath(), None)
- if related_order is None:
- related_order = movement.getOrderRelatedValue()
- property_dict = self._getExpandablePropertyDict(
- applied_rule, movement)
- if related_order is None:
- # Generate a simulation movement
- # Do not try to create meaningfull IDs, as order movement can be
- # hierarchicals
- applied_rule.newContent(
- portal_type=self.movement_type,
- order_value=movement,
- order_ratio=1,
- delivery_ratio=1,
- **property_dict )
-
- elif related_order in existing_movement_list:
- if related_order not in immutable_movement_list:
- # modification allowed
- related_order.edit(
- order_value=movement,
- **property_dict)
-
- #related_order.setLastExpandSimulationState(order.getSimulationState())
-
- else:
- # modification disallowed, must compensate
- pass
-
- # Now we can set the last expand simulation state to the current state
- applied_rule.setLastExpandSimulationState(order.getSimulationState())
- # Pass to base class
- Rule.expand(self, applied_rule, force=force, **kw)
+ return Rule._expand(self, applied_rule, force=force, **kw)
security.declareProtected(Permissions.AccessContentsInformation, 'isStable')
def isStable(self, applied_rule):
@@ -185,6 +117,22 @@
)
return property_list
+ security.declareProtected(Permissions.AccessContentsInformation,
+ 'getMatchingPropertyList')
+ def getMatchingPropertyList(self, default=None):
+ """
+ Return a list of properties used in expand.
+ """
+ property_list = self._baseGetMatchingPropertyList()
+ # For backward compatibility, we keep for some time the list
+ # of hardcoded properties. Theses properties should now be
+ # defined on the rule itself
+ if len(property_list) == 0:
+ LOG("Invoice Transaction Rule , getMatchingPropertyList", WARNING,
+ "Hardcoded properties set, please define your rule correctly")
+ property_list=['order',]
+ return property_list
+
def _getInputMovementList(self, applied_rule):
"""Input movement list comes from order"""
order = applied_rule.getDefaultCausalityValue()
More information about the Erp5-report
mailing list