gnucash maint: Multiple changes pushed

Christopher Lam clam at code.gnucash.org
Sat Mar 16 07:28:29 EDT 2019


Updated	 via  https://github.com/Gnucash/gnucash/commit/dd64cec2 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/e9b91f16 (commit)
	from  https://github.com/Gnucash/gnucash/commit/12a46e62 (commit)



commit dd64cec273904faada3f8f566dc43a2eebaf1b32
Author: Christopher Lam <christopher.lck at gmail.com>
Date:   Sat Mar 16 16:50:46 2019 +0800

    [average-balance] set chart-title instead of document-title
    
    previous setting would set document-title which adds an <h1> element
    and prevents the chart from fitting into the canvas viewport set 100%
    width x height.

diff --git a/gnucash/report/standard-reports/average-balance.scm b/gnucash/report/standard-reports/average-balance.scm
index 9a633a72b..90c708347 100644
--- a/gnucash/report/standard-reports/average-balance.scm
+++ b/gnucash/report/standard-reports/average-balance.scm
@@ -362,7 +362,6 @@
        (gnc:gnc-monetary-amount
         (exchange-fn foreign-monetary report-currency date))))
 
-    (gnc:html-document-set-title! document report-title)
     ;;(warn commodity-list)
 
     (if (not (null? accounts))
@@ -530,6 +529,7 @@
                 
                 (if (not all-zeros?)
                     (begin
+                      (gnc:html-barchart-set-title! barchart report-title)
                       (gnc:html-barchart-set-col-labels! 
                        barchart col-labels)
                       (gnc:html-barchart-set-col-colors!

commit e9b91f16ebc086bf25fb9b55bfaab9e80895db7c
Author: Christopher Lam <christopher.lck at gmail.com>
Date:   Sat Mar 16 17:24:49 2019 +0800

    [daily-reports] simplify amount/weekday algorithm
    
    This commit removes the need for analyze-splits, and counts all
    split-amounts directly into the daily-totals list.
    
    Because we're not using analyze-splits, there's no need for startbal
    anymore.

diff --git a/gnucash/report/standard-reports/daily-reports.scm b/gnucash/report/standard-reports/daily-reports.scm
index 8b0309ae8..ec4a24bae 100644
--- a/gnucash/report/standard-reports/daily-reports.scm
+++ b/gnucash/report/standard-reports/daily-reports.scm
@@ -4,8 +4,7 @@
 ;; Copyright (C) 2003, Andy Wingo <wingo at pobox dot com>
 ;;
 ;; based on account-piecharts.scm by Robert Merkel (rgmerk at mira.net)
-;; and Christian Stimming <stimming at tu-harburg.de> with
-;; analyze-splits from average-balance.scm
+;; and Christian Stimming <stimming at tu-harburg.de>
 ;;
 ;; This program is free software; you can redistribute it and/or    
 ;; modify it under the terms of the GNU General Public License as   
@@ -126,138 +125,6 @@
     options))
 
 
-; from average-balance.scm
-
-;; analyze-splits crunches a split list into a set of period
-;; summaries.  Each summary is a list of (start-date end-date
-;; avg-bal max-bal min-bal total-in total-out net) if multiple
-;; accounts are selected the balance is the sum for all.  Each
-;; balance in a foreign currency will be converted to a double in
-;; the report-currency by means of the monetary->double
-;; function. 
-(define (analyze-splits splits start-bal-double 
-                        start-date end-date interval monetary->double)
-  (let ((interval-list 
-         (gnc:make-date-interval-list start-date end-date interval))
-        (data-rows '()))
-    
-    (define (output-row interval-start 
-                        interval-end 
-                        stats-accum 
-                        minmax-accum
-                        gain-loss-accum)
-      (set! data-rows
-            (cons 
-             (list interval-start
-                   interval-end
-                   (/ (stats-accum 'total #f)
-                      (- interval-end 
-                         interval-start))
-                   (minmax-accum 'getmax #f)
-                   (minmax-accum 'getmin #f)
-                   (gain-loss-accum 'debits #f) 
-                   (gain-loss-accum 'credits #f)
-                   (- (gain-loss-accum 'debits #f)
-                      (gain-loss-accum 'credits #f)))
-             data-rows)))
-    
-    ;; Returns a double which is the split value, correctly
-    ;; exchanged to the current report-currency. We use the exchange
-    ;; rate at the 'date'.
-    (define (get-split-value split date)
-      (monetary->double
-       (gnc:make-gnc-monetary
-        (xaccAccountGetCommodity (xaccSplitGetAccount split))
-        (xaccSplitGetAmount split))
-       date))
-    
-    ;; calculate the statistics for one interval - returns a list 
-    ;;  containing the following: 
-    ;; min-max acculumator
-    ;; average-accumulator
-    ;; gain-loss accumulator
-    ;; final balance for this interval
-    ;; splits remaining to be processed.
-    
-    ;; note that it is assumed that every split in in the list
-    ;; has a date >= from 
-
-    (define (process-interval splits from to start-balance)
-
-      (let ((minmax-accum (gnc:make-stats-collector))
-            (stats-accum (gnc:make-stats-collector))
-            (gain-loss-accum (gnc:make-drcr-collector))
-            (last-balance start-balance)
-            (last-balance-time from))
-        
-        
-        (define (update-stats  split-amt split-time)
-          (let ((time-difference (- split-time
-                                    last-balance-time)))
-            (stats-accum 'add (* last-balance time-difference))
-            (set! last-balance (+ last-balance split-amt))
-            (set! last-balance-time split-time)
-            (minmax-accum 'add last-balance)
-            (gain-loss-accum 'add split-amt)))
-
-        (define (split-recurse)
-          (if (or (null? splits)
-                  (> (xaccTransGetDate (xaccSplitGetParent (car splits)))
-                     to))
-              #f
-              (let* 
-                  ((split (car splits))
-                   (split-time (xaccTransGetDate (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 "splits " splits)
-                (update-stats split-amt split-time)
-                (set! splits (cdr splits))
-                (split-recurse))))
-
-                                        ;  the minmax accumulator
-
-        (minmax-accum 'add start-balance)
-
-        (if (not (null? splits))
-            (split-recurse))
-
-        ;; insert a null transaction at the end of the interval
-        (update-stats 0.0 to)
-        (list minmax-accum stats-accum gain-loss-accum last-balance splits)))
-
-    (for-each
-     (lambda (interval)
-       (let*
-           ((interval-results
-             (process-interval
-              splits
-              (car interval)
-              (cadr interval)
-              start-bal-double))
-            (min-max-accum (car interval-results))
-            (stats-accum (cadr interval-results))
-            (gain-loss-accum (caddr interval-results))
-            (last-bal (cadddr interval-results))
-            (rest-splits (list-ref interval-results 4)))
-
-         (set! start-bal-double last-bal)
-         (set! splits rest-splits)
-         (output-row (car interval) 
-                     (cadr interval) 
-                     stats-accum 
-                     min-max-accum gain-loss-accum)))
-     interval-list)    
-    
-    (reverse data-rows)))
-
-
 ;; The rendering function. Since it works for a bunch of different
 ;; account settings, you have to give the reportname, the
 ;; account-types to work on and whether this report works on
@@ -313,27 +180,9 @@
        (gnc:gnc-monetary-amount
         (exchange-fn foreign-monetary report-currency date))))
     
-    ;; FIXME: why does this need to be re-defined here?
-    (define (zip . args)
-      (if (or (null? args) (member #t (map null? args)))
-          '()
-          (append (list (map car args))
-                  (apply zip (map cdr args)))))
-    
-    ;; FIXME: why does this need to be re-defined here?
-    (define (filter proc l)
-      (if (null? l)
-          '()
-          (if (proc (car l))
-              (cons (car l) (filter proc (cdr l)))
-              (filter proc (cdr l)))))
-    
     (if (not (null? accounts))
         (let* ((query (qof-query-create-for-splits))
                (splits '())
-               (data '())
-               ;; startbal will be a commodity-collector
-               (startbal  '())
                (daily-totals (list 0 0 0 0 0 0 0))
 	       ;; Note: the absolute-super-duper-i18n'ed solution
 	       ;; would be to use the locale-using functions
@@ -407,48 +256,28 @@
           ;; get the query results 
           (set! splits (qof-query-run query))
 	  (gnc:report-percent-done 40)
-          
-          ;; find the net starting balance for the set of accounts 
-          (set! startbal 
-                (gnc:accounts-get-balance-helper 
-                 accounts 
-                 (lambda (acct) (gnc:account-get-comm-balance-at-date 
-                                 acct beforebegindate #f))
-                 gnc-reverse-balance))
-	  (gnc:report-percent-done 50)
-          
-          (set! startbal 
-                (gnc-numeric-to-double
-                 (gnc:gnc-monetary-amount
-                  (gnc:sum-collector-commodity 
-                   startbal
-                   report-currency 
-                   (lambda (a b) 
-                     (exchange-fn a b beforebegindate))))))
-	  (gnc:report-percent-done 60)
-	  
-          ;; and analyze the data 
-          (set! data (analyze-splits splits startbal
-                                     from-date to-date 
-                                     DayDelta monetary->double))
-	  (gnc:report-percent-done 70)
-          
-          ;; now, in data we have a list of (start-date end-date avg-bal
-          ;; max-bal min-bal total-in total-out net). what we really
-          ;; want is just the last element, #7.
-          
+
+          ;; each split is analyzed... the amount is converted to
+          ;; report-currency, and the date modulo 7 used to find
+          ;; weekday, and the correct daily-totals is updated.
           (for-each
            (lambda (split)
-             (let ((k (modulo (- (gnc:time64-get-week-day
-                                  (list-ref split 1)) 1) 7))) ; end-date
-               (list-set! daily-totals k
-                          (+ (list-ref daily-totals k)
-                             (list-ref split 7))))) ; net
-           data)
-          
+             (let* ((date (xaccTransGetDate (xaccSplitGetParent split)))
+                    (weekday (modulo (1- (gnc:time64-get-week-day date)) 7))
+                    (exchanged (monetary->double
+                                (gnc:make-gnc-monetary
+                                 (xaccAccountGetCommodity (xaccSplitGetAccount split))
+                                 (xaccSplitGetAmount split))
+                                date))
+                    (old-amount (list-ref daily-totals weekday)))
+               (list-set! daily-totals weekday (+ old-amount exchanged))))
+           splits)
+
+          (gnc:report-percent-done 60)
+
           (let* ((zipped-list (filter (lambda (p) 
-                                        (not (zero? (cadr p)))) (zip days-of-week
-                                                                     daily-totals)))
+                                        (not (zero? (cadr p))))
+                                      (zip days-of-week daily-totals)))
                  (labels (map (lambda (p)
                                 (if show-total?
                                     (string-append



Summary of changes:
 .../report/standard-reports/average-balance.scm    |   2 +-
 gnucash/report/standard-reports/daily-reports.scm  | 211 ++-------------------
 2 files changed, 21 insertions(+), 192 deletions(-)



More information about the gnucash-changes mailing list