gnucash unstable: Multiple changes pushed

John Ralls jralls at code.gnucash.org
Tue Oct 31 13:24:00 EDT 2017


Updated	 via  https://github.com/Gnucash/gnucash/commit/039dda52 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/41ad8915 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/5ca2834b (commit)
	 via  https://github.com/Gnucash/gnucash/commit/44df91ad (commit)
	 via  https://github.com/Gnucash/gnucash/commit/9cb8a3c8 (commit)
	from  https://github.com/Gnucash/gnucash/commit/49c70795 (commit)



commit 039dda5294e3b103e449247114a733dbf6e47bc8
Merge: 49c7079 41ad891
Author: John Ralls <jralls at ceridwen.us>
Date:   Tue Oct 31 10:20:50 2017 -0700

    Merge J. Marino's cashflow-barchart updates into unstable.


commit 41ad89154ff856b8d53ef6a7e135ba927594e199
Author: Jose Marino <jmarino at users.noreply.github.com>
Date:   Tue Oct 31 09:59:18 2017 -0600

    report-test: move add-to-load-path to build system
    
    The unit test for cashflow-barchart.scm needs module stylesheets
    to work, to render gnc-monetary objects correctly.
    It makes sense to add the extra load-path needed by the module
    in the build system instead of with code in the test file.
    
    This is only needed when building with autotools. It seems cmake
    builds don't need this.

diff --git a/gnucash/report/standard-reports/test/Makefile.am b/gnucash/report/standard-reports/test/Makefile.am
index 2a4e808..78ebd09 100644
--- a/gnucash/report/standard-reports/test/Makefile.am
+++ b/gnucash/report/standard-reports/test/Makefile.am
@@ -30,6 +30,7 @@ GNC_TEST_DEPS = \
   --guile-load-dir ${top_builddir}/gnucash/report/report-system/test \
   --guile-load-dir ${top_builddir}/gnucash/report/standard-reports \
   --guile-load-dir ${top_builddir}/gnucash/report/standard-reports/test \
+  --guile-load-dir ${top_builddir}/gnucash/report/stylesheets \
 \
   --library-dir    ${top_builddir}/gnucash/report/report-system \
   --library-dir    ${top_builddir}/libgnucash/core-utils \
diff --git a/gnucash/report/standard-reports/test/test-cashflow-barchart.scm b/gnucash/report/standard-reports/test/test-cashflow-barchart.scm
index e4f7dde..481df91 100644
--- a/gnucash/report/standard-reports/test/test-cashflow-barchart.scm
+++ b/gnucash/report/standard-reports/test/test-cashflow-barchart.scm
@@ -29,8 +29,6 @@
 (use-modules (gnucash report report-system))
 (use-modules (gnucash report report-system test test-extras))
 (use-modules (gnucash report standard-reports cashflow-barchart))
-
-(add-to-load-path "../../stylesheets/")
 (use-modules (gnucash report stylesheets))
 
 (use-modules (ice-9 format))

commit 5ca2834bd0587e57b32eac77cd8089ca77072b23
Author: Jose Marino <jmarino at users.noreply.github.com>
Date:   Fri Oct 27 14:53:08 2017 -0600

    cashflow-barchart: split option "show money in/out" into two separate ones
    
    The report had two display options: one to control the display of
    money in/out and another one to control the display of net flow.
    In this commit we split the first option into two separate ones to
    allow toggling the display of money in, out and net independently.

diff --git a/gnucash/report/standard-reports/cashflow-barchart.scm b/gnucash/report/standard-reports/cashflow-barchart.scm
index 3d13d24..6c1d0fa 100644
--- a/gnucash/report/standard-reports/cashflow-barchart.scm
+++ b/gnucash/report/standard-reports/cashflow-barchart.scm
@@ -49,7 +49,8 @@
 (define optname-accounts (N_ "Accounts"))
 (define optname-include-trading-accounts (N_ "Include Trading Accounts in report"))
 ;; Display
-(define optname-show-inout (N_ "Show Money In/Out"))
+(define optname-show-in (N_ "Show Money In"))
+(define optname-show-out (N_ "Show Money Out"))
 (define optname-show-net (N_ "Show Net Flow"))
 (define optname-show-table (N_ "Show Table"))
 (define optname-plot-width (N_ "Plot Width"))
