From cf30150a9e6b5297071e937af56df6716ab7ce67 Mon Sep 17 00:00:00 2001 From: Jean-Paul Smets <jp@nexedi.com> Date: Tue, 4 May 2010 15:13:31 +0000 Subject: [PATCH] Remove context from API, try to remove some duplicate code git-svn-id: https://svn.erp5.org/repos/public/erp5/sandbox/amount_generator@34983 20353a03-c40f-0410-a6d1-a30d3c3de9de --- .../DeliveryRootSimulationRule.py | 38 ++++----------- .../DeliverySimulationRule.py | 35 +++++--------- .../InvoiceRootSimulationRule.py | 31 +++---------- .../InvoiceSimulationRule.py | 46 +++++++------------ .../InvoiceTransactionSimulationRule.py | 20 ++++---- .../OrderRootSimulationRule.py | 30 +++--------- .../PaymentSimulationRule.py | 22 ++++----- .../TradeModelSimulationRule.py | 26 ++++++----- 8 files changed, 86 insertions(+), 162 deletions(-) diff --git a/bt5/erp5_simulation/DocumentTemplateItem/DeliveryRootSimulationRule.py b/bt5/erp5_simulation/DocumentTemplateItem/DeliveryRootSimulationRule.py index 9ac162b88d..6119e064b6 100644 --- a/bt5/erp5_simulation/DocumentTemplateItem/DeliveryRootSimulationRule.py +++ b/bt5/erp5_simulation/DocumentTemplateItem/DeliveryRootSimulationRule.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- ############################################################################## # # Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved. @@ -71,11 +72,11 @@ class DeliveryRootSimulationRule(RuleMixin, MovementCollectionUpdaterMixin, Pred PropertySheet.Rule ) - def _getMovementGenerator(self): + def _getMovementGenerator(self, context): """ Return the movement generator to use in the expand process """ - return DeliveryRuleMovementGenerator() + return DeliveryRuleMovementGenerator(applied_rule=context, rule=self) def _getMovementGeneratorContext(self, context): """ @@ -83,7 +84,7 @@ class DeliveryRootSimulationRule(RuleMixin, MovementCollectionUpdaterMixin, Pred """ return context - def _getMovementGeneratorMovementList(self): + def _getMovementGeneratorMovementList(self, context): """ Return the movement lists to provide to the movement generator """ @@ -95,41 +96,22 @@ class DeliveryRootSimulationRule(RuleMixin, MovementCollectionUpdaterMixin, Pred return (movement.getSource() is None or movement.getDestination() is None) class DeliveryRuleMovementGenerator(MovementGeneratorMixin): - def getGeneratedMovementList(self, context, movement_list=None, - rounding=False): - """ - Input movement list comes from delivery - """ - ret = [] - rule = context.getSpecialiseValue() - for input_movement, business_path in self \ - ._getInputMovementAndPathTupleList(context): - kw = self._getPropertyAndCategoryList(input_movement, business_path, - rule) - input_movement_url = input_movement.getRelativeUrl() - kw.update({'delivery':input_movement_url}) - simulation_movement = context.newContent( - portal_type=RuleMixin.movement_type, - temp_object=True, - **kw) - ret.append(simulation_movement) - return ret - def _getInputMovementList(self, context): + def _getInputMovementList(self, movement_list=None, rounding=None): """Input movement list comes from delivery""" - delivery = context.getDefaultCausalityValue() + delivery = self._applied_rule.getDefaultCausalityValue() if delivery is None: return [] else: - ret = [] - existing_movement_list = context.objectValues() + result = [] + existing_movement_list = self._applied_rule.objectValues() for movement in delivery.getMovementList( portal_type=delivery.getPortalDeliveryMovementTypeList()): simulation_movement = self._getDeliveryRelatedSimulationMovement(movement) if simulation_movement is None or \ simulation_movement in existing_movement_list: - ret.append(movement) - return ret + result.append(movement) + return result def _getDeliveryRelatedSimulationMovement(self, delivery_movement): """Helper method to get the delivery related simulation movement. diff --git a/bt5/erp5_simulation/DocumentTemplateItem/DeliverySimulationRule.py b/bt5/erp5_simulation/DocumentTemplateItem/DeliverySimulationRule.py index 2546723203..5a0f984ec6 100644 --- a/bt5/erp5_simulation/DocumentTemplateItem/DeliverySimulationRule.py +++ b/bt5/erp5_simulation/DocumentTemplateItem/DeliverySimulationRule.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- ############################################################################## # # Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved. @@ -71,11 +72,11 @@ class DeliverySimulationRule(RuleMixin, MovementCollectionUpdaterMixin, Predicat PropertySheet.Rule ) - def _getMovementGenerator(self): + def _getMovementGenerator(self, context): """ Return the movement generator to use in the expand process """ - return DeliveryRuleMovementGenerator() + return DeliveryRuleMovementGenerator(applied_rule=context, rule=self) def _getMovementGeneratorContext(self, context): """ @@ -83,7 +84,7 @@ class DeliverySimulationRule(RuleMixin, MovementCollectionUpdaterMixin, Predicat """ return context - def _getMovementGeneratorMovementList(self): + def _getMovementGeneratorMovementList(self, context): """ Return the movement lists to provide to the movement generator """ @@ -95,24 +96,12 @@ class DeliverySimulationRule(RuleMixin, MovementCollectionUpdaterMixin, Predicat return (movement.getSource() is None or movement.getDestination() is None) class DeliveryRuleMovementGenerator(MovementGeneratorMixin): - def getGeneratedMovementList(self, context, movement_list=None, - rounding=False): - """ - Input movement list comes from the parent - """ - ret = [] - rule = context.getSpecialiseValue() - for input_movement, business_path in self \ - ._getInputMovementAndPathTupleList(context): - kw = self._getPropertyAndCategoryList(input_movement, business_path, - rule) - kw.update({'order':None,'delivery':None}) - simulation_movement = context.newContent( - portal_type=RuleMixin.movement_type, - temp_object=True, - **kw) - ret.append(simulation_movement) - return ret - def _getInputMovementList(self, context): - return [context.getParentValue(),] + def _getUpdatePropertyDict(self, input_movement): + # Override default mixin implementation + return {'order': None, + 'delivery': None, + 'portal_type': RuleMixin.movement_type} + + def _getInputMovementList(self, movement_list=None, rounding=None): + return [self._applied_rule.getParentValue(),] diff --git a/bt5/erp5_simulation/DocumentTemplateItem/InvoiceRootSimulationRule.py b/bt5/erp5_simulation/DocumentTemplateItem/InvoiceRootSimulationRule.py index ba336b7985..58f6eabdc1 100644 --- a/bt5/erp5_simulation/DocumentTemplateItem/InvoiceRootSimulationRule.py +++ b/bt5/erp5_simulation/DocumentTemplateItem/InvoiceRootSimulationRule.py @@ -70,11 +70,11 @@ class InvoiceRootSimulationRule(RuleMixin, MovementCollectionUpdaterMixin, Predi PropertySheet.Rule ) - def _getMovementGenerator(self): + def _getMovementGenerator(self, context): """ Return the movement generator to use in the expand process """ - return InvoiceRuleMovementGenerator() + return InvoiceRuleMovementGenerator(applied_rule=context, rule=self) def _getMovementGeneratorContext(self, context): """ @@ -82,7 +82,7 @@ class InvoiceRootSimulationRule(RuleMixin, MovementCollectionUpdaterMixin, Predi """ return context - def _getMovementGeneratorMovementList(self): + def _getMovementGeneratorMovementList(self, context): """ Return the movement lists to provide to the movement generator """ @@ -94,34 +94,15 @@ class InvoiceRootSimulationRule(RuleMixin, MovementCollectionUpdaterMixin, Predi return (movement.getSource() is None or movement.getDestination() is None) class InvoiceRuleMovementGenerator(MovementGeneratorMixin): - def getGeneratedMovementList(self, context, movement_list=None, - rounding=False): - """ - Input movement list comes from delivery - """ - ret = [] - rule = context.getSpecialiseValue() - for input_movement, business_path in self \ - ._getInputMovementAndPathTupleList(context): - kw = self._getPropertyAndCategoryList(input_movement, business_path, - rule) - input_movement_url = input_movement.getRelativeUrl() - kw.update({'delivery':input_movement_url}) - simulation_movement = context.newContent( - portal_type=RuleMixin.movement_type, - temp_object=True, - **kw) - ret.append(simulation_movement) - return ret - def _getInputMovementList(self, context): + def _getInputMovementList(self, movement_list=None, rounding=None): """Input movement list comes from delivery""" - delivery = context.getDefaultCausalityValue() + delivery = self._applied_rule.getDefaultCausalityValue() if delivery is None: return [] else: ret = [] - existing_movement_list = context.objectValues() + existing_movement_list = self._applied_rule.objectValues() for movement in delivery.getMovementList( portal_type=(delivery.getPortalInvoiceMovementTypeList() + \ delivery.getPortalTaxMovementTypeList())): # This is bad XXX-JPS - use use diff --git a/bt5/erp5_simulation/DocumentTemplateItem/InvoiceSimulationRule.py b/bt5/erp5_simulation/DocumentTemplateItem/InvoiceSimulationRule.py index 9e122d722d..41a00ffcc7 100644 --- a/bt5/erp5_simulation/DocumentTemplateItem/InvoiceSimulationRule.py +++ b/bt5/erp5_simulation/DocumentTemplateItem/InvoiceSimulationRule.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- ############################################################################## # # Copyright (c) 2009 Nexedi SARL and Contributors. All Rights Reserved. @@ -68,11 +69,11 @@ class InvoiceSimulationRule(RuleMixin, MovementCollectionUpdaterMixin, Predicate PropertySheet.Rule ) - def _getMovementGenerator(self): + def _getMovementGenerator(self, context): """ Return the movement generator to use in the expand process """ - return InvoicingRuleMovementGenerator() + return InvoicingRuleMovementGenerator(applied_rule=context, rule=self) def _getMovementGeneratorContext(self, context): """ @@ -80,7 +81,7 @@ class InvoiceSimulationRule(RuleMixin, MovementCollectionUpdaterMixin, Predicate """ return context - def _getMovementGeneratorMovementList(self): + def _getMovementGeneratorMovementList(self, context, movement_list=None, rounding=None): """ Return the movement lists to provide to the movement generator """ @@ -92,31 +93,16 @@ class InvoiceSimulationRule(RuleMixin, MovementCollectionUpdaterMixin, Predicate return (movement.getSource() is None or movement.getDestination() is None) class InvoicingRuleMovementGenerator(MovementGeneratorMixin): - def getGeneratedMovementList(self, context, movement_list=None, - rounding=False): - """ - In Invoice Simulation Rule, source should be source_administration - of the input movement or its order's source. Same for destination. - """ - ret = [] - rule = context.getSpecialiseValue() - for input_movement, business_path in self \ - ._getInputMovementAndPathTupleList(context): - kw = self._getPropertyAndCategoryList(input_movement, business_path, - rule) - root_simulation_movement = input_movement.getRootSimulationMovement() - source = input_movement.getSourceAdministration() or \ - root_simulation_movement.getSource() - destination = input_movement.getDestinationAdministration() or \ - root_simulation_movement.getDestination() - kw.update({'order':None, 'delivery':None, - 'source':source, 'destination':destination}) - simulation_movement = context.newContent( - portal_type=RuleMixin.movement_type, - temp_object=True, - **kw) - ret.append(simulation_movement) - return ret - def _getInputMovementList(self, context): - return [context.getParentValue(),] + def _getUpdatePropertyDict(self, input_movement): + root_simulation_movement = input_movement.getRootSimulationMovement() + source = input_movement.getSourceAdministration() or \ + root_simulation_movement.getSource() + destination = input_movement.getDestinationAdministration() or \ + root_simulation_movement.getDestination() + return {'portal_type': RuleMixin.movement_type, + 'order':None, 'delivery':None, + 'source':source, 'destination':destination}) + + def _getInputMovementList(self, movement_list=None, rounding=None): + return [self._applied_rule.getParentValue(),] diff --git a/bt5/erp5_simulation/DocumentTemplateItem/InvoiceTransactionSimulationRule.py b/bt5/erp5_simulation/DocumentTemplateItem/InvoiceTransactionSimulationRule.py index ae09cb9e96..17540e0528 100644 --- a/bt5/erp5_simulation/DocumentTemplateItem/InvoiceTransactionSimulationRule.py +++ b/bt5/erp5_simulation/DocumentTemplateItem/InvoiceTransactionSimulationRule.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- ############################################################################## # # Copyright (c) 2009 Nexedi SARL and Contributors. All Rights Reserved. @@ -72,11 +73,11 @@ class InvoiceTransactionSimulationRule(RuleMixin, MovementCollectionUpdaterMixin PropertySheet.Rule ) - def _getMovementGenerator(self): + def _getMovementGenerator(self, context): """ Return the movement generator to use in the expand process """ - return InvoiceTransactionRuleMovementGenerator() + return InvoiceTransactionRuleMovementGenerator(applied_rule=context, rule=self) def _getMovementGeneratorContext(self, context): """ @@ -84,7 +85,7 @@ class InvoiceTransactionSimulationRule(RuleMixin, MovementCollectionUpdaterMixin """ return context - def _getMovementGeneratorMovementList(self): + def _getMovementGeneratorMovementList(self, context): """ Return the movement lists to provide to the movement generator """ @@ -96,8 +97,7 @@ class InvoiceTransactionSimulationRule(RuleMixin, MovementCollectionUpdaterMixin return (movement.getSource() is None or movement.getDestination() is None) class InvoiceTransactionRuleMovementGenerator(MovementGeneratorMixin): - def getGeneratedMovementList(self, context, movement_list=None, - rounding=False): + def getGeneratedMovementList(self, movement_list=None, rounding=False): """ Input movement list comes from order @@ -106,11 +106,11 @@ class InvoiceTransactionRuleMovementGenerator(MovementGeneratorMixin): """ ret = [] - rule = context.getSpecialiseValue() + rule = self._rule # input_movement, business_path = rule._getInputMovementAndPathTupleList( # applied_rule)[0] - input_movement = context.getParentValue() - parent_movement = context.getParentValue() + input_movement = self._applied_rule.getParentValue() + parent_movement = self._applied_rule.getParentValue() # Find a matching cell cell = rule._getMatchingCell(input_movement) @@ -133,7 +133,7 @@ class InvoiceTransactionRuleMovementGenerator(MovementGeneratorMixin): if resource is None : # search the resource on parents simulation movement's deliveries simulation_movement = parent_movement - portal_simulation = context.getPortalObject().portal_simulation + portal_simulation = self._applied_rule.getPortalObject().portal_simulation while resource is None and \ simulation_movement != portal_simulation : delivery = simulation_movement.getDeliveryValue() @@ -191,7 +191,7 @@ class InvoiceTransactionRuleMovementGenerator(MovementGeneratorMixin): accounting_rule_cell_line.getGeneratePrevisionScriptId() kw.update(getattr(input_movement, generate_prevision_script_id)(kw)) - simulation_movement = context.newContent( + simulation_movement = self._applied_rule.newContent( portal_type=RuleMixin.movement_type, temp_object=True, **kw) diff --git a/bt5/erp5_simulation/DocumentTemplateItem/OrderRootSimulationRule.py b/bt5/erp5_simulation/DocumentTemplateItem/OrderRootSimulationRule.py index 0a71e8653a..366cc5008d 100644 --- a/bt5/erp5_simulation/DocumentTemplateItem/OrderRootSimulationRule.py +++ b/bt5/erp5_simulation/DocumentTemplateItem/OrderRootSimulationRule.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- ############################################################################## # # Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved. @@ -71,11 +72,11 @@ class OrderRootSimulationRule(RuleMixin, MovementCollectionUpdaterMixin, Predica PropertySheet.Rule ) - def _getMovementGenerator(self): + def _getMovementGenerator(self, context): """ Return the movement generator to use in the expand process """ - return OrderRuleMovementGenerator() + return OrderRuleMovementGenerator(applied_rule=context, rule=self) def _getMovementGeneratorContext(self, context): """ @@ -83,7 +84,7 @@ class OrderRootSimulationRule(RuleMixin, MovementCollectionUpdaterMixin, Predica """ return context - def _getMovementGeneratorMovementList(self): + def _getMovementGeneratorMovementList(self, context): """ Return the movement lists to provide to the movement generator """ @@ -95,29 +96,10 @@ class OrderRootSimulationRule(RuleMixin, MovementCollectionUpdaterMixin, Predica return (movement.getSource() is None or movement.getDestination() is None) class OrderRuleMovementGenerator(MovementGeneratorMixin): - def getGeneratedMovementList(self, context, movement_list=None, - rounding=False): - """ - Input movement list comes from order - """ - ret = [] - rule = context.getSpecialiseValue() - for input_movement, business_path in self \ - ._getInputMovementAndPathTupleList(context): - kw = self._getPropertyAndCategoryList(input_movement, business_path, - rule) - input_movement_url = input_movement.getRelativeUrl() - kw.update({'delivery':input_movement_url}) - simulation_movement = context.newContent( - portal_type=RuleMixin.movement_type, - temp_object=True, - **kw) - ret.append(simulation_movement) - return ret - def _getInputMovementList(self, context): + def _getInputMovementList(self, movement_list=None, rounding=None): """Input movement list comes from order""" - order = context.getDefaultCausalityValue() + order = self._applied_rule.getDefaultCausalityValue() if order is None: return [] else: diff --git a/bt5/erp5_simulation/DocumentTemplateItem/PaymentSimulationRule.py b/bt5/erp5_simulation/DocumentTemplateItem/PaymentSimulationRule.py index c991a18ddf..fbcf9e02d8 100644 --- a/bt5/erp5_simulation/DocumentTemplateItem/PaymentSimulationRule.py +++ b/bt5/erp5_simulation/DocumentTemplateItem/PaymentSimulationRule.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- ############################################################################## # # Copyright (c) 2010 Nexedi SARL and Contributors. All Rights Reserved. @@ -69,11 +70,11 @@ class PaymentSimulationRule(RuleMixin, MovementCollectionUpdaterMixin, Predicate PropertySheet.Rule ) - def _getMovementGenerator(self): + def _getMovementGenerator(self, context): """ Return the movement generator to use in the expand process """ - return PaymentRuleMovementGenerator() + return PaymentRuleMovementGenerator(applied_rule=context, rule=self) def _getMovementGeneratorContext(self, context): """ @@ -81,7 +82,7 @@ class PaymentSimulationRule(RuleMixin, MovementCollectionUpdaterMixin, Predicate """ return context - def _getMovementGeneratorMovementList(self): + def _getMovementGeneratorMovementList(self, context): """ Return the movement lists to provide to the movement generator """ @@ -93,17 +94,16 @@ class PaymentSimulationRule(RuleMixin, MovementCollectionUpdaterMixin, Predicate return (movement.getSource() is None or movement.getDestination() is None) class PaymentRuleMovementGenerator(MovementGeneratorMixin): - def getGeneratedMovementList(self, context, movement_list=None, - rounding=False): + def getGeneratedMovementList(self, movement_list=None, rounding=False): """ Input movement list comes from parent. XXX This implementation using Business Path, not Payment Condition. """ ret = [] - rule = context.getSpecialiseValue() + rule = self._rule for input_movement, business_path in self \ - ._getInputMovementAndPathTupleList(context): + ._getInputMovementAndPathTupleList(movement_list=movement_list, rounding=rounding): # Payment Rule does not work with Business Path if business_path is None: continue @@ -122,7 +122,7 @@ class PaymentRuleMovementGenerator(MovementGeneratorMixin): if stop_date is not None: kw.update({'stop_date':stop_date}) # one for payable - simulation_movement = context.newContent( + simulation_movement = self._applied_rule.newContent( portal_type=RuleMixin.movement_type, temp_object=True, quantity=-quantity, @@ -131,7 +131,7 @@ class PaymentRuleMovementGenerator(MovementGeneratorMixin): # one for bank kw.update({'source':business_path.getSource(), 'destination':business_path.getDestination(),}) - simulation_movement = context.newContent( + simulation_movement = self._applied_rule.newContent( portal_type=RuleMixin.movement_type, temp_object=True, quantity=quantity, @@ -139,5 +139,5 @@ class PaymentRuleMovementGenerator(MovementGeneratorMixin): ret.append(simulation_movement) return ret - def _getInputMovementList(self, context): - return [context.getParentValue(),] + def _getInputMovementList(self, movement_list=None, rounding=None): + return [self._applied_rule.getParentValue(),] diff --git a/bt5/erp5_simulation/DocumentTemplateItem/TradeModelSimulationRule.py b/bt5/erp5_simulation/DocumentTemplateItem/TradeModelSimulationRule.py index 8b229db457..318ae6c74a 100644 --- a/bt5/erp5_simulation/DocumentTemplateItem/TradeModelSimulationRule.py +++ b/bt5/erp5_simulation/DocumentTemplateItem/TradeModelSimulationRule.py @@ -68,11 +68,11 @@ class TradeModelSimulationRule(RuleMixin, MovementCollectionUpdaterMixin, Predic PropertySheet.Rule ) - def _getMovementGenerator(self): + def _getMovementGenerator(self, context): """ Return the movement generator to use in the expand process """ - return TradeModelRuleMovementGenerator() + return TradeModelRuleMovementGenerator(applied_rule=context, rule=self) def _getMovementGeneratorContext(self, context): """ @@ -80,7 +80,7 @@ class TradeModelSimulationRule(RuleMixin, MovementCollectionUpdaterMixin, Predic """ return context - def _getMovementGeneratorMovementList(self): + def _getMovementGeneratorMovementList(self, context): """ Return the movement lists to provide to the movement generator """ @@ -92,16 +92,20 @@ class TradeModelSimulationRule(RuleMixin, MovementCollectionUpdaterMixin, Predic return (movement.getSource() is None or movement.getDestination() is None) class TradeModelRuleMovementGenerator(MovementGeneratorMixin): - def getGeneratedMovementList(self, context, movement_list=None, - rounding=False): + + def getGeneratedMovementList(self, movement_list=None, rounding=False): """ Generates list of movements + XXX-JPS This could become a good default implementation + but I do not understand why input system not used here + (I will rewrite this) """ - movement_list = [] - business_process = context.getBusinessProcessValue() + result = [] + simulation_movement = self._applied_rule.getParentValue() + trade_model = simulation_movement.asComposedDocument() - if business_process is None: - return movement_list + if trade_model is None: + return result context_movement = context.getParentValue() rule = context.getSpecialiseValue() @@ -111,7 +115,7 @@ class TradeModelRuleMovementGenerator(MovementGeneratorMixin): 'Sale Trade Condition', 'Trade Model Line')): # business path specific - business_path_list = business_process.getPathValueList( + business_path_list = trade_model.getPathValueList( trade_phase=amount.getTradePhaseList()) # Why a list of trade phases ? XXX-JPS if len(business_path_list) == 0: raise ValueError('Cannot find Business Path') @@ -142,6 +146,6 @@ class TradeModelRuleMovementGenerator(MovementGeneratorMixin): portal_type=RuleMixin.movement_type, temp_object=True, **kw) - movement_list.append(simulation_movement) + result.append(simulation_movement) return movement_list -- 2.30.9