Commit a6b1b63f authored by Julien Muchembled's avatar Julien Muchembled

amount_generator: revert last change in testApparelTransformation

parents 1abc4bac 5b3055d8
...@@ -39,7 +39,7 @@ from Products.ERP5Type import Permissions, PropertySheet, interfaces ...@@ -39,7 +39,7 @@ from Products.ERP5Type import Permissions, PropertySheet, interfaces
from Products.ERP5Type.Utils import deprecated from Products.ERP5Type.Utils import deprecated
from Products.ERP5.mixin.composition import _getEffectiveModel from Products.ERP5.mixin.composition import _getEffectiveModel
from Products.ERP5.Document.Transformation import Transformation from Products.ERP5.Document.Transformation import Transformation
from Products.ERP5.AggregatedAmountList import AggregatedAmountList from Products.ERP5.GeneratedAmountList import GeneratedAmountList
from Products.ERP5.Document.MappedValue import MappedValue from Products.ERP5.Document.MappedValue import MappedValue
from Products.ERP5.mixin.amount_generator import AmountGeneratorMixin from Products.ERP5.mixin.amount_generator import AmountGeneratorMixin
from Products.ERP5.mixin.variated import VariatedMixin from Products.ERP5.mixin.variated import VariatedMixin
......
...@@ -31,7 +31,7 @@ import zope.interface ...@@ -31,7 +31,7 @@ import zope.interface
from AccessControl import allow_class from AccessControl import allow_class
from Products.ERP5Type import interfaces from Products.ERP5Type import interfaces
class AggregatedAmountList(list): class GeneratedAmountList(list):
""" """
Temporary object needed to aggregate Amount value Temporary object needed to aggregate Amount value
And to calculate some report or total value And to calculate some report or total value
...@@ -60,4 +60,25 @@ class AggregatedAmountList(list): ...@@ -60,4 +60,25 @@ class AggregatedAmountList(list):
result += duration result += duration
return result return result
allow_class(AggregatedAmountList) def aggregate(self):
# XXX: Do we handle rounding correctly ?
# What to do if only total price is rounded ??
aggregate_dict = {}
result_list = self.__class__()
for amount in self:
key = (amount.getPrice(), amount.getEfficiency(),
amount.getReference(), amount.categories)
aggregate = aggregate_dict.get(key)
if aggregate is None:
aggregate_dict[key] = [amount, amount.getQuantity()]
result_list.append(amount)
else:
aggregate[1] += amount.getQuantity()
for amount, quantity in aggregate_dict.itervalues():
# Before we ignore 'quantity==0' amount here for better performance,
# but it is not a good idea, especially when the first expand causes
# non-zero quantity and then quantity becomes zero.
amount._setQuantity(quantity)
return result_list
allow_class(GeneratedAmountList)
...@@ -32,7 +32,7 @@ import zope.interface ...@@ -32,7 +32,7 @@ import zope.interface
from AccessControl import ClassSecurityInfo from AccessControl import ClassSecurityInfo
from Products.ERP5Type.Globals import InitializeClass from Products.ERP5Type.Globals import InitializeClass
from Acquisition import aq_base, Implicit from Acquisition import aq_base, Implicit
from Products.ERP5.AggregatedAmountList import AggregatedAmountList from Products.ERP5.GeneratedAmountList import GeneratedAmountList
from Products.ERP5Type import Permissions, interfaces from Products.ERP5Type import Permissions, interfaces
from Products.ERP5Type.TransactionalVariable import getTransactionalVariable from Products.ERP5Type.TransactionalVariable import getTransactionalVariable
from Products.ERP5.Document.MappedValue import MappedValue from Products.ERP5.Document.MappedValue import MappedValue
...@@ -281,7 +281,7 @@ class AmountGeneratorMixin: ...@@ -281,7 +281,7 @@ class AmountGeneratorMixin:
portal.getPortalAmountGeneratorCellTypeList() portal.getPortalAmountGeneratorCellTypeList()
# Set empty result by default # Set empty result by default
result = AggregatedAmountList() result = GeneratedAmountList()
args = (getTransactionalVariable().setdefault( args = (getTransactionalVariable().setdefault(
"amount_generator.BaseAmountDict", {}), "amount_generator.BaseAmountDict", {}),
...@@ -503,42 +503,12 @@ class AmountGeneratorMixin: ...@@ -503,42 +503,12 @@ class AmountGeneratorMixin:
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getAggregatedAmountList') 'getAggregatedAmountList')
def getAggregatedAmountList(self, amount_list=None, rounding=False, def getAggregatedAmountList(self, *args, **kw):
amount_generator_type_list=None,
generate_empty_amounts=True):
""" """
Implementation of a generic transformation algorith which is Implementation of a generic transformation algorith which is
applicable to payroll, tax generation and BOMs. Return the applicable to payroll, tax generation and BOMs. Return the
list of amounts with aggregation. list of amounts with aggregation.
""" """
generated_amount_list = self.getGeneratedAmountList( return self.getGeneratedAmountList(*args, **kw).aggregate()
amount_list=amount_list, rounding=rounding,
amount_generator_type_list=amount_generator_type_list)
# XXX: Do we handle rounding correctly ?
# What to do if only total price is rounded ??
aggregate_dict = {}
result_list = AggregatedAmountList()
for amount in generated_amount_list:
key = (amount.getPrice(), amount.getEfficiency(),
amount.getReference(), amount.categories)
aggregate = aggregate_dict.get(key)
if aggregate is None:
aggregate_dict[key] = [amount, amount.getQuantity()]
result_list.append(amount)
else:
aggregate[1] += amount.getQuantity()
for amount, quantity in aggregate_dict.itervalues():
# Before we ignore 'quantity==0' amount here for better
# performance, but it is not a good idea, especially when the
# first expand causes non-zero quantity and then quantity
# becomes zero.
amount._setQuantity(quantity)
if 0:
print 'getAggregatedAmountList(%r) -> (%s)' % (
self.getRelativeUrl(),
', '.join('(%s, %s, %s)'
% (x.getResourceTitle(), x.getQuantity(), x.getPrice())
for x in result_list))
return result_list
InitializeClass(AmountGeneratorMixin) InitializeClass(AmountGeneratorMixin)
...@@ -55,7 +55,7 @@ implements_tuple_list = [ ...@@ -55,7 +55,7 @@ implements_tuple_list = [
(('Products.ERP5.Document.EmailDocument', 'EmailDocument'), 'IDocument'), (('Products.ERP5.Document.EmailDocument', 'EmailDocument'), 'IDocument'),
(('Products.ERP5.Document.Event', 'Event'), 'IDocument'), (('Products.ERP5.Document.Event', 'Event'), 'IDocument'),
# IAmountList # IAmountList
(('Products.ERP5.AggregatedAmountList', 'AggregatedAmountList'), 'IAmountList'), (('Products.ERP5.GeneratedAmountList', 'GeneratedAmountList'), 'IAmountList'),
] ]
# IMovementGroup # IMovementGroup
for movement_group_class_name in ['MovementGroup', 'BaseVariantMovementGroup', for movement_group_class_name in ['MovementGroup', 'BaseVariantMovementGroup',
......
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