@@ -106,25 +107,31 @@
     (gnc:register-option
      options
      (gnc:make-simple-boolean-option
-      gnc:pagename-display optname-show-inout
-      "a" (N_ "Show money in/out?") #t))
+      gnc:pagename-display optname-show-in
+      "a" (N_ "Show money in?") #t))
+
+    (gnc:register-option
+     options
+     (gnc:make-simple-boolean-option
+      gnc:pagename-display optname-show-out
+      "b" (N_ "Show money out?") #t))
 
     (gnc:register-option
      options
      (gnc:make-simple-boolean-option
       gnc:pagename-display optname-show-net
-      "b" (N_ "Show net money flow?") #t))
+      "c" (N_ "Show net money flow?") #t))
 
     (gnc:register-option
      options
      (gnc:make-simple-boolean-option
       gnc:pagename-display optname-show-table
-      "c" (N_ "Display a table of the selected data.") #f))
+      "d" (N_ "Display a table of the selected data.") #f))
 
     ;; Plot size options
     (gnc:options-add-plot-size!
      options gnc:pagename-display
-     optname-plot-width optname-plot-height "d" (cons 'percent 100.0) (cons 'percent 100.0))
+     optname-plot-width optname-plot-height "e" (cons 'percent 100.0) (cons 'percent 100.0))
 
     ;; Set the general page as default option tab
     (gnc:options-set-default-section options gnc:pagename-general)
@@ -170,7 +177,8 @@
                        price-source report-currency to-date-tp))
 
          (interval (get-option gnc:pagename-general optname-stepsize))
-         (show-inout? (get-option gnc:pagename-display optname-show-inout))
+         (show-in? (get-option gnc:pagename-display optname-show-in))
+         (show-out? (get-option gnc:pagename-display optname-show-out))
          (show-net? (get-option gnc:pagename-display optname-show-net))
          (show-table? (get-option gnc:pagename-display optname-show-table))
          (height (get-option gnc:pagename-display optname-plot-height))
@@ -281,11 +289,16 @@
            dates-list)
 
           ;; flip result lists (they were built by appending to the front)
-          (set! in-list (reverse in-list))
-          (set! out-list (reverse out-list))
-
-          (set! total-in (apply monetary+ in-list))
-          (set! total-out (apply monetary+ out-list))
+          (if show-in?
+              (begin
+                (set! in-list (reverse in-list))
+                (set! total-in (apply monetary+ in-list))
+                ))
+          (if show-out?
+              (begin
+                (set! out-list (reverse out-list))
+                (set! total-out (apply monetary+ out-list))
+		))
 
           (if show-net?
               (begin
@@ -306,27 +319,26 @@
           (gnc:html-barchart-set-y-axis-label!
            chart (gnc-commodity-get-mnemonic report-currency))
 
-          (if show-inout?
-              (begin
-                (add-column! (map monetary->double in-list))
-                (add-column! (map monetary->double out-list))
-                ))
+          (if show-in?
+              (add-column! (map monetary->double in-list)))
+          (if show-out?
+              (add-column! (map monetary->double out-list)))
           (if show-net?
               (add-column! (map monetary->double net-list)))
 
           ;; Legend labels, colors
           (gnc:html-barchart-set-col-labels!
            chart (append
-                  (if show-inout?
-                      (list (_ "Money In") (_ "Money Out")) '())
-                  (if show-net?
-                      (list (_ "Net Flow")) '())))
+                  (if show-in? (list (_ "Money In")) '())
+                  (if show-out? (list (_ "Money Out")) '())
+                  (if show-net? (list (_ "Net Flow")) '())
+                  ))
           (gnc:html-barchart-set-col-colors!
            chart (append
-                  (if show-inout?
-                      '("blue" "red") '())
-                  (if show-net?
-                      '("green") '())))
+                  (if show-in? '("blue") '())
+                  (if show-out? '("red") '())
+                  (if show-net? '("green") '())
+                  ))
           (gnc:report-percent-done 95)
 
           ;; If we have no data in the plot, display warning message
@@ -342,21 +354,19 @@
               (let* ((table (gnc:make-html-table)))
                 (gnc:html-table-set-col-headers!
                  table (append (list (_ "Date"))
-                               (if show-inout?
-                                   (list (_ "Money In") (_ "Money Out")) '())
-                               (if show-net?
-                                   (list (_ "Net Flow")) '())
+                               (if show-in? (list (_ "Money In")) '())
+                               (if show-out? (list (_ "Money Out")) '())
+                               (if show-net? (list (_ "Net Flow")) '())
                                ))
 
                 (gnc:html-document-add-object!
                  doc (gnc:make-html-text (gnc:html-markup-h3 (_ "Overview:"))))
                 (gnc:html-table-append-column! table (append date-string-list (list "Total")))
 
-                (if show-inout?
-                    (begin
-                      (gnc:html-table-append-column! table (append in-list (list total-in)))
-                      (gnc:html-table-append-column! table (append out-list (list total-out)))
-                      ))
+                (if show-in?
+                    (gnc:html-table-append-column! table (append in-list (list total-in))))
+                (if show-out?
+                    (gnc:html-table-append-column! table (append out-list (list total-out))))
                 (if show-net?
                     (gnc:html-table-append-column! table (append net-list (list total-net))))
 

commit 44df91adcaaa718b97b71cd4d16c13a4c24acc5d
Author: Jose Marino <jmarino at users.noreply.github.com>
Date:   Fri Oct 27 15:21:57 2017 -0600

    cashflow-barchart: delete unnecessary intermediate lists
    
    These intermediate lists *-value-list hold the double values needed
    by the barchart. We can easily create these lists on the fly,
    there's no need to store them in a separate variable.
    
    The same is done to include total values in the table, we can easily
    append the total value on the fly.

diff --git a/gnucash/report/standard-reports/cashflow-barchart.scm b/gnucash/report/standard-reports/cashflow-barchart.scm
index 439f257..3d13d24 100644
--- a/gnucash/report/standard-reports/cashflow-barchart.scm
+++ b/gnucash/report/standard-reports/cashflow-barchart.scm
@@ -220,9 +220,6 @@
                (total-in #f)
                (total-out #f)
                (total-net #f)
-               (in-value-list #f)
-               (out-value-list #f)
-               (net-value-list #f)
                )
 
           ;; Helper function to convert currencies
@@ -289,15 +286,12 @@
 
           (set! total-in (apply monetary+ in-list))
           (set! total-out (apply monetary+ out-list))
-          (set! in-value-list (map monetary->double in-list))
-          (set! out-value-list (map monetary->double out-list))
 
           (if show-net?
               (begin
                 (set! net-list (reverse net-list))
                 (set! total-net (apply monetary+ net-list))
-                (set! net-value-list (map monetary->double net-list)))
-              )
+                ))
           (gnc:report-percent-done 90)
 
           (gnc:html-barchart-set-title! chart report-title)
@@ -314,11 +308,11 @@
 
           (if show-inout?
               (begin
-                (add-column! in-value-list)
-                (add-column! out-value-list)
+                (add-column! (map monetary->double in-list))
+                (add-column! (map monetary->double out-list))
                 ))
           (if show-net?
-              (add-column! net-value-list))
+              (add-column! (map monetary->double net-list)))
 
           ;; Legend labels, colors
           (gnc:html-barchart-set-col-labels!
@@ -346,12 +340,6 @@
 
           (if (and non-zeros show-table?)
               (let* ((table (gnc:make-html-table)))
-                (set! date-string-list (append date-string-list (list "Total")))
-                (set! in-list (append in-list (list total-in)))
-                (set! out-list (append out-list (list total-out)))
-                (if show-net?
-                    (set! net-list (append net-list (list total-net))))
-
                 (gnc:html-table-set-col-headers!
                  table (append (list (_ "Date"))
                                (if show-inout?
@@ -362,15 +350,15 @@
 
                 (gnc:html-document-add-object!
                  doc (gnc:make-html-text (gnc:html-markup-h3 (_ "Overview:"))))
-                (gnc:html-table-append-column! table date-string-list)
+                (gnc:html-table-append-column! table (append date-string-list (list "Total")))
 
                 (if show-inout?
                     (begin
-                      (gnc:html-table-append-column! table in-list)
-                      (gnc:html-table-append-column! table out-list)
+                      (gnc:html-table-append-column! table (append in-list (list total-in)))
+                      (gnc:html-table-append-column! table (append out-list (list total-out)))
                       ))
                 (if show-net?
-                    (gnc:html-table-append-column! table net-list))
+                    (gnc:html-table-append-column! table (append net-list (list total-net))))
 
                 ;; set numeric columns to align right
                 (for-each

commit 9cb8a3c87abc80be4db2b12ef60faac6405d6071
Author: Jose Marino <jmarino at users.noreply.github.com>
Date:   Fri Oct 27 14:20:11 2017 -0600

    cashflow-barchart: use direct gnc-monetary math instead of collectors
    
    Operate between gnc-monetary objects instead of using collectors. The
    resulting code is simpler and easier to read.

diff --git a/gnucash/report/standard-reports/cashflow-barchart.scm b/gnucash/report/standard-reports/cashflow-barchart.scm
index 0589a34..439f257 100644
--- a/gnucash/report/standard-reports/cashflow-barchart.scm
+++ b/gnucash/report/standard-reports/cashflow-barchart.scm
@@ -217,12 +217,12 @@
                (in-list '())
                (out-list '())
                (net-list '())
+               (total-in #f)
+               (total-out #f)
+               (total-net #f)
                (in-value-list #f)
                (out-value-list #f)
                (net-value-list #f)
-               (in-total-collector (gnc:make-commodity-collector))
-               (out-total-collector (gnc:make-commodity-collector))
-               (net-total-collector (gnc:make-commodity-collector))
                )
 
           ;; Helper function to convert currencies
@@ -236,6 +236,22 @@
             (gnc:sum-collector-commodity
              collector report-currency exchange-fn)
             )
+
+          ;; Add two or more gnc-monetary objects
+          (define (monetary+ a . blist)
+            (if (null? blist)
+                a
+                (let ((b (apply monetary+ blist)))
+                  (if (and (gnc:gnc-monetary? a) (gnc:gnc-monetary? b))
+                      (let ((same-currency? (gnc-commodity-equal (gnc:gnc-monetary-commodity a) (gnc:gnc-monetary-commodity b)))
+                            (amount (gnc-numeric-add (gnc:gnc-monetary-amount a) (gnc:gnc-monetary-amount b) GNC-DENOM-AUTO GNC-RND-ROUND)))
+                        (if same-currency?
+                            (gnc:make-gnc-monetary (gnc:gnc-monetary-commodity a) amount)
+                            (warn "incompatible currencies in monetary+: " a b)))
+                      (warn "wrong arguments for monetary+: " a b)))
+                )
+            )
+
           ;; Convert gnc:monetary to number (used to generate data for the chart)
           (define (monetary->double monetary)
             (gnc-numeric-to-double (gnc:gnc-monetary-amount monetary))
@@ -257,35 +273,29 @@
                     (result (cashflow-barchart-calc-money-in-out settings))
                     (money-in-collector (cdr (assq 'money-in-collector result)))
                     (money-out-collector (cdr (assq 'money-out-collector result)))
-                    (money-net-collector (gnc:make-commodity-collector))
-                    (money-in-monetary (sum-collector money-in-collector))
-                    (money-out-monetary (sum-collector money-out-collector))
-                    (money-net-monetary #f)
+                    (money-in (sum-collector money-in-collector))
+                    (money-out (sum-collector money-out-collector))
+                    (money-net (monetary+ money-in (gnc:monetary-neg money-out)))
                     )
-               (money-net-collector 'merge money-in-collector #f)
-               (money-net-collector 'minusmerge money-out-collector #f)
-               (set! money-net-monetary (sum-collector money-net-collector))
-               (set! in-list (cons money-in-monetary in-list))
-               (set! out-list (cons money-out-monetary out-list))
-               (set! net-list (cons money-net-monetary net-list))
-               (in-total-collector 'merge money-in-collector #f)
-               (out-total-collector 'merge money-out-collector #f)
+               (set! in-list (cons money-in in-list))
+               (set! out-list (cons money-out out-list))
+               (set! net-list (cons money-net net-list))
                ))
            dates-list)
 
-          (net-total-collector 'merge in-total-collector #f)
-          (net-total-collector 'minusmerge out-total-collector #f)
-
           ;; flip result lists (they were built by appending to the front)
           (set! in-list (reverse in-list))
           (set! out-list (reverse out-list))
 
+          (set! total-in (apply monetary+ in-list))
+          (set! total-out (apply monetary+ out-list))
           (set! in-value-list (map monetary->double in-list))
           (set! out-value-list (map monetary->double out-list))
 
           (if show-net?
               (begin
                 (set! net-list (reverse net-list))
+                (set! total-net (apply monetary+ net-list))
                 (set! net-value-list (map monetary->double net-list)))
               )
           (gnc:report-percent-done 90)
@@ -337,10 +347,10 @@
           (if (and non-zeros show-table?)
               (let* ((table (gnc:make-html-table)))
                 (set! date-string-list (append date-string-list (list "Total")))
-                (set! in-list (append in-list (list (sum-collector in-total-collector))))
-                (set! out-list (append out-list (list (sum-collector out-total-collector))))
+                (set! in-list (append in-list (list total-in)))
+                (set! out-list (append out-list (list total-out)))
                 (if show-net?
-                    (set! net-list (append net-list (list (sum-collector net-total-collector)))))
+                    (set! net-list (append net-list (list total-net))))
 
                 (gnc:html-table-set-col-headers!
                  table (append (list (_ "Date"))



Summary of changes:
 .../report/standard-reports/cashflow-barchart.scm  | 140 +++++++++++----------
 gnucash/report/standard-reports/test/Makefile.am   |   1 +
 .../test/test-cashflow-barchart.scm                |   2 -
 3 files changed, 75 insertions(+), 68 deletions(-)



More information about the gnucash-changes mailing list