gnucash maint: Multiple changes pushed
Christopher Lam
clam at code.gnucash.org
Wed Feb 20 07:57:40 EST 2019
Updated via https://github.com/Gnucash/gnucash/commit/6945e1c7 (commit)
via https://github.com/Gnucash/gnucash/commit/2215dfc5 (commit)
via https://github.com/Gnucash/gnucash/commit/c6f5e673 (commit)
via https://github.com/Gnucash/gnucash/commit/d97d4930 (commit)
via https://github.com/Gnucash/gnucash/commit/1a69bf1b (commit)
via https://github.com/Gnucash/gnucash/commit/56bccd1b (commit)
from https://github.com/Gnucash/gnucash/commit/12d6ace9 (commit)
commit 6945e1c7d70d8b7ed0ae6287b75ed80ed87f7366
Author: Christopher Lam <christopher.lck at gmail.com>
Date: Wed Feb 20 20:43:48 2019 +0800
[cash-flow][budget] logic error in sub-accounts handling
Previous logic would cycle through accounts' sub-accounts, and each
sub-account would be queried for inclusion in accounts; if not
present, the accounts would be appended by all sub-accounts.
Logic would dictate that only the missing sub-account should be added
to the accounts list.
No functional change is expected; previous behaviour would generate an
unnecessarily long resulting accounts list (includes sub-accounts as
many times as there are sub-accounts).
diff --git a/gnucash/report/standard-reports/budget.scm b/gnucash/report/standard-reports/budget.scm
index 66a6d8780..a31801a5a 100644
--- a/gnucash/report/standard-reports/budget.scm
+++ b/gnucash/report/standard-reports/budget.scm
@@ -818,7 +818,7 @@
(for-each
(lambda (sub-account)
(if (not (account-in-list? sub-account accounts))
- (set! accounts (append accounts sub-accounts))))
+ (set! accounts (cons sub-account accounts))))
sub-accounts)))
(cond
diff --git a/gnucash/report/standard-reports/cash-flow.scm b/gnucash/report/standard-reports/cash-flow.scm
index 08c87f570..b8ed255d6 100644
--- a/gnucash/report/standard-reports/cash-flow.scm
+++ b/gnucash/report/standard-reports/cash-flow.scm
@@ -173,7 +173,7 @@
(for-each
(lambda (sub-account)
(if (not (account-in-list? sub-account accounts))
- (set! accounts (append accounts sub-accounts))))
+ (set! accounts (cons sub-account accounts))))
sub-accounts)))
commit 2215dfc5e1bf052f8fb3ed4096d12f707fd925a8
Author: Christopher Lam <christopher.lck at gmail.com>
Date: Sat Jan 26 23:59:18 2019 +0800
[cash-flow] clean up cash-flow calculator
1. remove split-seen? helper function. use a simple list.
2. they were maintaining 2 lists for in, 2 lists for out. simplify to
1 list each.
3. convert single-use function to named let
4. remove transaction date filter - transactions were already
date-filtered by the query prior.
5. use simple lists instead of split/account hash tables. use the
incredible versatile srfi-1 functions.
6. s-report-value can be defined earlier
7. clean up whitespace so that line maxwidth is 80
8. tests already exist in test-cash-flow.scm
diff --git a/gnucash/report/standard-reports/cash-flow.scm b/gnucash/report/standard-reports/cash-flow.scm
index 516a20b6e..08c87f570 100644
--- a/gnucash/report/standard-reports/cash-flow.scm
+++ b/gnucash/report/standard-reports/cash-flow.scm
@@ -381,114 +381,75 @@
(to-date-t64 (cdr (assq 'to-date-t64 settings)))
(from-date-t64 (cdr (assq 'from-date-t64 settings)))
(report-currency (cdr (assq 'report-currency settings)))
- (include-trading-accounts (cdr (assq 'include-trading-accounts settings)))
+ (include-trading-accounts
+ (cdr (assq 'include-trading-accounts settings)))
(to-report-currency (cdr (assq 'to-report-currency settings)))
-
- (is-report-account? (account-in-list-pred accounts))
-
- (money-in-accounts '())
- (money-in-hash (make-hash-table))
+ (money-in '())
(money-in-collector (gnc:make-commodity-collector))
-
- (money-out-accounts '())
- (money-out-hash (make-hash-table))
+ (money-out '())
(money-out-collector (gnc:make-commodity-collector))
-
- (all-splits (gnc:account-get-trans-type-splits-interval accounts '() from-date-t64 to-date-t64))
+ (all-splits (gnc:account-get-trans-type-splits-interval
+ accounts '() from-date-t64 to-date-t64))
(splits-to-do (length all-splits))
- (splits-seen-table (make-hash-table))
- (work-done 0))
-
- (define (split-seen? split)
- (if (split-hashtable-ref splits-seen-table split) #t
- (begin
- (split-hashtable-set! splits-seen-table split #t)
- #f)))
-
- (define (work-per-split split)
- (set! work-done (+ 1 work-done))
- (if (= (modulo work-done 100) 0)
- (gnc:report-percent-done (* 85 (/ work-done splits-to-do))))
- (let ((parent (xaccSplitGetParent split)))
- (if (and (<= (xaccTransGetDate parent) to-date-t64)
- (>= (xaccTransGetDate parent) from-date-t64))
- (let* ((parent-description (xaccTransGetDescription parent))
- (parent-currency (xaccTransGetCurrency parent)))
- (gnc:debug parent-description
- " - "
- (gnc-commodity-get-printname parent-currency))
- (for-each
- (lambda (s)
- (let* ((s-account (xaccSplitGetAccount s))
- (s-account-type (xaccAccountGetType s-account))
- (s-amount (xaccSplitGetAmount s))
- (s-value (xaccSplitGetValue s))
- (s-commodity (xaccAccountGetCommodity s-account)))
- ;; Check if this is a dangling split
- ;; and print a warning
- (if (null? s-account)
- (display
- (string-append
- "WARNING: s-account is NULL for split: "
- (gncSplitGetGUID s) "\n")))
- (gnc:debug (xaccAccountGetName s-account))
- (if (and ;; make sure we don't have
- (not (null? s-account)) ;; any dangling splits
- (or include-trading-accounts (not (eq? s-account-type ACCT-TYPE-TRADING)))
- (not (is-report-account? s-account)))
- (if (not (split-seen? s))
- (begin
- (if (gnc-numeric-negative-p s-value)
- (let ((s-account-in-collector (account-hashtable-ref money-in-hash s-account)))
- ;(gnc:debug "in:" (gnc-commodity-get-printname s-commodity)
- ; (gnc-numeric-to-double s-amount)
- ; (gnc-commodity-get-printname parent-currency)
- ; (gnc-numeric-to-double s-value))
- (if (not s-account-in-collector)
- (begin
- (set! s-account-in-collector (gnc:make-commodity-collector))
- (account-hashtable-set! money-in-hash s-account
- s-account-in-collector)
- (set! money-in-accounts (cons s-account money-in-accounts))
- )
- )
- (let ((s-report-value (to-report-currency parent-currency
- (gnc-numeric-neg s-value)
- (xaccTransGetDate
- parent))))
- (money-in-collector 'add report-currency s-report-value)
- (s-account-in-collector 'add report-currency s-report-value))
- )
- (let ((s-account-out-collector (account-hashtable-ref money-out-hash s-account)))
- ;(gnc:debug "out:" (gnc-commodity-get-printname s-commodity)
- ; (gnc-numeric-to-double s-amount)
- ; (gnc-commodity-get-printname parent-currency)
- ; (gnc-numeric-to-double s-value))
- (if (not s-account-out-collector)
- (begin
- (set! s-account-out-collector (gnc:make-commodity-collector))
- (account-hashtable-set! money-out-hash s-account
- s-account-out-collector)
- (set! money-out-accounts (cons s-account money-out-accounts))
- )
- )
- (let ((s-report-value (to-report-currency parent-currency
- s-value
- (xaccTransGetDate
- parent))))
- (money-out-collector 'add report-currency s-report-value)
- (s-account-out-collector 'add report-currency s-report-value)))))))))
- (xaccTransGetSplitList parent))))))
-
- (for-each work-per-split all-splits)
+ (splits-seen-list '()))
+
+ (let loop ((splits all-splits)
+ (work-done 0))
+ (unless (null? splits)
+ (if (zero? (modulo work-done 100))
+ (gnc:report-percent-done (* 85 (/ work-done splits-to-do))))
+ (let* ((split (car splits))
+ (parent (xaccSplitGetParent split)))
+ (for-each
+ (lambda (s)
+ (let* ((s-account (xaccSplitGetAccount s))
+ (s-value (xaccSplitGetValue s))
+ (s-report-value (to-report-currency (xaccTransGetCurrency parent)
+ (abs s-value)
+ (xaccTransGetDate parent))))
+ (cond
+ ((null? s-account)
+ (format #t "WARNING: s-account is NULL for split: ~a\n"
+ (gncSplitGetGUID s)))
+ ((or (and include-trading-accounts
+ (eqv? (xaccAccountGetType s-account)
+ ACCT-TYPE-TRADING))
+ (member s-account accounts)
+ (member s splits-seen-list))
+ #f)
+ ((negative? s-value)
+ (let ((s-account-in-collector
+ (or (assoc-ref money-in s-account)
+ (let ((coll (gnc:make-commodity-collector)))
+ (set! money-in
+ (assoc-set! money-in s-account coll))
+ coll))))
+ (set! splits-seen-list (cons s splits-seen-list))
+ (money-in-collector 'add report-currency s-report-value)
+ (s-account-in-collector
+ 'add report-currency s-report-value)))
+ ((positive? s-value)
+ (let ((s-account-out-collector
+ (or (assoc-ref money-out s-account)
+ (let ((coll (gnc:make-commodity-collector)))
+ (set! money-out
+ (assoc-set! money-out s-account coll))
+ coll))))
+ (set! splits-seen-list (cons s splits-seen-list))
+ (money-out-collector 'add report-currency s-report-value)
+ (s-account-out-collector
+ 'add report-currency s-report-value))))))
+ (xaccTransGetSplitList parent)))
+ (loop (cdr splits) (1+ work-done))))
;; Return an association list of results
- (list (cons 'money-in-accounts money-in-accounts)
- (cons 'money-in-alist (hash-map->list (lambda (k v) (list k v)) money-in-hash))
- (cons 'money-in-collector money-in-collector)
- (cons 'money-out-accounts money-out-accounts)
- (cons 'money-out-alist (hash-map->list (lambda (k v) (list k v)) money-out-hash))
- (cons 'money-out-collector money-out-collector))))
+ (list
+ (cons 'money-in-accounts (map car money-in))
+ (cons 'money-in-alist (map (lambda (p) (list (car p) (cdr p))) money-in))
+ (cons 'money-in-collector money-in-collector)
+ (cons 'money-out-accounts (map car money-out))
+ (cons 'money-out-alist (map (lambda (p) (list (car p) (cdr p))) money-out))
+ (cons 'money-out-collector money-out-collector))))
(gnc:define-report
'version 1
commit c6f5e6736b516d1cf568af60e3418a2027589362
Author: Christopher Lam <christopher.lck at gmail.com>
Date: Wed Feb 20 20:00:38 2019 +0800
[cash-flow] *untabify/delete-trailing-whitespace/reindent*
diff --git a/gnucash/report/standard-reports/cash-flow.scm b/gnucash/report/standard-reports/cash-flow.scm
index 60b97d339..516a20b6e 100644
--- a/gnucash/report/standard-reports/cash-flow.scm
+++ b/gnucash/report/standard-reports/cash-flow.scm
@@ -28,7 +28,7 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define-module (gnucash report standard-reports cash-flow))
-(use-modules (gnucash utilities))
+(use-modules (gnucash utilities))
(use-modules (gnucash gnc-module))
(use-modules (gnucash gettext))
(use-modules (gnucash engine))
@@ -61,7 +61,7 @@
;; date interval
(gnc:options-add-date-interval!
- options gnc:pagename-general
+ options gnc:pagename-general
optname-from-date optname-to-date "a")
;; all about currencies
@@ -69,43 +69,43 @@
options gnc:pagename-general
optname-report-currency "b")
- (gnc:options-add-price-source!
+ (gnc:options-add-price-source!
options gnc:pagename-general
optname-price-source "c" 'pricedb-nearest)
- (gnc:register-option
+ (gnc:register-option
options
(gnc:make-simple-boolean-option
gnc:pagename-general optname-show-rates
"d" (N_ "Show the exchange rates used.") #f))
- (gnc:register-option
+ (gnc:register-option
options
(gnc:make-simple-boolean-option
gnc:pagename-general optname-show-full-names
"e" (N_ "Show full account names (including parent accounts).") #t))
;; accounts to work on
- (gnc:options-add-account-selection!
+ (gnc:options-add-account-selection!
options gnc:pagename-accounts
optname-display-depth optname-show-subaccounts
optname-accounts "a" 2
(lambda ()
- (gnc:filter-accountlist-type
+ (gnc:filter-accountlist-type
(list ACCT-TYPE-BANK ACCT-TYPE-CASH ACCT-TYPE-ASSET
ACCT-TYPE-STOCK ACCT-TYPE-MUTUAL)
(gnc-account-get-descendants-sorted (gnc-get-current-root-account))))
#f)
-
- ;; Trading accounts?
- (gnc:register-option
- options
- (gnc:make-simple-boolean-option
- gnc:pagename-accounts optname-include-trading-accounts
- "b" (N_ "Include transfers to and from Trading Accounts in the report.") #f))
-
+
+ ;; Trading accounts?
+ (gnc:register-option
+ options
+ (gnc:make-simple-boolean-option
+ gnc:pagename-accounts optname-include-trading-accounts
+ "b" (N_ "Include transfers to and from Trading Accounts in the report.") #f))
+
;; Set the general page as default option tab
- (gnc:options-set-default-section options gnc:pagename-general)
+ (gnc:options-set-default-section options gnc:pagename-general)
options))
@@ -117,39 +117,39 @@
(define (cash-flow-renderer report-obj)
(define (get-option pagename optname)
(gnc:option-value
- (gnc:lookup-option
+ (gnc:lookup-option
(gnc:report-options report-obj) pagename optname)))
(gnc:report-starting reportname)
;; get all option's values
- (let* ((display-depth (get-option gnc:pagename-accounts
+ (let* ((display-depth (get-option gnc:pagename-accounts
optname-display-depth))
(show-subaccts? (get-option gnc:pagename-accounts
optname-show-subaccounts))
(accounts (get-option gnc:pagename-accounts
optname-accounts))
(include-trading-accounts (get-option gnc:pagename-accounts
- optname-include-trading-accounts))
+ optname-include-trading-accounts))
(row-num 0)
- (work-done 0)
- (work-to-do 0)
+ (work-done 0)
+ (work-to-do 0)
(report-currency (get-option gnc:pagename-general
optname-report-currency))
(price-source (get-option gnc:pagename-general
optname-price-source))
- (show-rates? (get-option gnc:pagename-general
+ (show-rates? (get-option gnc:pagename-general
optname-show-rates))
- (show-full-names? (get-option gnc:pagename-general
+ (show-full-names? (get-option gnc:pagename-general
optname-show-full-names))
- (from-date-t64 (gnc:time64-start-day-time
- (gnc:date-option-absolute-time
- (get-option gnc:pagename-general
- optname-from-date))))
- (to-date-t64 (gnc:time64-end-day-time
- (gnc:date-option-absolute-time
- (get-option gnc:pagename-general
- optname-to-date))))
+ (from-date-t64 (gnc:time64-start-day-time
+ (gnc:date-option-absolute-time
+ (get-option gnc:pagename-general
+ optname-from-date))))
+ (to-date-t64 (gnc:time64-end-day-time
+ (gnc:date-option-absolute-time
+ (get-option gnc:pagename-general
+ optname-to-date))))
;; calculate the exchange rates
(exchange-fn (gnc:case-exchange-fn
@@ -159,229 +159,217 @@
(table (gnc:make-html-table))
(txt (gnc:make-html-text)))
- (gnc:html-document-set-title!
+ (gnc:html-document-set-title!
doc (string-append
(get-option gnc:pagename-general gnc:optname-reportname)
" - "
(format #f (_ "~a to ~a")
- (qof-print-date from-date-t64) (qof-print-date to-date-t64))))
+ (qof-print-date from-date-t64) (qof-print-date to-date-t64))))
;; add subaccounts if requested
(if show-subaccts?
(let ((sub-accounts (gnc:acccounts-get-all-subaccounts accounts)))
(for-each
- (lambda (sub-account)
- (if (not (account-in-list? sub-account accounts))
- (set! accounts (append accounts sub-accounts))))
- sub-accounts)))
+ (lambda (sub-account)
+ (if (not (account-in-list? sub-account accounts))
+ (set! accounts (append accounts sub-accounts))))
+ sub-accounts)))
(if (not (null? accounts))
(let* ((tree-depth (if (equal? display-depth 'all)
- (accounts-get-children-depth accounts)
+ (accounts-get-children-depth accounts)
display-depth))
(money-diff-collector (gnc:make-commodity-collector))
- (account-disp-list '())
-
- (time-exchange-fn #f)
- (commodity-list (gnc:accounts-get-commodities
- accounts
- report-currency))
- ;; Get an exchange function that will convert each transaction using the
- ;; nearest available exchange rate if that is what is specified
- (time-exchange-fn (gnc:case-exchange-time-fn
- price-source report-currency
- commodity-list to-date-t64
- 0 0)))
-
- ;; Helper function to convert currencies
- (define (to-report-currency currency amount date)
- (gnc:gnc-monetary-amount
- (time-exchange-fn (gnc:make-gnc-monetary currency amount)
- report-currency
- date)))
+ (account-disp-list '())
+
+ (time-exchange-fn #f)
+ (commodity-list (gnc:accounts-get-commodities
+ accounts
+ report-currency))
+ ;; Get an exchange function that will convert each transaction using the
+ ;; nearest available exchange rate if that is what is specified
+ (time-exchange-fn (gnc:case-exchange-time-fn
+ price-source report-currency
+ commodity-list to-date-t64
+ 0 0)))
+
+ ;; Helper function to convert currencies
+ (define (to-report-currency currency amount date)
+ (gnc:gnc-monetary-amount
+ (time-exchange-fn (gnc:make-gnc-monetary currency amount)
+ report-currency
+ date)))
(let ((result (cash-flow-calc-money-in-out
- (list (cons 'accounts accounts)
- (cons 'to-date-t64 to-date-t64)
- (cons 'from-date-t64 from-date-t64)
- (cons 'report-currency report-currency)
- (cons 'include-trading-accounts include-trading-accounts)
- (cons 'to-report-currency to-report-currency)))))
- (let ((money-in-accounts (cdr (assq 'money-in-accounts result)))
- (money-in-alist (cdr (assq 'money-in-alist result)))
- (money-in-collector (cdr (assq 'money-in-collector result)))
- (money-out-accounts (cdr (assq 'money-out-accounts result)))
- (money-out-alist (cdr (assq 'money-out-alist result)))
- (money-out-collector (cdr (assq 'money-out-collector result))))
- (money-diff-collector 'merge money-in-collector #f)
- (money-diff-collector 'minusmerge money-out-collector #f)
-
- (set! accounts (sort accounts account-full-name<?))
- (set! money-in-accounts (sort money-in-accounts account-full-name<?))
- (set! money-out-accounts (sort money-out-accounts account-full-name<?))
-
-
- (set! work-done 0)
- (set! work-to-do (length accounts))
- (for-each
- (lambda (account)
- (set! work-done (+ 1 work-done))
- (gnc:report-percent-done (+ 85 (* 5 (/ work-done work-to-do))))
- (if (<= (gnc-account-get-current-depth account) tree-depth)
- (let* ((anchor (gnc:html-markup/format
- (if (and (= (gnc-account-get-current-depth account) tree-depth)
- (not (eq? (gnc-account-get-children account) '())))
- (if show-subaccts?
- (_ "~a and subaccounts")
- (_ "~a and selected subaccounts"))
- "~a")
- (gnc:html-markup-anchor
- (gnc:account-anchor-text account)
- (if show-full-names?
- (gnc-account-get-full-name account)
- (xaccAccountGetName account))))))
-
- (set! account-disp-list (cons anchor account-disp-list))
- )
- )
- )
- accounts
- )
-
-
- (gnc:html-document-add-object!
- doc
- (gnc:make-html-text (_ "Selected Accounts")))
-
- (gnc:html-document-add-object!
- doc
- (gnc:make-html-text
- (gnc:html-markup-ul
- (reverse account-disp-list))))
-
- (gnc:html-table-append-ruler! table 2)
-
- (gnc:html-table-append-row/markup!
- table
- "primary-subheading"
- (list
- (_ "Money into selected accounts comes from")
- ""))
-
- (set! row-num 0)
- (set! work-done 0)
- (set! work-to-do (length money-in-alist))
- (for-each
- (lambda (account)
- (set! row-num (+ 1 row-num))
- (set! work-done (+ 1 work-done))
- (gnc:report-percent-done (+ 90 (* 5 (/ work-done work-to-do))))
- (let* ((pair (assoc account money-in-alist))
- (acct (car pair)))
- (gnc:html-table-append-row/markup!
- table
- (if (odd? row-num) "normal-row" "alternate-row")
- (list
- ;(gnc:html-account-anchor acct)
- (gnc:make-html-text
- (gnc:html-markup-anchor
- (gnc:account-anchor-text acct)
- (if show-full-names?
- (gnc-account-get-full-name acct)
- (xaccAccountGetName acct))))
- (gnc:make-html-table-header-cell/markup
- "number-cell" (gnc:sum-collector-commodity (cadr pair) report-currency exchange-fn))))
- )
- )
- money-in-accounts
- )
-
- (gnc:html-table-append-row/markup!
- table
- "grand-total"
- (list
- (gnc:make-html-table-header-cell/markup "text-cell" (_ "Money In"))
- (gnc:make-html-table-header-cell/markup
- "total-number-cell" (gnc:sum-collector-commodity money-in-collector report-currency exchange-fn))))
-
- (gnc:html-table-append-ruler! table 2)
-
- (gnc:html-table-append-row/markup!
- table
- "primary-subheading"
- (list
- (_ "Money out of selected accounts goes to")
- ""))
-
- (set! row-num 0)
- (set! work-done 0)
- (set! work-to-do (length money-out-alist))
- (for-each
- (lambda (account)
- (set! row-num (+ 1 row-num))
- (set! work-done (+ 1 work-done))
- (gnc:report-percent-done (+ 95 (* 5 (/ work-done work-to-do))))
- (let* ((pair (assoc account money-out-alist))
- (acct (car pair)))
- (gnc:html-table-append-row/markup!
- table
- (if (odd? row-num) "normal-row" "alternate-row")
- (list
- ;(gnc:html-account-anchor acct)
- (gnc:make-html-text
- (gnc:html-markup-anchor
- (gnc:account-anchor-text acct)
- (if show-full-names?
- (gnc-account-get-full-name acct)
- (xaccAccountGetName acct))))
- (gnc:make-html-table-header-cell/markup
- "number-cell" (gnc:sum-collector-commodity (cadr pair) report-currency exchange-fn))))
- )
- )
- money-out-accounts
- )
-
- (gnc:html-table-append-row/markup!
- table
- "grand-total"
- (list
- (gnc:make-html-table-header-cell/markup "text-cell" (_ "Money Out"))
- (gnc:make-html-table-header-cell/markup
- "total-number-cell" (gnc:sum-collector-commodity money-out-collector report-currency exchange-fn))))
-
- (gnc:html-table-append-ruler! table 2)
-
- (gnc:html-table-append-row/markup!
- table
- "grand-total"
- (list
- (gnc:make-html-table-header-cell/markup "text-cell" (_ "Difference"))
- (gnc:make-html-table-header-cell/markup
- "total-number-cell" (gnc:sum-collector-commodity money-diff-collector report-currency exchange-fn))))
-
- (gnc:html-document-add-object! doc table)
-
-
- ;; add currency information
- (if show-rates?
- (gnc:html-document-add-object!
- doc ;;(gnc:html-markup-p
- (gnc:html-make-exchangerates
- report-currency exchange-fn accounts))))
-
- ))
-
- ;; error condition: no accounts specified
-
- (gnc:html-document-add-object!
- doc
- (gnc:html-make-no-account-warning
- reportname (gnc:report-id report-obj))))
+ (list (cons 'accounts accounts)
+ (cons 'to-date-t64 to-date-t64)
+ (cons 'from-date-t64 from-date-t64)
+ (cons 'report-currency report-currency)
+ (cons 'include-trading-accounts include-trading-accounts)
+ (cons 'to-report-currency to-report-currency)))))
+ (let ((money-in-accounts (cdr (assq 'money-in-accounts result)))
+ (money-in-alist (cdr (assq 'money-in-alist result)))
+ (money-in-collector (cdr (assq 'money-in-collector result)))
+ (money-out-accounts (cdr (assq 'money-out-accounts result)))
+ (money-out-alist (cdr (assq 'money-out-alist result)))
+ (money-out-collector (cdr (assq 'money-out-collector result))))
+ (money-diff-collector 'merge money-in-collector #f)
+ (money-diff-collector 'minusmerge money-out-collector #f)
+
+ (set! accounts (sort accounts account-full-name<?))
+ (set! money-in-accounts (sort money-in-accounts account-full-name<?))
+ (set! money-out-accounts (sort money-out-accounts account-full-name<?))
+
+
+ (set! work-done 0)
+ (set! work-to-do (length accounts))
+ (for-each
+ (lambda (account)
+ (set! work-done (+ 1 work-done))
+ (gnc:report-percent-done (+ 85 (* 5 (/ work-done work-to-do))))
+ (if (<= (gnc-account-get-current-depth account) tree-depth)
+ (let* ((anchor (gnc:html-markup/format
+ (if (and (= (gnc-account-get-current-depth account) tree-depth)
+ (not (eq? (gnc-account-get-children account) '())))
+ (if show-subaccts?
+ (_ "~a and subaccounts")
+ (_ "~a and selected subaccounts"))
+ "~a")
+ (gnc:html-markup-anchor
+ (gnc:account-anchor-text account)
+ (if show-full-names?
+ (gnc-account-get-full-name account)
+ (xaccAccountGetName account))))))
+
+ (set! account-disp-list (cons anchor account-disp-list)))))
+ accounts)
+
+
+ (gnc:html-document-add-object!
+ doc
+ (gnc:make-html-text (_ "Selected Accounts")))
+
+ (gnc:html-document-add-object!
+ doc
+ (gnc:make-html-text
+ (gnc:html-markup-ul
+ (reverse account-disp-list))))
+
+ (gnc:html-table-append-ruler! table 2)
+
+ (gnc:html-table-append-row/markup!
+ table
+ "primary-subheading"
+ (list
+ (_ "Money into selected accounts comes from")
+ ""))
+
+ (set! row-num 0)
+ (set! work-done 0)
+ (set! work-to-do (length money-in-alist))
+ (for-each
+ (lambda (account)
+ (set! row-num (+ 1 row-num))
+ (set! work-done (+ 1 work-done))
+ (gnc:report-percent-done (+ 90 (* 5 (/ work-done work-to-do))))
+ (let* ((pair (assoc account money-in-alist))
+ (acct (car pair)))
+ (gnc:html-table-append-row/markup!
+ table
+ (if (odd? row-num) "normal-row" "alternate-row")
+ (list
+ ;(gnc:html-account-anchor acct)
+ (gnc:make-html-text
+ (gnc:html-markup-anchor
+ (gnc:account-anchor-text acct)
+ (if show-full-names?
+ (gnc-account-get-full-name acct)
+ (xaccAccountGetName acct))))
+ (gnc:make-html-table-header-cell/markup
+ "number-cell" (gnc:sum-collector-commodity (cadr pair) report-currency exchange-fn))))))
+ money-in-accounts)
+
+ (gnc:html-table-append-row/markup!
+ table
+ "grand-total"
+ (list
+ (gnc:make-html-table-header-cell/markup "text-cell" (_ "Money In"))
+ (gnc:make-html-table-header-cell/markup
+ "total-number-cell" (gnc:sum-collector-commodity money-in-collector report-currency exchange-fn))))
+
+ (gnc:html-table-append-ruler! table 2)
+
+ (gnc:html-table-append-row/markup!
+ table
+ "primary-subheading"
+ (list
+ (_ "Money out of selected accounts goes to")
+ ""))
+
+ (set! row-num 0)
+ (set! work-done 0)
+ (set! work-to-do (length money-out-alist))
+ (for-each
+ (lambda (account)
+ (set! row-num (+ 1 row-num))
+ (set! work-done (+ 1 work-done))
+ (gnc:report-percent-done (+ 95 (* 5 (/ work-done work-to-do))))
+ (let* ((pair (assoc account money-out-alist))
+ (acct (car pair)))
+ (gnc:html-table-append-row/markup!
+ table
+ (if (odd? row-num) "normal-row" "alternate-row")
+ (list
+ ;(gnc:html-account-anchor acct)
+ (gnc:make-html-text
+ (gnc:html-markup-anchor
+ (gnc:account-anchor-text acct)
+ (if show-full-names?
+ (gnc-account-get-full-name acct)
+ (xaccAccountGetName acct))))
+ (gnc:make-html-table-header-cell/markup
+ "number-cell" (gnc:sum-collector-commodity (cadr pair) report-currency exchange-fn))))))
+ money-out-accounts)
+
+ (gnc:html-table-append-row/markup!
+ table
+ "grand-total"
+ (list
+ (gnc:make-html-table-header-cell/markup "text-cell" (_ "Money Out"))
+ (gnc:make-html-table-header-cell/markup
+ "total-number-cell" (gnc:sum-collector-commodity money-out-collector report-currency exchange-fn))))
+
+ (gnc:html-table-append-ruler! table 2)
+
+ (gnc:html-table-append-row/markup!
+ table
+ "grand-total"
+ (list
+ (gnc:make-html-table-header-cell/markup "text-cell" (_ "Difference"))
+ (gnc:make-html-table-header-cell/markup
+ "total-number-cell" (gnc:sum-collector-commodity money-diff-collector report-currency exchange-fn))))
+
+ (gnc:html-document-add-object! doc table)
+
+
+ ;; add currency information
+ (if show-rates?
+ (gnc:html-document-add-object!
+ doc ;;(gnc:html-markup-p
+ (gnc:html-make-exchangerates
+ report-currency exchange-fn accounts))))))
+
+ ;; error condition: no accounts specified
+
+ (gnc:html-document-add-object!
+ doc
+ (gnc:html-make-no-account-warning
+ reportname (gnc:report-id report-obj))))
(gnc:report-finished)
doc))
@@ -390,134 +378,119 @@
;; function to add inflow and outflow of money
(define (cash-flow-calc-money-in-out settings)
(let* ((accounts (cdr (assq 'accounts settings)))
- (to-date-t64 (cdr (assq 'to-date-t64 settings)))
- (from-date-t64 (cdr (assq 'from-date-t64 settings)))
- (report-currency (cdr (assq 'report-currency settings)))
- (include-trading-accounts (cdr (assq 'include-trading-accounts settings)))
- (to-report-currency (cdr (assq 'to-report-currency settings)))
+ (to-date-t64 (cdr (assq 'to-date-t64 settings)))
+ (from-date-t64 (cdr (assq 'from-date-t64 settings)))
+ (report-currency (cdr (assq 'report-currency settings)))
+ (include-trading-accounts (cdr (assq 'include-trading-accounts settings)))
+ (to-report-currency (cdr (assq 'to-report-currency settings)))
- (is-report-account? (account-in-list-pred accounts))
+ (is-report-account? (account-in-list-pred accounts))
- (money-in-accounts '())
- (money-in-hash (make-hash-table))
- (money-in-collector (gnc:make-commodity-collector))
+ (money-in-accounts '())
+ (money-in-hash (make-hash-table))
+ (money-in-collector (gnc:make-commodity-collector))
- (money-out-accounts '())
- (money-out-hash (make-hash-table))
- (money-out-collector (gnc:make-commodity-collector))
+ (money-out-accounts '())
+ (money-out-hash (make-hash-table))
+ (money-out-collector (gnc:make-commodity-collector))
- (all-splits (gnc:account-get-trans-type-splits-interval accounts '() from-date-t64 to-date-t64))
- (splits-to-do (length all-splits))
- (splits-seen-table (make-hash-table))
- (work-done 0))
+ (all-splits (gnc:account-get-trans-type-splits-interval accounts '() from-date-t64 to-date-t64))
+ (splits-to-do (length all-splits))
+ (splits-seen-table (make-hash-table))
+ (work-done 0))
(define (split-seen? split)
(if (split-hashtable-ref splits-seen-table split) #t
- (begin
- (split-hashtable-set! splits-seen-table split #t)
- #f)))
+ (begin
+ (split-hashtable-set! splits-seen-table split #t)
+ #f)))
(define (work-per-split split)
(set! work-done (+ 1 work-done))
(if (= (modulo work-done 100) 0)
- (gnc:report-percent-done (* 85 (/ work-done splits-to-do))))
+ (gnc:report-percent-done (* 85 (/ work-done splits-to-do))))
(let ((parent (xaccSplitGetParent split)))
- (if (and (<= (xaccTransGetDate parent) to-date-t64)
- (>= (xaccTransGetDate parent) from-date-t64))
- (let* ((parent-description (xaccTransGetDescription parent))
- (parent-currency (xaccTransGetCurrency parent)))
- (gnc:debug parent-description
- " - "
- (gnc-commodity-get-printname parent-currency))
- (for-each
- (lambda (s)
- (let* ((s-account (xaccSplitGetAccount s))
- (s-account-type (xaccAccountGetType s-account))
- (s-amount (xaccSplitGetAmount s))
- (s-value (xaccSplitGetValue s))
- (s-commodity (xaccAccountGetCommodity s-account)))
- ;; Check if this is a dangling split
- ;; and print a warning
- (if (null? s-account)
- (display
- (string-append
- "WARNING: s-account is NULL for split: "
- (gncSplitGetGUID s) "\n")))
- (gnc:debug (xaccAccountGetName s-account))
- (if (and ;; make sure we don't have
- (not (null? s-account)) ;; any dangling splits
- (or include-trading-accounts (not (eq? s-account-type ACCT-TYPE-TRADING)))
- (not (is-report-account? s-account)))
- (if (not (split-seen? s))
- (begin
- (if (gnc-numeric-negative-p s-value)
- (let ((s-account-in-collector (account-hashtable-ref money-in-hash s-account)))
+ (if (and (<= (xaccTransGetDate parent) to-date-t64)
+ (>= (xaccTransGetDate parent) from-date-t64))
+ (let* ((parent-description (xaccTransGetDescription parent))
+ (parent-currency (xaccTransGetCurrency parent)))
+ (gnc:debug parent-description
+ " - "
+ (gnc-commodity-get-printname parent-currency))
+ (for-each
+ (lambda (s)
+ (let* ((s-account (xaccSplitGetAccount s))
+ (s-account-type (xaccAccountGetType s-account))
+ (s-amount (xaccSplitGetAmount s))
+ (s-value (xaccSplitGetValue s))
+ (s-commodity (xaccAccountGetCommodity s-account)))
+ ;; Check if this is a dangling split
+ ;; and print a warning
+ (if (null? s-account)
+ (display
+ (string-append
+ "WARNING: s-account is NULL for split: "
+ (gncSplitGetGUID s) "\n")))
+ (gnc:debug (xaccAccountGetName s-account))
+ (if (and ;; make sure we don't have
+ (not (null? s-account)) ;; any dangling splits
+ (or include-trading-accounts (not (eq? s-account-type ACCT-TYPE-TRADING)))
+ (not (is-report-account? s-account)))
+ (if (not (split-seen? s))
+ (begin
+ (if (gnc-numeric-negative-p s-value)
+ (let ((s-account-in-collector (account-hashtable-ref money-in-hash s-account)))
;(gnc:debug "in:" (gnc-commodity-get-printname s-commodity)
- ; (gnc-numeric-to-double s-amount)
- ; (gnc-commodity-get-printname parent-currency)
- ; (gnc-numeric-to-double s-value))
- (if (not s-account-in-collector)
- (begin
- (set! s-account-in-collector (gnc:make-commodity-collector))
- (account-hashtable-set! money-in-hash s-account
- s-account-in-collector)
- (set! money-in-accounts (cons s-account money-in-accounts))
- )
- )
- (let ((s-report-value (to-report-currency parent-currency
- (gnc-numeric-neg s-value)
- (xaccTransGetDate
- parent))))
- (money-in-collector 'add report-currency s-report-value)
- (s-account-in-collector 'add report-currency s-report-value))
- )
- (let ((s-account-out-collector (account-hashtable-ref money-out-hash s-account)))
- ;(gnc:debug "out:" (gnc-commodity-get-printname s-commodity)
- ; (gnc-numeric-to-double s-amount)
- ; (gnc-commodity-get-printname parent-currency)
- ; (gnc-numeric-to-double s-value))
- (if (not s-account-out-collector)
- (begin
- (set! s-account-out-collector (gnc:make-commodity-collector))
- (account-hashtable-set! money-out-hash s-account
- s-account-out-collector)
- (set! money-out-accounts (cons s-account money-out-accounts))
- )
- )
- (let ((s-report-value (to-report-currency parent-currency
- s-value
- (xaccTransGetDate
- parent))))
- (money-out-collector 'add report-currency s-report-value)
- (s-account-out-collector 'add report-currency s-report-value))
- )
- )
- )
- )
- )
- )
- )
- (xaccTransGetSplitList parent)
- )
- )
- )
- )
- )
-
- (define (calc-money-in-out-internal accounts)
- (for-each work-per-split all-splits))
-
- ;; And calculate
- (calc-money-in-out-internal accounts)
+ ; (gnc-numeric-to-double s-amount)
+ ; (gnc-commodity-get-printname parent-currency)
+ ; (gnc-numeric-to-double s-value))
+ (if (not s-account-in-collector)
+ (begin
+ (set! s-account-in-collector (gnc:make-commodity-collector))
+ (account-hashtable-set! money-in-hash s-account
+ s-account-in-collector)
+ (set! money-in-accounts (cons s-account money-in-accounts))
+ )
+ )
+ (let ((s-report-value (to-report-currency parent-currency
+ (gnc-numeric-neg s-value)
+ (xaccTransGetDate
+ parent))))
+ (money-in-collector 'add report-currency s-report-value)
+ (s-account-in-collector 'add report-currency s-report-value))
+ )
+ (let ((s-account-out-collector (account-hashtable-ref money-out-hash s-account)))
+ ;(gnc:debug "out:" (gnc-commodity-get-printname s-commodity)
+ ; (gnc-numeric-to-double s-amount)
+ ; (gnc-commodity-get-printname parent-currency)
+ ; (gnc-numeric-to-double s-value))
+ (if (not s-account-out-collector)
+ (begin
+ (set! s-account-out-collector (gnc:make-commodity-collector))
+ (account-hashtable-set! money-out-hash s-account
+ s-account-out-collector)
+ (set! money-out-accounts (cons s-account money-out-accounts))
+ )
+ )
+ (let ((s-report-value (to-report-currency parent-currency
+ s-value
+ (xaccTransGetDate
+ parent))))
+ (money-out-collector 'add report-currency s-report-value)
+ (s-account-out-collector 'add report-currency s-report-value)))))))))
+ (xaccTransGetSplitList parent))))))
+
+ (for-each work-per-split all-splits)
+
;; Return an association list of results
(list (cons 'money-in-accounts money-in-accounts)
- (cons 'money-in-alist (hash-map->list (lambda (k v) (list k v)) money-in-hash))
- (cons 'money-in-collector money-in-collector)
- (cons 'money-out-accounts money-out-accounts)
- (cons 'money-out-alist (hash-map->list (lambda (k v) (list k v)) money-out-hash))
- (cons 'money-out-collector money-out-collector))))
+ (cons 'money-in-alist (hash-map->list (lambda (k v) (list k v)) money-in-hash))
+ (cons 'money-in-collector money-in-collector)
+ (cons 'money-out-accounts money-out-accounts)
+ (cons 'money-out-alist (hash-map->list (lambda (k v) (list k v)) money-out-hash))
+ (cons 'money-out-collector money-out-collector))))
-(gnc:define-report
+(gnc:define-report
'version 1
'name reportname
'report-guid "f8748b813fab4220ba26e743aedf38da"
commit d97d4930bae2135e71980e0ee5d23a2ab5a6a449
Author: Christopher Lam <christopher.lck at gmail.com>
Date: Mon Jan 28 17:22:23 2019 +0800
[cash-flow] replace account-in-alist with srfi-1 equivalent
diff --git a/gnucash/report/standard-reports/cash-flow.scm b/gnucash/report/standard-reports/cash-flow.scm
index eb22721aa..60b97d339 100644
--- a/gnucash/report/standard-reports/cash-flow.scm
+++ b/gnucash/report/standard-reports/cash-flow.scm
@@ -281,7 +281,7 @@
(set! row-num (+ 1 row-num))
(set! work-done (+ 1 work-done))
(gnc:report-percent-done (+ 90 (* 5 (/ work-done work-to-do))))
- (let* ((pair (account-in-alist account money-in-alist))
+ (let* ((pair (assoc account money-in-alist))
(acct (car pair)))
(gnc:html-table-append-row/markup!
table
@@ -326,7 +326,7 @@
(set! row-num (+ 1 row-num))
(set! work-done (+ 1 work-done))
(gnc:report-percent-done (+ 95 (* 5 (/ work-done work-to-do))))
- (let* ((pair (account-in-alist account money-out-alist))
+ (let* ((pair (assoc account money-out-alist))
(acct (car pair)))
(gnc:html-table-append-row/markup!
table
commit 1a69bf1b2f07bb0ebe1aac318a0190cc185eb6b4
Author: Christopher Lam <christopher.lck at gmail.com>
Date: Tue Jan 22 18:53:14 2019 +0800
[cashflow-barchart] remove srfi-1 aliases
diff --git a/gnucash/report/standard-reports/cashflow-barchart.scm b/gnucash/report/standard-reports/cashflow-barchart.scm
index 7d9f4483b..14b9d94ec 100644
--- a/gnucash/report/standard-reports/cashflow-barchart.scm
+++ b/gnucash/report/standard-reports/cashflow-barchart.scm
@@ -37,10 +37,6 @@
(gnc:module-load "gnucash/report/report-system" 0)
-;; Define these utilities to avoid using module srfi-1
-(define first car)
-(define second cadr)
-
(define reportname (N_ "Cash Flow Barchart"))
;; define all option's names so that they are properly defined
@@ -255,8 +251,8 @@
(set! work-done (+ 1 work-done))
(gnc:report-percent-done (* 80 (/ work-done work-to-do)))
(let* ((settings (list (cons 'accounts accounts)
- (cons 'to-date-t64 (second date-pair))
- (cons 'from-date-t64 (first date-pair))
+ (cons 'from-date-t64 (car date-pair))
+ (cons 'to-date-t64 (cadr date-pair))
(cons 'report-currency report-currency)
(cons 'include-trading-accounts include-trading-accounts)
(cons 'to-report-currency to-report-currency)))
commit 56bccd1b50707389dff77b99912aeb26f2af5f8f
Author: Christopher Lam <christopher.lck at gmail.com>
Date: Wed Feb 20 19:45:10 2019 +0800
[cashflow-barchart] reuse cash-flow-calc-money-in-out
The (cashflow-barchart-calc-money-in-out) function was copied verbatim
from cash-flow.scm (apart from the returned list being shorter). reuse
function from cash-flow.scm.
Test already exists in test-cashflow-barchart.scm
diff --git a/gnucash/report/standard-reports/cashflow-barchart.scm b/gnucash/report/standard-reports/cashflow-barchart.scm
index f5c873c7b..7d9f4483b 100644
--- a/gnucash/report/standard-reports/cashflow-barchart.scm
+++ b/gnucash/report/standard-reports/cashflow-barchart.scm
@@ -33,6 +33,7 @@
(use-modules (gnucash gnc-module))
(use-modules (gnucash gettext))
(use-modules (gnucash engine))
+(use-modules (gnucash report standard-reports cash-flow))
(gnc:module-load "gnucash/report/report-system" 0)
@@ -259,7 +260,7 @@
(cons 'report-currency report-currency)
(cons 'include-trading-accounts include-trading-accounts)
(cons 'to-report-currency to-report-currency)))
- (result (cashflow-barchart-calc-money-in-out settings))
+ (result (cash-flow-calc-money-in-out settings))
(money-in-collector (cdr (assq 'money-in-collector result)))
(money-out-collector (cdr (assq 'money-out-collector result)))
(money-in (sum-collector money-in-collector))
@@ -379,126 +380,6 @@
doc))
-;; function to add inflow and outflow of money
-(define (cashflow-barchart-calc-money-in-out settings)
- (let* ((accounts (cdr (assq 'accounts settings)))
- (to-date-t64 (cdr (assq 'to-date-t64 settings)))
- (from-date-t64 (cdr (assq 'from-date-t64 settings)))
- (report-currency (cdr (assq 'report-currency settings)))
- (include-trading-accounts (cdr (assq 'include-trading-accounts settings)))
- (to-report-currency (cdr (assq 'to-report-currency settings)))
-
- (is-report-account? (account-in-list-pred accounts))
-
- (money-in-accounts '())
- (money-in-hash (make-hash-table))
- (money-in-collector (gnc:make-commodity-collector))
-
- (money-out-accounts '())
- (money-out-hash (make-hash-table))
- (money-out-collector (gnc:make-commodity-collector))
-
- (all-splits (gnc:account-get-trans-type-splits-interval accounts '() from-date-t64 to-date-t64))
- (splits-seen-table (make-hash-table)))
-
- (define (split-seen? split)
- (if (split-hashtable-ref splits-seen-table split) #t
- (begin
- (split-hashtable-set! splits-seen-table split #t)
- #f)))
-
- (define (work-per-split split)
- (let ((parent (xaccSplitGetParent split)))
- (if (and (<= (xaccTransGetDate parent) to-date-t64)
- (>= (xaccTransGetDate parent) from-date-t64))
- (let* ((parent-description (xaccTransGetDescription parent))
- (parent-currency (xaccTransGetCurrency parent)))
- ;(gnc:debug parent-description
- ; " - "
- ; (gnc-commodity-get-printname parent-currency))
- (for-each
- (lambda (s)
- (let* ((s-account (xaccSplitGetAccount s))
- (s-account-type (xaccAccountGetType s-account))
- (s-amount (xaccSplitGetAmount s))
- (s-value (xaccSplitGetValue s))
- (s-commodity (xaccAccountGetCommodity s-account)))
- ;; Check if this is a dangling split
- ;; and print a warning
- (if (null? s-account)
- (display
- (string-append
- "WARNING: s-account is NULL for split: "
- (gncSplitGetGUID s) "\n")))
- ;(gnc:debug (xaccAccountGetName s-account))
- (if (and ;; make sure we don't have
- (not (null? s-account)) ;; any dangling splits
- (or include-trading-accounts (not (eq? s-account-type ACCT-TYPE-TRADING)))
- (not (is-report-account? s-account)))
- (if (not (split-seen? s))
- (begin
- (if (gnc-numeric-negative-p s-value)
- (let ((s-account-in-collector (account-hashtable-ref money-in-hash s-account)))
- ;(gnc:debug "in:" (gnc-commodity-get-printname s-commodity)
- ; (gnc-numeric-to-double s-amount)
- ; (gnc-commodity-get-printname parent-currency)
- ; (gnc-numeric-to-double s-value))
- (if (not s-account-in-collector)
- (begin
- (set! s-account-in-collector (gnc:make-commodity-collector))
- (account-hashtable-set! money-in-hash s-account
- s-account-in-collector)
- (set! money-in-accounts (cons s-account money-in-accounts))
- )
- )
- (let ((s-report-value (to-report-currency parent-currency
- (gnc-numeric-neg s-value)
- (xaccTransGetDate
- parent))))
- (money-in-collector 'add report-currency s-report-value)
- (s-account-in-collector 'add report-currency s-report-value))
- )
- (let ((s-account-out-collector (account-hashtable-ref money-out-hash s-account)))
- ;(gnc:debug "out:" (gnc-commodity-get-printname s-commodity)
- ; (gnc-numeric-to-double s-amount)
- ; (gnc-commodity-get-printname parent-currency)
- ; (gnc-numeric-to-double s-value))
- (if (not s-account-out-collector)
- (begin
- (set! s-account-out-collector (gnc:make-commodity-collector))
- (account-hashtable-set! money-out-hash s-account
- s-account-out-collector)
- (set! money-out-accounts (cons s-account money-out-accounts))
- )
- )
- (let ((s-report-value (to-report-currency parent-currency
- s-value
- (xaccTransGetDate
- parent))))
- (money-out-collector 'add report-currency s-report-value)
- (s-account-out-collector 'add report-currency s-report-value))
- )
- )
- )
- )
- )
- )
- )
- (xaccTransGetSplitList parent)
- )
- )
- )
- )
- )
-
- ;; Calculate money in and out for each split
- (for-each work-per-split all-splits)
-
- ;; Return an association list of results
- (list
- (cons 'money-in-collector money-in-collector)
- (cons 'money-out-collector money-out-collector))))
-
;; export to make uuid available to unit test: test-cashflow-barchart
(export cashflow-barchart-uuid)
(define cashflow-barchart-uuid "5426e4d987f6444387fe70880e5b28a0")
Summary of changes:
gnucash/report/standard-reports/budget.scm | 2 +-
gnucash/report/standard-reports/cash-flow.scm | 654 +++++++++------------
.../report/standard-reports/cashflow-barchart.scm | 131 +----
3 files changed, 299 insertions(+), 488 deletions(-)
More information about the gnucash-changes
mailing list