From 2b513a11012d216cd9b8b57e3eccc26778b31c5d Mon Sep 17 00:00:00 2001 From: Jean-Paul Smets <jp@nexedi.com> Date: Mon, 1 Mar 2010 09:53:36 +0000 Subject: [PATCH] Minor fixes so that code loads. This mixin provides a reference algorithm for all transformations and should be readable enough to show the direction we should head to. git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@33167 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ERP5/mixin/amount_generator.py | 27 +++++++++++++------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/product/ERP5/mixin/amount_generator.py b/product/ERP5/mixin/amount_generator.py index 5fdf207666..451857255e 100644 --- a/product/ERP5/mixin/amount_generator.py +++ b/product/ERP5/mixin/amount_generator.py @@ -45,7 +45,7 @@ class AmountGeneratorMixin: # Declarative interfaces zope.interface.implements(interfaces.IAmountGenerator,) - def _getGlobalPropertyDict(self, context, amount_list=None, rounding=False) + def _getGlobalPropertyDict(self, context, amount_list=None, rounding=False): """ This method can be overridden to define global properties involved in trade model line calculation @@ -56,7 +56,7 @@ class AmountGeneratorMixin: 'employee': 100, } - def _getAmountPropertyDict(self, amount, amount_list=None, rounding=False) + def _getAmountPropertyDict(self, amount, amount_list=None, rounding=False): """ This method can be overridden to define local properties involved in trade model line calculation @@ -116,33 +116,32 @@ class AmountGeneratorMixin: # Browse recursively the trade model and accumulate # applicable values - first define the recursive method def accumulateAmountList(amount_generator_line): - amount_generator_line_list = amount_generator_line.contentValues(portal_type=self.getPortalAmountGeneratorLineTypeList()): + amount_generator_line_list = amount_generator_line.contentValues(portal_type=self.getPortalAmountGeneratorLineTypeList()) # Recursively feed base_amount if len(amount_generator_line_list): - def compareIndex(a, b): - return cmp(a.getIntIndex(), b.getIntIndex()) - amount_generator_line_list = amount_generator_line_list.sort(compareIndex) + amount_generator_line_list = amount_generator_line_list.sort(key=lambda x: x.getIntIndex()) for amount_generator_line in amount_generator_line_list: accumulateAmountList(amount_generator_line) return # Try to collect cells and aggregate their mapped properties # using resource + variation as aggregation key or base_application # for intermediate lines - amount_generator_cell_list = amount_generator_line.contentValues(portal_type=self.getPortalAmountGeneratorCellTypeList()): + amount_generator_cell_list = amount_generator_line.contentValues(portal_type=self.getPortalAmountGeneratorCellTypeList()) if not amount_generator_cell_list: # Consider the line as the unique cell amount_generator_cell_list = [amount_generator_line] - resource_amount_aggregate = {} - value_amount_aggregate = {} + resource_amount_aggregate = {} # aggregates final line information + value_amount_aggregate = {} # aggregates intermediate line information for amount_generator_cell in amount_generator_cell_list: if amount_generator_cell.test(amount): # XXX-JPS getTargetLevel not supported # Case 1: the cell defines a final amount of resource if amount_generator_cell.getResource(): # We must aggregate per resource, variation - key = (amount_generator_cell.getResource(), amount_generator_cell.getVariationText()) + key = (amount_generator_cell.getResource(), amount_generator_cell.getVariationText()) # Variation UID, Hash ? resource_amount_aggregate.setdefault(key, {}) # Then collect the mapped properties (resource, quantity, net_converted_quantity, base_contribution_list, base_application, etc.) for property_key in amount_generator_cell.getMappedValuePropertyList(): + # Handling of property lists ? XXX? resource_amount_aggregate[key][property_key] = amount_generator_cell.getProperty(property_key) resource_amount_aggregate[key]['category_list'] = amount_generator_cell.getCategoryMembershipList( amount_generator_cell.getMappedValueBaseCategoryList()) @@ -185,10 +184,10 @@ class AmountGeneratorMixin: # Create an Amount object amount = Amount() # XXX-JPS we could use a movement for safety if category_list: amount._setCategoryList(category_list) + amount._edit(**property_dict) if rounding: # We hope here that rounding is sufficient at line level amount = portal_roundings.getRoundingProxy(amount, context=amount_generator_line) - amount._edit(**property_dict) result.append(amount) if value_amount_aggregate: for base_application, property_dict in value_amount_aggregate.items(): @@ -200,7 +199,7 @@ class AmountGeneratorMixin: base_contribution_list = property_dict['base_contribution_list'] value = base_amount[base_application] * \ (property_dict.get('quantity', None) or 1.0) * \ - (property_dict.get('price', None) or 1.0) + (property_dict.get('price', None) or 1.0) # XXX-JPS is it really 1.0 ? # Quantity is used as a multiplier # Price is used as a ratio (also a kind of multiplier) for base_key in base_contribution_list: @@ -211,8 +210,8 @@ class AmountGeneratorMixin: accumulateAmountList(self) # Purge base_amount of amount applications - for application in amount.getBaseApplicationList(): # Acquired from Resource - base_amount[application] = 0 + for application in amount_propert_dict.keys(): + del base_amount[application] return result -- 2.30.9