diff --git a/gnucash/report/report-system/report-utilities.scm b/gnucash/report/report-system/report-utilities.scm index 1c595a6735..0383bc9690 100644 --- a/gnucash/report/report-system/report-utilities.scm +++ b/gnucash/report/report-system/report-utilities.scm @@ -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.