Add tables to "bar chart" reports
Joachim Herb
Joachim.Herb at gmx.de
Sun Apr 13 13:38:41 EDT 2008
Hello,
a feature I missed for a long time is the ability to extend the bar chart graphs with tables
containing the same information as the graph.
I added this to the standard reports net-barchart.scm and category-barchart.scm. As I expect that
other people might also be interested in this, here are the patches.
As these are my first scheme programs (and hopefully the last) feel free to suggest improvements.
Joachim
--- category-barchart.scm 2008-03-02 14:24:56.000000000 +0100
+++ /home/joachim/workspace/gnucash/category-barchart.scm 2008-04-13 18:57:05.000000000 +0200
@@ -146,13 +146,20 @@
"c" (N_ "Maximum number of bars in the chart") 8
2 24 0 1))
+ (add-option
+ (gnc:make-simple-boolean-option
+ gnc:pagename-display
+ (N_ "Show table")
+ "d" (N_ "Display a table of the selected data.")
+ #f))
+
(gnc:options-add-plot-size!
options gnc:pagename-display
- optname-plot-width optname-plot-height "d" 400 400)
+ optname-plot-width optname-plot-height "e" 400 400)
(gnc:options-add-sort-method!
options gnc:pagename-display
- optname-sort-method "e" 'amount)
+ optname-sort-method "f" 'amount)
(gnc:options-set-default-section options gnc:pagename-general)
@@ -209,8 +216,10 @@
(work-done 0)
(work-to-do 0)
+ (show-table? (get-option gnc:pagename-display (N_ "Show table")))
(document (gnc:make-html-document))
(chart (gnc:make-html-barchart))
+ (table (gnc:make-html-table))
(topl-accounts (gnc:filter-accountlist-type
account-types
(gnc-account-get-children-sorted
@@ -518,7 +528,79 @@
chart (append urls urls)))
(gnc:report-percent-done 98)
- (gnc:html-document-add-object! document chart))
+ (gnc:html-document-add-object! document chart)
+ (if show-table?
+ (begin
+ (gnc:html-table-append-column! table date-string-list)
+
+ (letrec
+ ((addcol
+ (lambda (col)
+ (if (not (null? col))
+ (begin
+ (gnc:html-table-append-column!
+ table (car col))
+ (addcol (cdr col))
+ )
+ ))
+ ))
+ (addcol (map cadr all-data))
+ )
+
+ (gnc:html-table-set-col-headers!
+ table
+ (append
+ (list (_ "Date"))
+ (map (lambda (pair)
+ (regexp-substitute/global #f "&"
+ (if (string? (car pair))
+ (car pair)
+ ((if show-fullname?
+ gnc-account-get-full-name
+ xaccAccountGetName) (car pair)))
+ 'pre " " (_ "and") " " 'post))
+ all-data)
+ (if (> (gnc:html-table-num-columns table) 2)
+ (list (_ "Grand Total"))
+ (list nil)
+ )
+ ))
+
+ (if (> (gnc:html-table-num-columns table) 2)
+ (letrec
+ ((sumtot
+ (lambda (row)
+ (if (null? row)
+ '()
+ (cons (sumrow (car row)) (sumtot (cdr row)))
+ )
+ )
+ )
+ (sumrow
+ (lambda (row)
+ (if (not (null? row))
+ (+ (car row) (sumrow (cdr row)))
+ 0
+ )
+ )
+ ))
+ (gnc:html-table-append-column!
+ table
+ (sumtot (apply zip (map cadr all-data)))
+ )
+ )
+ )
+ ;; set numeric columns to align right
+ (for-each
+ (lambda (col)
+ (gnc:html-table-set-col-style!
+ table col "td"
+ 'attribute (list "align" "right")))
+ '(1 2 3 4 5 6 7 8 9 10 11 12 13 14))
+ (gnc:html-document-add-object! document table)
+ ) ;; begin if
+ )
+ )
;; else if empty data
(gnc:html-document-add-object!
--- end diff category-barchart.scm
--- net-barchart.scm 2008-03-02 14:24:56.000000000 +0100
+++ /home/joachim/workspace/gnucash/net-barchart.scm 2008-04-13 19:23:46.000000000 +0200
@@ -120,9 +120,16 @@
(N_ "Show a Net Worth bar?"))
#t))
+ (add-option
+ (gnc:make-simple-boolean-option
+ gnc:pagename-display
+ (N_ "Show table")
+ "c" (N_ "Display a table of the selected data.")
+ #f))
+
(gnc:options-add-plot-size!
options gnc:pagename-display
- optname-plot-width optname-plot-height "c" 500 400)
+ optname-plot-width optname-plot-height "d" 500 400)
(gnc:options-set-default-section options gnc:pagename-general)
@@ -179,6 +186,7 @@
(report-title (get-option gnc:pagename-general
gnc:optname-reportname))
(classified-accounts (gnc:decompose-accountlist accounts))
+ (show-table? (get-option gnc:pagename-display (N_ "Show table")))
(document (gnc:make-html-document))
(chart (gnc:make-html-barchart))
(non-zeros #f))
@@ -356,7 +364,45 @@
;; Test for all-zero data here.
(if non-zeros
+ (begin
(gnc:html-document-add-object! document chart)
+ (if show-table?
+ (let ((table (gnc:make-html-table)))
+ (gnc:html-table-set-col-headers!
+ table
+ (append
+ (list (_ "Date"))
+ (if show-sep?
+ (if inc-exp?
+ (list (_ "Income") (_ "Expense"))
+ (list (_ "Assets") (_ "Liabilities")))
+ '())
+ (if show-net?
+ (if inc-exp?
+ (list (_ "Net Profit"))
+ (list (_ "Net Worth")))
+ '()))
+ )
+ (gnc:html-table-append-column! table date-string-list)
+ (if show-sep?
+ (begin
+ (gnc:html-table-append-column! table assets-list)
+ (gnc:html-table-append-column! table liability-list)
+ )
+ )
+ (if show-net?
+ (gnc:html-table-append-column! table net-list)
+ )
+ ;; set numeric columns to align right
+ (for-each
+ (lambda (col)
+ (gnc:html-table-set-col-style!
+ table col "td"
+ 'attribute (list "align" "right")))
+ '(1 2 3))
+
+ (gnc:html-document-add-object! document table))
+ ))
(gnc:html-document-add-object!
document
(gnc:html-make-empty-data-warning
More information about the gnucash-devel
mailing list