gnucash master: Multiple changes pushed
John Ralls
jralls at code.gnucash.org
Mon Jun 8 16:14:39 EDT 2020
Updated via https://github.com/Gnucash/gnucash/commit/15938d07 (commit)
via https://github.com/Gnucash/gnucash/commit/b84ad7ab (commit)
via https://github.com/Gnucash/gnucash/commit/8ec0b876 (commit)
from https://github.com/Gnucash/gnucash/commit/cb69b806 (commit)
commit 15938d0790afa70ecbe48cdf24799d7ebaaf9f7c
Author: John Ralls <jralls at ceridwen.us>
Date: Mon Jun 8 13:14:20 2020 -0700
Improve comments explaining exposed generators.
diff --git a/gnucash/report/reports/CMakeLists.txt b/gnucash/report/reports/CMakeLists.txt
index ad0a66fac..dd69a8e3d 100644
--- a/gnucash/report/reports/CMakeLists.txt
+++ b/gnucash/report/reports/CMakeLists.txt
@@ -2,17 +2,14 @@
add_subdirectory(standard/test)
add_subdirectory(support)
+#These provide some functions used by more than one report.
set (reports_common_SCHEME
aging.scm
cash-flow-calc.scm
)
# The 'with exposed generator' reports are standard reports that can
-# be created with a special generator function
-# This function is exposed via reports.scm.
-# As such these reports should be built before reports.scm
-# However all other reports need to be built after reports.scm
-# as they in turn may consume these generators.
+# be created with a special generator function, exported by reports.scm
set (reports_standard_with_exposed_generator_SCHEME
standard/new-aging.scm
standard/register.scm
@@ -58,6 +55,8 @@ set (reports_standard_SCHEME
standard/balsheet-eg.scm
)
+# Reports depending on one of the generator functions from
+# scm-reports-standard-with-exposed-generator:
set (reports_standard_SCHEME_2
standard/customer-summary.scm # Depends on gnc:owner-report-create
)
commit b84ad7ab7e2a705fabc9fbe5711cfa7d14ec6db2
Author: John Ralls <jralls at ceridwen.us>
Date: Mon Jun 8 13:12:10 2020 -0700
Extract cash-flow-calc-money-in-out to its own module.
It's used by two reports so this simplifies the dependency graph.
diff --git a/gnucash/report/reports/CMakeLists.txt b/gnucash/report/reports/CMakeLists.txt
index 9aac9e62f..ad0a66fac 100644
--- a/gnucash/report/reports/CMakeLists.txt
+++ b/gnucash/report/reports/CMakeLists.txt
@@ -4,6 +4,7 @@ add_subdirectory(support)
set (reports_common_SCHEME
aging.scm
+ cash-flow-calc.scm
)
# The 'with exposed generator' reports are standard reports that can
@@ -34,6 +35,7 @@ set (reports_standard_SCHEME
standard/budget-income-statement.scm
standard/budget.scm
standard/cash-flow.scm
+ standard/cashflow-barchart.scm
standard/category-barchart.scm
standard/dashboard.scm
standard/equity-statement.scm
@@ -57,8 +59,7 @@ set (reports_standard_SCHEME
)
set (reports_standard_SCHEME_2
- standard/cashflow-barchart.scm #depends on cash-flow report
- standard/customer-summary.scm # Depends on owner-report
+ standard/customer-summary.scm # Depends on gnc:owner-report-create
)
set(reports_example_SCHEME
diff --git a/gnucash/report/reports/cash-flow-calc.scm b/gnucash/report/reports/cash-flow-calc.scm
new file mode 100644
index 000000000..472c484f0
--- /dev/null
+++ b/gnucash/report/reports/cash-flow-calc.scm
@@ -0,0 +1,107 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; cash-flow-calc.scm: Cash Flow in-out calculation.
+;;
+;; copyright 2015 Peter Broadberry
+;; copyright 2019 Christopher Lam
+;;
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 2 of
+;; the License, or (at your option) any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program; if not, contact:
+;;
+;; Free Software Foundation Voice: +1-617-542-5942
+;; 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652
+;; Boston, MA 02110-1301, USA gnu at gnu.org
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(define-module (gnucash reports cash-flow-calc))
+(use-modules (gnucash engine))
+(use-modules (gnucash utilities))
+(use-modules (gnucash core-utils))
+(use-modules (gnucash app-utils))
+(use-modules (gnucash report))
+
+;; function to add inflow and outflow of money
+(define-public (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)))
+ (money-in '())
+ (money-in-collector (gnc:make-commodity-collector))
+ (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))
+ (splits-to-do (length 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 (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))))
+
diff --git a/gnucash/report/reports/standard/cash-flow.scm b/gnucash/report/reports/standard/cash-flow.scm
index b9a86b71d..98992f9e7 100644
--- a/gnucash/report/reports/standard/cash-flow.scm
+++ b/gnucash/report/reports/standard/cash-flow.scm
@@ -33,8 +33,7 @@
(use-modules (gnucash core-utils))
(use-modules (gnucash app-utils))
(use-modules (gnucash report))
-
-(export cash-flow-calc-money-in-out)
+(use-modules (gnucash reports cash-flow-calc))
(define reportname (N_ "Cash Flow"))
@@ -336,82 +335,6 @@
doc))
-;; 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)))
- (money-in '())
- (money-in-collector (gnc:make-commodity-collector))
- (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))
- (splits-to-do (length 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 (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
'name reportname
diff --git a/gnucash/report/reports/standard/cashflow-barchart.scm b/gnucash/report/reports/standard/cashflow-barchart.scm
index 4034af9c8..b3415783d 100644
--- a/gnucash/report/reports/standard/cashflow-barchart.scm
+++ b/gnucash/report/reports/standard/cashflow-barchart.scm
@@ -33,7 +33,7 @@
(use-modules (gnucash utilities))
(use-modules (gnucash core-utils))
(use-modules (gnucash app-utils))
-(use-modules (gnucash reports standard cash-flow))
+(use-modules (gnucash reports cash-flow-calc))
(use-modules (gnucash report))
(define reportname (N_ "Cash Flow Barchart"))
diff --git a/po/POTFILES.in b/po/POTFILES.in
index cbcd104de..9dfab16e4 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -455,6 +455,7 @@ gnucash/report/options-utilities.scm
gnucash/report/report-core.scm
gnucash/report/report-register-hooks.scm
gnucash/report/reports/aging.scm
+gnucash/report/reports/cash-flow-calc.scm
gnucash/report/reports/example/average-balance.scm
gnucash/report/reports/example/daily-reports.scm
gnucash/report/reports/example/hello-world.scm
commit 8ec0b876004cbd2bdb9890243853fa6f76ed296e
Author: John Ralls <jralls at ceridwen.us>
Date: Mon Jun 8 12:38:09 2020 -0700
Fix report dependencies that caused Xcode build failure.
diff --git a/gnucash/report/reports/CMakeLists.txt b/gnucash/report/reports/CMakeLists.txt
index c495f0cef..9aac9e62f 100644
--- a/gnucash/report/reports/CMakeLists.txt
+++ b/gnucash/report/reports/CMakeLists.txt
@@ -13,8 +13,10 @@ set (reports_common_SCHEME
# However all other reports need to be built after reports.scm
# as they in turn may consume these generators.
set (reports_standard_with_exposed_generator_SCHEME
+ standard/new-aging.scm
standard/register.scm
standard/owner-report.scm
+ standard/new-owner-report.scm
standard/payables.scm
standard/receivables.scm
)
@@ -41,7 +43,6 @@ set (reports_standard_SCHEME
standard/income-statement.scm
standard/lot-viewer.scm
standard/net-charts.scm
- standard/new-owner-report.scm
standard/portfolio.scm
standard/price-scatter.scm
standard/reconcile-report.scm
@@ -58,7 +59,6 @@ set (reports_standard_SCHEME
set (reports_standard_SCHEME_2
standard/cashflow-barchart.scm #depends on cash-flow report
standard/customer-summary.scm # Depends on owner-report
- standard/new-aging.scm # ditto
)
set(reports_example_SCHEME
Summary of changes:
gnucash/report/reports/CMakeLists.txt | 18 ++--
gnucash/report/reports/cash-flow-calc.scm | 107 +++++++++++++++++++++
gnucash/report/reports/standard/cash-flow.scm | 79 +--------------
.../report/reports/standard/cashflow-barchart.scm | 2 +-
po/POTFILES.in | 1 +
5 files changed, 119 insertions(+), 88 deletions(-)
create mode 100644 gnucash/report/reports/cash-flow-calc.scm
More information about the gnucash-changes
mailing list