diff --git a/product/ERP5/Document/SupplyLine.py b/product/ERP5/Document/SupplyLine.py index 8d7f4b2ce90bb409276341c07b741c5759010a7e..43c8aeadc9c5303f2d10febe045b11253519d969 100755 --- a/product/ERP5/Document/SupplyLine.py +++ b/product/ERP5/Document/SupplyLine.py @@ -35,6 +35,7 @@ from Products.ERP5Type.XMLMatrix import XMLMatrix from Products.ERP5.Document.DeliveryLine import DeliveryLine from Products.ERP5.Document.Movement import Movement from Products.ERP5.Document.Path import Path +from Products.ERP5Type.Utils import convertToUpperCase from zLOG import LOG @@ -71,6 +72,7 @@ class SupplyLine(DeliveryLine, Path): , PropertySheet.Arrow , PropertySheet.Movement , PropertySheet.Price + , PropertySheet.SupplyLine , PropertySheet.VariationRange , PropertySheet.Path , PropertySheet.FlowCapacity @@ -177,16 +179,58 @@ class SupplyLine(DeliveryLine, Path): kwd['base_id'] = 'path' return XMLMatrix.newCell(self, *kw, **kwd) - # For generation of matrix lines - security.declareProtected(Permissions.ModifyPortalContent, - '_setQuantityStepList' ) - def _setQuantityStepList(self, value): + ############################################################ + # Quantity predicate API + ############################################################ + security.declareProtected(Permissions.AccessContentsInformation, + 'getQuantityPredicateIdList') + def getQuantityPredicateIdList(self, price_parameter): + """ + Return predicate id related to a price parameter. + """ + predicate_id_start_with = "quantity_range_" + if price_parameter != "base_price": + predicate_id_start_with = "%s_%s" % \ + (price_parameter, predicate_id_start_with) + # XXX Hardcoded portal type name + predicate_list = self.contentIds(filter={'portal_type': 'Predicate'}) + # XXX filtering can be done with contentIds ? + result = [x for x in predicate_list \ + if x.startswith(predicate_id_start_with)] + return result - self._baseSetQuantityStepList(value) - value = self.getQuantityStepList() + security.declareProtected(Permissions.AccessContentsInformation, + 'getQuantityPredicateValueList') + def getQuantityPredicateValueList(self, price_parameter): + """ + Return predicate related to a price parameter. + """ + result = [getattr(self, x) for x in \ + self.getQuantityPredicateIdList(price_parameter)] + return result + + security.declareProtected(Permissions.View, 'getQuantityStepList') + def getQuantityStepList(self, price_parameter="base_price"): + """ + Return predicate step related to a price_parameter + """ + if price_parameter == "base_price": + method_name = "_baseGetQuantityStepList" + else: + method_name = 'get%sList' % \ + convertToUpperCase("%s_quantity_step" % price_parameter) + return getattr(self, method_name)() + + security.declareProtected(Permissions.ModifyPortalContent, + 'updatePredicate') + def updateQuantityPredicate(self, price_parameter): + """ + Update the quantity predicate + """ + value = self.getQuantityStepList(price_parameter) value.sort() # XXX Hardcoded portal type name - for pid in self.contentIds(filter={'portal_type': 'Predicate'}): + for pid in self.getQuantityPredicateIdList(price_parameter): self.deleteContent(pid) if len(value) > 0: #value = value @@ -194,11 +238,15 @@ class SupplyLine(DeliveryLine, Path): # With this script, we can change customize the title of the # predicate script = getattr(self, 'SupplyLine_getTitle', None) - for i in range(0, len(value) -1 ): + predicate_id_start_with = "quantity_range" + if price_parameter != "base_price": + predicate_id_start_with = "%s_%s" % \ + (price_parameter, predicate_id_start_with) + for i in range(0, len(value)-1): min = value[i] max = value[i+1] # XXX Hardcoded portal type name - p = self.newContent(id='quantity_range_%s' % str(i), + p = self.newContent(id='%s_%s' % (predicate_id_start_with, str(i)), portal_type = 'Predicate') p.setCriterionPropertyList(('quantity', )) p.setCriterion('quantity', min=min, max=max) @@ -212,4 +260,3 @@ class SupplyLine(DeliveryLine, Path): p.setTitle('%s <= quantity' % repr(min)) else: p.setTitle('%s <= quantity < %s' % (repr(min), repr(max))) - self.updateCellRange(base_id='path')