diff --git a/product/ERP5/Document/Amount.py b/product/ERP5/Document/Amount.py index 929f81b2b6829bbe213b82d19af08a618b2da50d..95be6eb3f76ce0a0f3fb160b17e25ba7ffd2ba34 100755 --- a/product/ERP5/Document/Amount.py +++ b/product/ERP5/Document/Amount.py @@ -132,7 +132,8 @@ class Amount(Base, Variated): render(object_list)) return variation_category_item_list - security.declareProtected(Permissions.ModifyPortalContent, '_setVariationCategoryList') + security.declareProtected(Permissions.ModifyPortalContent, + '_setVariationCategoryList') def _setVariationCategoryList(self, value): result = [] resource = self.getDefaultResourceValue() @@ -141,7 +142,8 @@ class Amount(Base, Variated): if len(variation_list) > 0: self._setCategoryMembership(variation_list, value, base = 1) - security.declareProtected(Permissions.ModifyPortalContent, 'setVariationCategoryList') + security.declareProtected(Permissions.ModifyPortalContent, + 'setVariationCategoryList') def setVariationCategoryList(self, value): self._setVariationCategoryList(value) self.reindexObject() @@ -162,7 +164,18 @@ class Amount(Base, Variated): base_category_list.append(base_category) return base_category_list - security.declareProtected(Permissions.AccessContentsInformation, 'getVariationValue') + security.declareProtected(Permissions.AccessContentsInformation, + 'getVariationBaseCategoryItemList') + def getVariationBaseCategoryItemList(self,display_id='title_or_id',**kw): + """ + Returns a list of base_category tuples. + """ + return self.portal_categories.getItemList( + self.getVariationBaseCategoryList(), + display_id=display_id,**kw) + + security.declareProtected(Permissions.AccessContentsInformation, + 'getVariationValue') def getVariationValue(self): """ New Method for dicrete and countinuous variations @@ -215,7 +228,7 @@ class Amount(Base, Variated): base=base, **kw)] security.declareProtected(Permissions.AccessContentsInformation, - 'getVariationRangeBaseCategoryList') + 'getVariationRangeBaseCategoryList') def getVariationRangeBaseCategoryList(self, omit_option_base_category=0): """ Returns possible variations base categories for this amount ie. @@ -232,7 +245,7 @@ class Amount(Base, Variated): result = resource.getVariationBaseCategoryList( omit_option_base_category=omit_option_base_category) else: - result = self.portal_categories.getBaseCategoryList() + result = Variated.getVariationRangeBaseCategoryList(self) return result security.declareProtected(Permissions.AccessContentsInformation, diff --git a/product/ERP5/Document/Consumption.py b/product/ERP5/Document/Consumption.py index 336734002eb44309d21455066628b8809fea89d1..a04c1968ce3c6d8891cf5168dadf7769bbbd334e 100755 --- a/product/ERP5/Document/Consumption.py +++ b/product/ERP5/Document/Consumption.py @@ -60,20 +60,23 @@ class Consumption(XMLObject, XMLMatrix, Variated): # , PropertySheet.Consumption ) - security.declareProtected(Permissions.ModifyPortalContent, '_setVariationCategoryList') + security.declareProtected(Permissions.ModifyPortalContent, + '_setVariationCategoryList') def _setVariationCategoryList(self,value): """ Set consumption variation category list. Set matrix cell range. """ - self._setCategoryMembership(self.getVariationRangeBaseCategoryList(),value,base=1) + self._setCategoryMembership(self.getVariationRangeBaseCategoryList(), + value, base=1) # XXX Must use in futur this method, but it failed today #Variated._setVariationCategoryList(self, value) # XXX FIXME: Use a interaction workflow instead # Kept for compatibility. self.updateCellRange(base_id='quantity') - security.declareProtected(Permissions.ModifyPortalContent, 'setVariationCategoryList') + security.declareProtected(Permissions.ModifyPortalContent, + 'setVariationCategoryList') def setVariationCategoryList(self,value): """ Set consumption variation category list. @@ -82,14 +85,8 @@ class Consumption(XMLObject, XMLMatrix, Variated): self._setVariationCategoryList(value) self.reindexObject() - security.declareProtected(Permissions.ModifyPortalContent, 'getVariationRangeBaseCategoryList') - def getVariationRangeBaseCategoryList(self): - """ - Return range of base variation - """ - return self.getPortalVariationBaseCategoryList() - - security.declareProtected(Permissions.ModifyPortalContent, 'getVariationRangeBaseCategoryItemList') + security.declareProtected(Permissions.ModifyPortalContent, + 'getVariationRangeBaseCategoryItemList') def getVariationRangeBaseCategoryItemList(self): """ Return range of base variation item @@ -98,33 +95,18 @@ class Consumption(XMLObject, XMLMatrix, Variated): # XXX get TitleOrId return map( lambda x: (x,x) , self.getVariationRangeBaseCategoryList() ) - security.declareProtected(Permissions.ModifyPortalContent, 'getVariationRangeCategoryList') - def getVariationRangeCategoryList(self): - """ - Return range of variation - """ - result = self.portal_categories.getCategoryChildList(self.getVariationBaseCategoryList(), base=0) - return result - - security.declareProtected(Permissions.ModifyPortalContent, 'getVariationRangeCategoryItemList') - def getVariationRangeCategoryItemList(self): - """ - Return range of variation item - """ - # We need a left display for ListField, and self.portal_categories.getCategoryChildTitleItemList return a right display - # So, invert all tuples - result = map( lambda x: (x[1],x[0]), self.portal_categories.getCategoryChildTitleItemList(self.getVariationBaseCategoryList(), base=1) ) - return result - - security.declareProtected(Permissions.ModifyPortalContent, 'getQuantityRatio') - def getQuantityRatio(self, variation_category_line, variation_category_column): + security.declareProtected(Permissions.ModifyPortalContent, + 'getQuantityRatio') + def getQuantityRatio(self, variation_category_line, + variation_category_column): """ Return quantity ratio for a virtual cell. Return None if not result can be return. """ cell_quantity_ratio_list = [] - for variation_category in (variation_category_line, variation_category_column): + for variation_category in (variation_category_line, + variation_category_column): cell = self.getCell(variation_category, base_id='quantity') if cell is None: return None diff --git a/product/ERP5/Document/DeliveryLine.py b/product/ERP5/Document/DeliveryLine.py index db1db8247550379d792ee7e0b1e7fdcdb3813e91..6f371c47259bc907fba8c51ccbdb0d5db0ab103e 100755 --- a/product/ERP5/Document/DeliveryLine.py +++ b/product/ERP5/Document/DeliveryLine.py @@ -77,7 +77,8 @@ class DeliveryLine(Movement, XMLObject, XMLMatrix, Variated): updateRelatedContent = XMLMatrix.updateRelatedContent # Explicit acquisition of aq_dynamic generated method - security.declareProtected(Permissions.AccessContentsInformation, 'getSimulationState') + security.declareProtected(Permissions.AccessContentsInformation, + 'getSimulationState') def getSimulationState(self): """ Explicitly acquire simulation_state from parent diff --git a/product/ERP5/Document/Resource.py b/product/ERP5/Document/Resource.py index 3def78db80d702a08dc58bdd15f1265d071a88f1..fc57db2ec1340e1f2d234c3f491948e6cc29ac37 100755 --- a/product/ERP5/Document/Resource.py +++ b/product/ERP5/Document/Resource.py @@ -187,12 +187,12 @@ class Resource(XMLMatrix, CoreResource, Variated): # XXX now, call Renderer a lot of time. # Better implementation needed result.extend(Renderer( - base_category=base_category, - display_base_category=display_base_category, - display_none_category=0, base=base, - current_category=current_category, - display_id=display_id, **kw).\ - render([object])) + base_category=base_category, + display_base_category=display_base_category, + display_none_category=0, base=base, + current_category=current_category, + display_id=display_id, **kw).\ + render([object])) return result security.declareProtected(Permissions.AccessContentsInformation, @@ -228,8 +228,8 @@ class Resource(XMLMatrix, CoreResource, Variated): | morphology/2 | (morphology/2, ) """ vcil = self.getVariationCategoryItemList( - base_category_list=base_category_list, - omit_individual_variation=omit_individual_variation,**kw) + base_category_list=base_category_list, + omit_individual_variation=omit_individual_variation,**kw) return map(lambda x: x[1], vcil) # Unit conversion diff --git a/product/ERP5/Document/Transformation.py b/product/ERP5/Document/Transformation.py index 50ba0a0b32ab964c39dfd5f1277b86cea5eff2bd..0433d45d264b67f3cd4274983af918a1ac840a74 100755 --- a/product/ERP5/Document/Transformation.py +++ b/product/ERP5/Document/Transformation.py @@ -95,24 +95,6 @@ class Transformation(XMLObject, Predicate, Variated): for transformation_line in transformation_line_list: transformation_line.updateVariationCategoryList() - security.declareProtected(Permissions.AccessContentsInformation, - 'getVariationRangeBaseCategoryList') - def getVariationRangeBaseCategoryList(self): - """ - Returns possible variation base_category ids of the - default resource which can be used a variation axis - in the transformation. - """ - resource = self.getResourceValue() - if resource is not None: - result = resource.getVariationBaseCategoryList() - else: - # XXX result = self.getBaseCategoryIds() - # Why calling this method ? - # Get a global variable which define a list of variation base category - result = self.getPortalVariationBaseCategoryList() - return result - security.declareProtected(Permissions.AccessContentsInformation, 'getVariationRangeBaseCategoryItemList') def getVariationRangeBaseCategoryItemList(self,display_id='title_or_id',**kw): @@ -122,39 +104,14 @@ class Transformation(XMLObject, Predicate, Variated): useful in ERP5Form instances to generate selection menus. """ - return self.portal_categories.getItemList( self.getVariationRangeBaseCategoryList(), - display_id=display_id,**kw ) - - - security.declareProtected(Permissions.AccessContentsInformation, - 'getVariationRangeCategoryList') - def getVariationRangeCategoryList(self, base_category_list=()): - """ - Returns possible variation category values for the - transformation according to the default resource. - Possible category values is provided as a list of - id. - User may want to define generic transformation without - any resource define. - Result is left display. - """ - if base_category_list is (): - base_category_list = self.getVariationBaseCategoryList() - - resource = self.getResourceValue() - if resource != None: - result = resource.getVariationCategoryList( - base_category_list=base_category_list, - omit_individual_variation=0) - else: - # No resource is define on transformation. We want to display content of base categories - result = self.portal_categories.getCategoryChildList(base_category_list, base=1) - return result + return self.portal_categories.getItemList( + self.getVariationRangeBaseCategoryList(), + display_id=display_id, **kw) security.declareProtected(Permissions.AccessContentsInformation, 'getVariationRangeCategoryItemList') def getVariationRangeCategoryItemList(self, base_category_list=(), - display_base_category=1,**kw): + display_base_category=1, **kw): """ Returns possible variation category values for the transformation according to the default resource. @@ -171,24 +128,16 @@ class Transformation(XMLObject, Predicate, Variated): resource = self.getResourceValue() if resource != None: result = resource.getVariationCategoryItemList( - base_category_list=base_category_list, - omit_individual_variation=0, - display_base_category=display_base_category,**kw) + base_category_list=base_category_list, + omit_individual_variation=0, + display_base_category=display_base_category,**kw) else: - # No resource is define on transformation. We want to display content of base categories - result = self.portal_categories.getCategoryChildTitleItemList(base_category_list, base=1, display_none_category=0) + # No resource is define on transformation. + # We want to display content of base categories + result = self.portal_categories.getCategoryChildTitleItemList( + base_category_list, base=1, display_none_category=0) return result - security.declareProtected(Permissions.AccessContentsInformation, - 'getVariationBaseCategoryItemList') - def getVariationBaseCategoryItemList(self,display_id='title_or_id',**kw): - """ - Returns a list of base_category tuples for this tranformation - """ - return self.portal_categories.getItemList(self.getVariationBaseCategoryList(), - display_id=display_id,**kw) - - security.declareProtected(Permissions.AccessContentsInformation, '_setVariationBaseCategoryList') def _setVariationBaseCategoryList(self, value): diff --git a/product/ERP5/Document/TransformedResource.py b/product/ERP5/Document/TransformedResource.py index fd145782e9f3e50a4af24d4c86e6c96bdb8b5e0b..ba039db6e9a5acf98ccf4605f0849a99d7306969 100755 --- a/product/ERP5/Document/TransformedResource.py +++ b/product/ERP5/Document/TransformedResource.py @@ -162,51 +162,6 @@ class TransformedResource(Predicate, XMLObject, XMLMatrix, Amount): self._setVVariationBaseCategoryList(value) self.reindexObject() - - security.declareProtected(Permissions.AccessContentsInformation, - 'getVariationRangeCategoryItemList') - def getVariationRangeCategoryItemList(self, base_category_list = (), - omit_individual_variation=1, base=1, - current_category=None, - display_base_category=1, - display_id='title', **kw): - - """ - Returns possible variation category values for the - transformation according to the default resource. - Possible category values is provided as a list of - tuples (id, title). This is mostly - useful in ERP5Form instances to generate selection - menus. - Display is left... - """ - resource = self.getResourceValue() - result = [] - if resource != None: - if base_category_list is (): - base_category_list = resource.getVariationBaseCategoryList() - result = resource.getVariationCategoryItemList( - base_category_list=base_category_list, - omit_individual_variation=0, - base=base, - current_category=current_category, - display_base_category=display_base_category, - display_id=display_id, - **kw) - return result - - security.declareProtected(Permissions.AccessContentsInformation, - 'getVariationRangeCategoryItemList') - def getVariationRangeCategoryList(self, base_category_list=()): - """ - Returns possible variation category values for the - transformation according to the default resource. - """ - return map(lambda x: x[1], - self.getVariationRangeCategoryItemList( - base_category_list=base_category_list)) - return result - security.declareProtected(Permissions.AccessContentsInformation, 'getAggregatedAmountList') def getAggregatedAmountList(self, context=None, REQUEST=None, **kw): diff --git a/product/ERP5/Variated.py b/product/ERP5/Variated.py index 67d9d4adf55b81ae1181efc7d91a157aa9e64fc2..d82278cfea51d4f643e3565629b725efb4807db1 100755 --- a/product/ERP5/Variated.py +++ b/product/ERP5/Variated.py @@ -1,6 +1,6 @@ ############################################################################## # -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. +# Copyright (c) 2002, 2006 Nexedi SARL and Contributors. All Rights Reserved. # Jean-Paul Smets-Solanes <jp@nexedi.com> # # WARNING: This program as such is intended to be used by professional @@ -76,7 +76,8 @@ class Variated(Base): '_getVariationCategoryList') def _getVariationCategoryList(self, base_category_list = ()): if base_category_list is (): - base_category_list = self.getVariationRangeBaseCategoryList() + base_category_list = self.getVariationBaseCategoryList() +# base_category_list = self.getVariationRangeBaseCategoryList() return self.getAcquiredCategoryMembershipList(base_category_list, base=1) security.declareProtected(Permissions.AccessContentsInformation, @@ -104,71 +105,83 @@ class Variated(Base): variation_category_item_list.append((current_category,current_category)) if base_category_list is (): - base_category_list = self.getVariationRangeBaseCategoryList() + base_category_list = self.getVariationBaseCategoryList() if omit_option_base_category == 1: base_category_list = [x for x in base_category_list if x not in self.getPortalOptionBaseCategoryList()] for base_category in base_category_list: variation_category_list = self._getVariationCategoryList( - base_category_list=[base_category]) - variation_list = map(lambda x: self.portal_categories.resolveCategory(x), - variation_category_list) - variation_category_item_list.extend(Renderer( + base_category_list=[base_category]) + variation_list = [self.portal_categories.resolveCategory(x) for x in \ + variation_category_list] + category_list = [x for x in variation_list \ + if x.getPortalType() == 'Category'] + variation_category_item_list.extend(Renderer( display_base_category=display_base_category, display_none_category=0, base=base, current_category=current_category, - display_id=display_id,**kw).\ - render(variation_list)) - + display_id=display_id, **kw).\ + render(category_list)) + object_list = [x for x in variation_list \ + if x.getPortalType() != 'Category'] + variation_category_item_list.extend(Renderer( + base_category=base_category, + display_base_category=display_base_category, + display_none_category=0, base=base, + current_category=current_category, + display_id='title', **kw).\ + render(object_list)) return variation_category_item_list - def getVariationCategoryTitleOrIdItemList(self, base_category_list=(), base=1, **kw): - """ - Returns a list of tuples by parsing recursively all categories in a - given list of base categories. Uses getTitleOrId as method - """ - return self.getVariationCategoryItemList(display_id='title_or_id', base_category_list=base_category_list, base=base, **kw) + # XXX Is it used ? +# def getVariationCategoryTitleOrIdItemList(self, base_category_list=(), +# base=1, **kw): +# """ +# Returns a list of tuples by parsing recursively all categories in a +# given list of base categories. Uses getTitleOrId as method +# """ +# return self.getVariationCategoryItemList( +# display_id='title_or_id', +# base_category_list=base_category_list, base=base, **kw) - security.declareProtected(Permissions.ModifyPortalContent, '_setVariationCategoryList') - def _setVariationCategoryList(self, node_list, base_category_list = ()): + security.declareProtected(Permissions.ModifyPortalContent, + '_setVariationCategoryList') + def _setVariationCategoryList(self, node_list, base_category_list=()): if base_category_list is (): - base_category_list = self.getVariationRangeBaseCategoryList() + base_category_list = self.getVariationBaseCategoryList() self._setCategoryMembership(base_category_list,node_list,base=1) - security.declareProtected(Permissions.ModifyPortalContent, 'setVariationCategoryList') - def setVariationCategoryList(self, node_list, base_category_list = () ): - self._setVariationCategoryList(node_list, base_category_list = base_category_list) + security.declareProtected(Permissions.ModifyPortalContent, + 'setVariationCategoryList') + def setVariationCategoryList(self, node_list, base_category_list=()): + self._setVariationCategoryList(node_list, + base_category_list=base_category_list) self.reindexObject() - # Range security.declareProtected(Permissions.AccessContentsInformation, - 'getVariationRangeBaseCategoryList') + 'getVariationRangeBaseCategoryList') def getVariationRangeBaseCategoryList(self): """ - Returns possible variation base_category ids of the - default resource of this transformation + Returns possible variation base_category ids. """ - try: - resource = self.getDefaultResourceValue() - except AttributeError: - resource = None - if resource is not None: - result = resource.getVariationBaseCategoryList() - else: - result = self.portal_categories.getBaseCategoryList() - return result + # Get a portal method which defines a list of + # variation base category + return self.getPortalVariationBaseCategoryList() security.declareProtected(Permissions.AccessContentsInformation, - 'getVariationRangeBaseCategoryItemList') - def getVariationRangeBaseCategoryItemList(self, base=1, display_id='getTitle', current_category=None): + 'getVariationRangeBaseCategoryItemList') + def getVariationRangeBaseCategoryItemList(self, base=1, + display_id='getTitle', + current_category=None): """ Returns possible variations of the resource as a list of tuples (id, title). This is mostly useful in ERP5Form instances to generate selection menus. """ - return self.portal_categories.getItemList(self.getVariationRangeBaseCategoryList()) + return self.portal_categories.getItemList( + self.getVariationBaseCategoryList()) security.declareProtected(Permissions.AccessContentsInformation, 'getVariationBaseCategoryItemList') @@ -191,8 +204,10 @@ class Variated(Base): return result # Methods for matrix UI widgets + # XXX FIXME Those method are depreciated. + # We now use _asCellRange scripts. security.declareProtected(Permissions.AccessContentsInformation, - 'getLineVariationRangeCategoryItemList') + 'getLineVariationRangeCategoryItemList') def getLineVariationRangeCategoryItemList(self): """ Returns possible variations in line @@ -202,8 +217,9 @@ class Variated(Base): except AttributeError: resource = None if resource is not None: - clist = resource.getVariationRangeCategoryItemList(base_category_list = - self.getVariationBaseCategoryLine(), root=0) + clist = resource.getVariationRangeCategoryItemList( + base_category_list=self.getVariationBaseCategoryLine(), + root=0) else: clist = [(None,None)] return clist diff --git a/product/ERP5/tests/testTransformation.py b/product/ERP5/tests/testTransformation.py index 0d1ae750173c2f8aab94e4f0dc61f97e3b3dde66..3683f83e06c40061fed8195c365a2e0ac870fbd8 100755 --- a/product/ERP5/tests/testTransformation.py +++ b/product/ERP5/tests/testTransformation.py @@ -103,15 +103,24 @@ class TestTransformation(TestOrderMixin,ERP5TypeTestCase): component_name = component_info['name'] component = component_module.newContent() component_dict[component_name] = component - variation1 = component.newContent(portal_type=self.component_variation_portal_type,id='1') - variation2 = component.newContent(portal_type=self.component_variation_portal_type,id='2') + variation1 = component.newContent( + portal_type=self.component_variation_portal_type, + id='1') + variation2 = component.newContent( + portal_type=self.component_variation_portal_type, + id='2') variations = [variation1, variation2] + + # Commit and catalog + get_transaction().commit() + self.tic() component.setPricedQuantity(component_info['quantity']) component.setVariationBaseCategoryList(['variation']) component.setPVariationBaseCategoryList(['variation']) - component.setCategoryList( ['variation/' + x.getRelativeUrl() for x in variations] ) - + # Variation are automatically acquired if they are individual variation. +# component.setCategoryList( +# ['variation/' + x.getRelativeUrl() for x in variations] ) # Set the price supply_line = component.newContent(portal_type='Supply Line') supply_line.edit( mapped_value_property_list = ['base_price'] ) @@ -122,10 +131,13 @@ class TestTransformation(TestOrderMixin,ERP5TypeTestCase): membership_criterion_category = ['variation/' + x.getRelativeUrl() for x in variations], base_price = component_prices[0]) else: - supply_line.setVariationBaseCategoryList(['variation']) +# supply_line.setVariationBaseCategoryList(['variation']) supply_line.updateCellRange(base_id = 'path') for i in range(2): - supply_cell = supply_line.newCell('apparel_component_module/%s/%d' % (component.getId(),(i+1)), base_id='path') + supply_cell = supply_line.newCell( + 'variation/apparel_component_module/%s/%d' % \ + (component.getId(),(i+1)), + base_id='path') supply_cell.edit( membership_criterion_base_category = ['variation'], membership_criterion_category = ['variation/' + variations[i].getRelativeUrl()],