Bug #568473 – Add option to average-balance report.

It allows transactions that go from one selected account
to another to be ignored.

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@17855 57a11ea4-9604-0410-9ed3-97b8803252fd
2.4
Derek Atkins 17 years ago
parent 90af51c3e3
commit ec886fd223

@ -23,6 +23,7 @@
(define optname-report-currency (N_ "Report's currency"))
(define optname-price-source (N_ "Price Source"))
(define optname-subacct (N_ "Include Sub-Accounts"))
(define optname-internal (N_ "Exclude transactions between selected accounts?"))
;;;;;;;;;;;;;;;;;;;;;;;;;
;; Options
@ -56,11 +57,18 @@
gnc:pagename-accounts optname-subacct
"a" (N_ "Include sub-accounts of all selected accounts") #t))
(register-option
(gnc:make-simple-boolean-option
gnc:pagename-accounts optname-internal
"b"
(N_ "Exclude transactions that only involve two accounts, both of which are selected below. This only affects the profit and loss columns of the table.")
#f))
;; account(s) to do report on
(register-option
(gnc:make-account-list-option
gnc:pagename-accounts (N_ "Accounts")
"b" (N_ "Do transaction report on this account")
"c" (N_ "Do transaction report on this account")
(lambda ()
;; FIXME : gnc:get-current-accounts disappeared
(let ((current-accounts '()))
@ -128,7 +136,8 @@
;; the report-currency by means of the monetary->double
;; function.
(define (analyze-splits splits start-bal-double
start-date end-date interval monetary->double)
start-date end-date interval monetary->double
internal)
(let ((interval-list
(gnc:make-date-interval-list start-date end-date interval))
(data-rows '()))
@ -205,23 +214,41 @@
(xaccSplitGetParent split)))
;; FIXME: Which date should we use here? The 'to'
;; date? the 'split-time'?
(split-amt (get-split-value split split-time)))
(gnc:debug "split " split)
(gnc:debug "split-time " split-time)
(gnc:debug "split-amt " split-amt)
;; gnc:debug converts its input to a string before
;; deciding whether to print it, and converting
;; |splits| to a string is O(N) in its length. Since
;; this code runs for every split, leaving that
;; gnc:debug in makes the whole thing O(N^2) in number
;; of splits. If someone really needs this output,
;; they should uncomment the gnc:debug call.
; (gnc:debug "splits " splits)
(update-stats split-amt split-time)
(set! splits (cdr splits))
(split-recurse))))
(split-amt (get-split-value split split-time))
(next (cdr splits)))
(if
;; Check whether this split and next one are a pair
;; from the same transaction, and the only ones in
;; this transaction.
;; If they are and the flag is set appropriately,
;; then skip both.
(or internal
(null? next)
(let* ((next-split (car next))
(trans (xaccSplitGetParent split))
(next-trans (xaccSplitGetParent next-split))
(count (xaccTransCountSplits trans)))
(not (and (eqv? count 2)
(equal? trans next-trans)))))
(begin
(gnc:debug "split " split)
(gnc:debug "split-time " split-time)
(gnc:debug "split-amt " split-amt)
;; gnc:debug converts its input to a string before
;; deciding whether to print it, and converting
;; |splits| to a string is O(N) in its length. Since
;; this code runs for every split, leaving that
;; gnc:debug in makes the whole thing O(N^2) in number
;; of splits. If someone really needs this output,
;; they should uncomment the gnc:debug call.
; (gnc:debug "splits " splits)
(update-stats split-amt split-time)
(set! splits next)
(split-recurse))
(begin
(set! splits (cdr next))
(split-recurse))))))
; the minmax accumulator
@ -288,6 +315,7 @@
(price-source (get-option gnc:pagename-general
optname-price-source))
(internal-included (not (get-option gnc:pagename-accounts optname-internal)))
(accounts (get-option gnc:pagename-accounts (N_ "Accounts")))
(dosubs? (get-option gnc:pagename-accounts optname-subacct))
@ -408,7 +436,8 @@
;; and analyze the data
(set! data (analyze-splits splits startbal
begindate enddate
stepsize monetary->double))
stepsize monetary->double
internal-included))
(gnc:report-percent-done 70)
;; make a plot (optionally)... if both plot and table,

Loading…
Cancel
Save