diff --git a/product/ERP5/Document/DeliveryLine.py b/product/ERP5/Document/DeliveryLine.py index 12b2f145f05f18a6103f8b2618ba8e7db9381c9b..e4e96231a8817f0e32119fee3b2469459a82d3c0 100755 --- a/product/ERP5/Document/DeliveryLine.py +++ b/product/ERP5/Document/DeliveryLine.py @@ -52,9 +52,6 @@ class DeliveryLine(Movement, XMLObject, XMLMatrix, Variated): meta_type = 'ERP5 Delivery Line' portal_type = 'Delivery Line' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 # Declarative security security = ClassSecurityInfo() @@ -76,60 +73,6 @@ class DeliveryLine(Movement, XMLObject, XMLMatrix, Variated): , PropertySheet.ItemAggregation ) - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -Une ligne tarifaire.""" - , 'icon' : 'order_line_icon.gif' - , 'product' : 'ERP5' - , 'factory' : 'addDeliveryLine' - , 'immediate_view' : 'delivery_line_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'delivery_line_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'order_line_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - # Multiple inheritance definition updateRelatedContent = XMLMatrix.updateRelatedContent @@ -173,61 +116,29 @@ Une ligne tarifaire.""" """ return self.aq_parent.isAccountable() and (not self.hasCellContent()) - # Pricing - security.declareProtected(Permissions.ModifyPortalContent, 'updatePrice') - def updatePrice(self): - """ - Tries to find out a price for this movement - """ - if not self.hasCellContent(): - # Try to compute an average price by accessing simulation movements - # This should always return 0 in the case of OrderCell - total_quantity = 0.0 - total_price = 0.0 - for m in self.getDeliveryRelatedValueList(portal_type="Simulation Movement"): - order = m.getOrderValue() - if order is not None: - # Price is defined in an order - price = m.getPrice() - quantity = m.getQuantity() - try: - price = float(price) - quantity = float(quantity) - except: - price = 0.0 - quantity = 0.0 - total_quantity += quantity - total_price += quantity * price - if total_quantity: - # Update local price - # self._setPrice(total_price / total_quantity) - self.setPrice( total_price / total_quantity ) - else: - for c in self.objectValues(): - if hasattr(aq_base(c), 'updatePrice'): - c.updatePrice() - def _getTotalPrice(self, context): - if not self.hasCellContent(): + base_id = 'movement' + if not self.hasCellContent(base_id=base_id): quantity = self.getQuantity() or 0.0 price = self.getPrice(context=context) or 0.0 return quantity * price else: # Use MySQL aggregate = self.DeliveryLine_zGetTotal()[0] - return aggregate.total_price + return aggregate.total_price or 0.0 security.declareProtected(Permissions.AccessContentsInformation, 'getTotalQuantity') def getTotalQuantity(self): """ Returns the quantity if no cell or the total quantity if cells """ - if not self.hasCellContent(): + base_id = 'movement' + if not self.hasCellContent(base_id=base_id): return self.getQuantity() else: # Use MySQL aggregate = self.DeliveryLine_zGetTotal()[0] - return aggregate.total_quantity + return aggregate.total_quantity or 0.0 # Cell Related security.declareProtected( Permissions.ModifyPortalContent, 'newCellContent' ) @@ -274,48 +185,6 @@ Une ligne tarifaire.""" return XMLMatrix.newCell(self, *kw, **kwd) - # For generation of matrix lines - security.declareProtected( Permissions.ModifyPortalContent, '_setVariationCategoryList' ) - def _setVariationCategoryList(self, value): - """ - Define the indices provided - one list per index (kw) - - Any number of list can be provided - """ - Movement._setVariationCategoryList(self, value) - # Update the cell range automatically - # This is far from easy and requires some specific wizzardry - base_id = 'movement' - kwd = {'base_id': base_id} - new_range = self.DeliveryLine_asCellRange() # This is a site dependent script - self._setCellRange(*new_range, **kwd ) - #LOG('setCellRange',0,str(new_range)) - cell_range_key_list = self.getCellRangeKeyList(base_id = base_id) - #LOG('cell_range_key_list',0,str(self.getCellRange(base_id = base_id))) - if cell_range_key_list <> [[None, None]] : - for k in cell_range_key_list: - #LOG('new cell',0,str(k)) - c = self.newCell(*k, **kwd) - c.edit( domain_base_category_list = self.getVariationBaseCategoryList(), - mapped_value_property_list = ('quantity', 'price',), - #predicate_operator = 'SUPERSET_OF', - membership_criterion_category = filter(lambda k_item: k_item is not None, k), - variation_category_list = filter(lambda k_item: k_item is not None, k), - force_update = 1 - ) # Make sure we do not take aquisition into account - else: - # If only one cell, delete it - cell_range_id_list = self.getCellRangeIdList(base_id = base_id) - for k in cell_range_id_list: - if self.get(k) is not None: - self[k].flushActivity(invoke=0) - self[k].immediateReindexObject() # We are forced to do this is url is changed (not uid) - self._delObject(k) - - # TO BE DONE XXX - # reindex cells when price, quantity or source/dest changes - security.declareProtected(Permissions.View, 'isDivergent') def isDivergent(self): """