|
|
|
|
@ -506,28 +506,26 @@ flawed. see report-utilities.scm. please update reports.")
|
|
|
|
|
(() (reverse result))
|
|
|
|
|
|
|
|
|
|
((date . rest)
|
|
|
|
|
(define (before-date? s) (< (split->date s) date))
|
|
|
|
|
(define (after-date? s) (< date (split->date s)))
|
|
|
|
|
(match splits
|
|
|
|
|
|
|
|
|
|
;; end of splits, but still has dates. pad with last-result
|
|
|
|
|
;; until end of dates.
|
|
|
|
|
(() (lp '() rest (cons last-result result) last-result))
|
|
|
|
|
|
|
|
|
|
((head . tail)
|
|
|
|
|
(let ((next (and (pair? tail) (car tail))))
|
|
|
|
|
(cond
|
|
|
|
|
|
|
|
|
|
;; the next split is still before date.
|
|
|
|
|
((and next (< (split->date next) date))
|
|
|
|
|
(lp tail dates result (split->elt head)))
|
|
|
|
|
;; the next split is still before date.
|
|
|
|
|
((and (_ (? before-date?) . _) (head . tail))
|
|
|
|
|
(lp tail dates result (split->elt head)))
|
|
|
|
|
|
|
|
|
|
;; head split after date, accumulate previous result
|
|
|
|
|
((< date (split->date head))
|
|
|
|
|
(lp splits rest (cons last-result result) last-result))
|
|
|
|
|
;; head split after date, accumulate previous result
|
|
|
|
|
(((? after-date?) . tail)
|
|
|
|
|
(lp splits rest (cons last-result result) last-result))
|
|
|
|
|
|
|
|
|
|
;; head split before date, next split after date, or end.
|
|
|
|
|
(else
|
|
|
|
|
(let ((head-result (split->elt head)))
|
|
|
|
|
(lp tail rest (cons head-result result) head-result)))))))))))
|
|
|
|
|
;; head split before date, next split after date, or end.
|
|
|
|
|
((head . tail)
|
|
|
|
|
(let ((head-result (split->elt head)))
|
|
|
|
|
(lp tail rest (cons head-result result) head-result))))))))
|
|
|
|
|
|
|
|
|
|
;; This works similar as above but returns a commodity-collector,
|
|
|
|
|
;; thus takes care of children accounts with different currencies.
|
|
|
|
|
|