From 6ac673ec7151608c73d9bd4187d649f776a9cf5a Mon Sep 17 00:00:00 2001 From: Rafael Monnerat <rafael@nexedi.com> Date: Tue, 15 Nov 2016 11:14:34 +0100 Subject: [PATCH] Apply commit to Support use category for total price calculation. Original commit from : Lukasz Nowak <luke@nexedi.com> 3e45ec35e38c008b0f8c2ceec73d7bb9dc62e2c0 --- product/ERP5/Document/Delivery.py | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/product/ERP5/Document/Delivery.py b/product/ERP5/Document/Delivery.py index 3a41878853..99bfef48d6 100644 --- a/product/ERP5/Document/Delivery.py +++ b/product/ERP5/Document/Delivery.py @@ -89,7 +89,8 @@ class Delivery(XMLObject, ImmobilisationDelivery, SimulableMixin, security.declareProtected( Permissions.AccessContentsInformation, 'getTotalPrice') - def getTotalPrice(self, fast=0, src__=0, base_contribution=None, rounding=False, **kw): + def getTotalPrice(self, fast=0, src__=0, base_contribution=None, + use=None, rounding=False, **kw): """ Returns the total price for this order if the `fast` argument is set to a true value, then it use @@ -99,13 +100,13 @@ class Delivery(XMLObject, ImmobilisationDelivery, SimulableMixin, So if the order is not in the catalog, getTotalPrice(fast=1) will return 0, this is not a bug. - base_contribution must be a relative url of a category. If passed, then + base_contribution and use must be a relative url of a category. If passed, then fast parameter is ignored. """ if 'portal_type' not in kw: kw['portal_type'] = self.getPortalObject() \ .getPortalDeliveryMovementTypeList() - if base_contribution is None: + if base_contribution is None and use is None: if fast: # XXX fast ignores base_contribution for now, but it should be possible # to use a related key @@ -120,22 +121,37 @@ class Delivery(XMLObject, ImmobilisationDelivery, SimulableMixin, # Find amounts from movements in the delivery. if isinstance(base_contribution, (tuple, list)): base_contribution_list = base_contribution - else: + elif base_contribution is not None: base_contribution_list = (base_contribution,) - base_contribution_value_list = [] + else: + base_contribution_list = [] + if isinstance(use, (tuple, list)): + use_list = use + elif use is not None: + use_list = (use,) + else: + use_list = [] portal_categories = self.portal_categories + base_contribution_value_list = [] for relative_url in base_contribution_list: base_contribution_value = portal_categories.getCategoryValue(relative_url) if base_contribution_value is not None: base_contribution_value_list.append(base_contribution_value) - if not base_contribution_value_list: + use_value_list = [] + for relative_url in use_list: + use_value = portal_categories.getCategoryValue(relative_url) + if use_value is not None: + use_value_list.append(use_value) + if (base_contribution is not None and not base_contribution_value_list) \ + or (use is not None and not use_value_list): # We cannot find any amount so that the result is 0. result = 0 else: matched_movement_list = [ movement for movement in self.getMovementList() - if set(movement.getBaseContributionValueList()).intersection(base_contribution_value_list)] + if set(movement.getBaseContributionValueList()).intersection(base_contribution_value_list) + or set(movement.getUseValueList()).intersection(use_value_list)] if rounding: portal_roundings = self.portal_roundings matched_movement_list = [ -- 2.30.9