From 872df53d1b367a3008588b6c7660124486237c72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Nowak?= <luke@nexedi.com> Date: Mon, 27 Apr 2009 09:14:00 +0000 Subject: [PATCH] - add common class for AggregatedAmountList - use this class in Document.Transformation - updated copyrights in Document.Transformation git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@26646 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ERP5/AggregatedAmountList.py | 78 +++++++++++++++++++++++++ product/ERP5/Document/Transformation.py | 57 ++---------------- 2 files changed, 82 insertions(+), 53 deletions(-) create mode 100644 product/ERP5/AggregatedAmountList.py diff --git a/product/ERP5/AggregatedAmountList.py b/product/ERP5/AggregatedAmountList.py new file mode 100644 index 00000000000..113972188f5 --- /dev/null +++ b/product/ERP5/AggregatedAmountList.py @@ -0,0 +1,78 @@ +# -*- coding: utf8 -*- +############################################################################## +# +# Copyright (c) 2009 Nexedi SA and Contributors. All Rights Reserved. +# Åukasz Nowak <luke@nexedi.com> +# +# WARNING: This program as such is intended to be used by professional +# programmers who take the whole responsability of assessing all potential +# consequences resulting from its eventual inadequacies and bugs +# End users who are looking for a ready-to-use solution with commercial +# garantees and support are strongly adviced to contract a Free Software +# Service Company +# +# This program is Free Software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +############################################################################## + +from UserList import UserList +from Globals import InitializeClass +from Products.PythonScripts.Utility import allow_class +from AccessControl import ClassSecurityInfo +from UserList import UserList +class AggregatedAmountList(UserList): + """ + Temporary object needed to aggregate Amount value + And to calculate some report or total value + """ + meta_type = "AggregatedAmountList" + security = ClassSecurityInfo() +# security.declareObjectPublic() + + security.declarePublic('getTotalPrice') + def getTotalPrice(self): + """ + Return total base price + """ + result = sum(filter(lambda y: y is not None, + map(lambda x: x.getTotalPrice(), self))) + return result + + security.declarePublic('getTotalDuration') + def getTotalDuration(self): + """ + Return total duration + """ + result = sum(filter(lambda y: y is not None, + map(lambda x: x.getDuration(), self))) + return result + + def multiplyQuantity(self,context=None): + """ + Take into account the quantity of the + context. Change the quantity of each element. + """ + quantity = None + if context is not None: + if context.getQuantity() is not None: + quantity = context.getQuantity() + if quantity is not None: + for x in self: + previous_quantity = x.getQuantity() + if previous_quantity is not None: + x.edit(quantity=context.getQuantity()*previous_quantity) + +InitializeClass(AggregatedAmountList) +allow_class(AggregatedAmountList) diff --git a/product/ERP5/Document/Transformation.py b/product/ERP5/Document/Transformation.py index e2a616b904e..333bedbb9d2 100644 --- a/product/ERP5/Document/Transformation.py +++ b/product/ERP5/Document/Transformation.py @@ -1,9 +1,11 @@ +# -*- coding: utf8 -*- ############################################################################## # # Copyright (c) 2002 Coramy SAS and Contributors. All Rights Reserved. # Thierry_Faucher <Thierry_Faucher@coramy.com> -# Copyright (c) 2004, 2005 Nexedi SARL and Contributors. All Rights Reserved. +# Copyright (c) 2004-2009 Nexedi SA and Contributors. All Rights Reserved. # Romain Courteaud <romain@nexedi.com> +# Åukasz Nowak <luke@nexedi.com> # # WARNING: This program as such is intended to be used by professional # programmers who take the whole responsability of assessing all potential @@ -28,7 +30,6 @@ # ############################################################################## -from Globals import InitializeClass from AccessControl import ClassSecurityInfo from Products.ERP5Type import Permissions, PropertySheet, Interface @@ -38,10 +39,8 @@ from Products.ERP5.Variated import Variated from Products.ERP5.Document.Predicate import Predicate -from Products.PythonScripts.Utility import allow_class - from Products.CMFCategory.Renderer import Renderer - +from Products.ERP5.AggregatedAmountList import AggregatedAmountList class Transformation(XMLObject, Predicate, Variated): """ @@ -270,51 +269,3 @@ class Transformation(XMLObject, Predicate, Variated): if context_quantity: result.multiplyQuantity(context=context) return result - -# XXX subclassing directly list would be better, -# but does not work yet (error with class and security) -from UserList import UserList -class AggregatedAmountList(UserList): - """ - Temporary object needed to aggregate Amount value - And to calculate some report or total value - """ - meta_type = "AggregatedAmountList" - security = ClassSecurityInfo() -# security.declareObjectPublic() - - security.declarePublic('getTotalPrice') - def getTotalPrice(self): - """ - Return total bas price of the transformation - """ - result = sum(filter(lambda y: y is not None, - map(lambda x: x.getTotalPrice(), self))) - return result - - security.declarePublic('getTotalDuration') - def getTotalDuration(self): - """ - Return total duration of the transformation - """ - result = sum(filter(lambda y: y is not None, - map(lambda x: x.getDuration(), self))) - return result - - def multiplyQuantity(self,context=None): - """ - Take into account the quantity of the - context. Change the quantity of each element. - """ - quantity = None - if context is not None: - if context.getQuantity() is not None: - quantity = context.getQuantity() - if quantity is not None: - for x in self: - previous_quantity = x.getQuantity() - if previous_quantity is not None: - x.edit(quantity=context.getQuantity()*previous_quantity) - -InitializeClass(AggregatedAmountList) -allow_class(AggregatedAmountList) -- 2.30.9