[Erp5-report] r33334 yo - /erp5/trunk/products/ERP5/Document/
nobody at svn.erp5.org
nobody at svn.erp5.org
Wed Mar 3 15:55:33 CET 2010
Author: yo
Date: Wed Mar 3 15:55:33 2010
New Revision: 33334
URL: http://svn.erp5.org?rev=33334&view=rev
Log:
Make OrderBuilder.searchMovementList more similar to DeliveryBuilder.searchMovementList (i.e. customizable). Move SelectMethodError and SelectMovementError from DeliveryBuilder to OrderBuilder, as SelectMethodError is now used in OrderBuilder as well, and it is easier to put them in OrderBuilder to prevent circular dependencies.
Modified:
erp5/trunk/products/ERP5/Document/DeliveryBuilder.py
erp5/trunk/products/ERP5/Document/OrderBuilder.py
Modified: erp5/trunk/products/ERP5/Document/DeliveryBuilder.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/DeliveryBuilder.py?rev=33334&r1=33333&r2=33334&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/DeliveryBuilder.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Document/DeliveryBuilder.py [utf8] Wed Mar 3 15:55:33 2010
@@ -28,11 +28,9 @@
from AccessControl import ClassSecurityInfo
from Products.ERP5Type import Permissions, PropertySheet
-from Products.ERP5.Document.OrderBuilder import OrderBuilder
+from Products.ERP5.Document.OrderBuilder import OrderBuilder, \
+ SelectMethodError, SelectMovementError
from Products.ERP5Type.UnrestrictedMethod import UnrestrictedMethod
-
-class SelectMethodError(Exception): pass
-class SelectMovementError(Exception): pass
class DeliveryBuilder(OrderBuilder):
"""
Modified: erp5/trunk/products/ERP5/Document/OrderBuilder.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/OrderBuilder.py?rev=33334&r1=33333&r2=33334&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/OrderBuilder.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Document/OrderBuilder.py [utf8] Wed Mar 3 15:55:33 2010
@@ -41,6 +41,9 @@
class CollectError(Exception): pass
class MatrixError(Exception): pass
class DuplicatedPropertyDictKeysError(Exception): pass
+
+class SelectMethodError(Exception): pass
+class SelectMovementError(Exception): pass
class OrderBuilder(XMLObject, Amount, Predicate):
"""
@@ -152,16 +155,7 @@
delivery_module = getattr(self.getPortalObject(), self.getDeliveryModule())
getattr(delivery_module, delivery_module_before_building_script_id)()
- @UnrestrictedMethod
- def searchMovementList(self, applied_rule_uid=None, **kw):
- """
- Defines how to query all Simulation Movements which meet certain
- criteria (including the above path path definition).
- First, select movement matching to criteria define on
- DeliveryBuilder.
- Then, call script simulation_select_method to restrict
- movement_list.
- """
+ def generateMovementListForStockOptimisation(self, **kw):
from Products.ERP5Type.Document import newTempMovement
movement_list = []
for attribute, method in [('node_uid', 'getDestinationUid'),
@@ -223,6 +217,36 @@
movement_list.append(movement)
return movement_list
+ @UnrestrictedMethod
+ def searchMovementList(self, applied_rule_uid=None, **kw):
+ """
+ Returns a list of simulation movements (or something similar to
+ simulation movements) to construct a new delivery.
+
+ For compatibility, if a simulation select method id is not provided,
+ a list of movements for predicting future supplies is returned.
+ You should define a simulation select method id, then it will be used
+ to calculate the result.
+ """
+ method_id = self.getSimulationSelectMethodId()
+ if not method_id:
+ # XXX compatibility
+ return self.generateMovementListForStockOptimisation(**kw)
+
+ select_method = getattr(self.getPortalObject(), method_id)
+ movement_list = select_method(**kw)
+
+ # Make sure that movements are not duplicated.
+ movement_set = set()
+ for movement in movement_list:
+ if movement in movement_set:
+ raise SelectMethodError('%s returned %s twice or more' % \
+ (method_id, movement.getRelativeUrl()))
+ else:
+ movement_set.add(movement)
+
+ return movement_list
+
def collectMovement(self, movement_list):
"""
group movements in the way we want. Thanks to this method, we are able
More information about the Erp5-report
mailing list