package gw.financials uses java.util.Collection uses java.util.List class LegacyTransactionReducer implements TransactionReducer { static var _reductionCount : int = 0 public static property get ReductionCount() : int { //count total times reduce is called return _reductionCount } var _orderingFunction : block (txns : Collection>) : WrappedProratable var _transactions : List> var _defaultProrater : Prorater construct(prorater : Prorater, orderingFunction(txns : Collection>) : WrappedProratable) { _defaultProrater = prorater _orderingFunction = orderingFunction _transactions = {} } override function add( t: WrappedProratable ) : TransactionReducer { _transactions.add(t) return this } override function reduce() : List> { _reductionCount = _reductionCount + 1 var result : List> = {} var segmenter = new DateRangeSegmenter>() for (t in _transactions) { segmenter.add( t.Start, t.End, t ) } segmenter.segment( \ start, end, txns -> { var elements = txns.map( \ t -> { var _prorater = t.getProrater(_defaultProrater) return _prorater.prorate( t.Start, t.End, start, end, t.Amount ) }) if (elements.Empty) { return } var sum = elements.sumWithAtLeastOneNonNullCurrency() if (not sum.IsZero) { var firstTransaction = _orderingFunction(txns) result.add(firstTransaction.subPeriod( start, end, sum)) } }) return result } }