Commit 3e45ec35 authored by Łukasz Nowak's avatar Łukasz Nowak

Support use category for total price calculation.

parent cad38c81
......@@ -116,7 +116,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
SQLCatalog to compute the price, otherwise it sums the total
......@@ -125,35 +126,50 @@ 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.
base_contribution and use must be a relative url of a category.
"""
result = None
if not fast:
kw.setdefault( 'portal_type',
self.getPortalDeliveryMovementTypeList())
if base_contribution is None:
if base_contribution is None and use is None:
result = sum([ line.getTotalPrice(fast=0) for line in
self.objectValues(**kw) ])
else:
# 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 = [
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment