r17384 - gnucash/branches/2.2 - [r17316] Reports: Add option to display a table of data beneath barcharts.

Andreas Köhler andi5 at cvs.gnucash.org
Tue Jul 22 18:33:35 EDT 2008


Author: andi5
Date: 2008-07-22 18:33:35 -0400 (Tue, 22 Jul 2008)
New Revision: 17384
Trac: http://svn.gnucash.org/trac/changeset/17384

Modified:
   gnucash/branches/2.2/AUTHORS
   gnucash/branches/2.2/src/report/standard-reports/category-barchart.scm
   gnucash/branches/2.2/src/report/standard-reports/net-barchart.scm
Log:
[r17316] Reports: Add option to display a table of data beneath barcharts.

Patch by Joachim Herb.
Committed by cedayiv.


Modified: gnucash/branches/2.2/AUTHORS
===================================================================
--- gnucash/branches/2.2/AUTHORS	2008-07-22 22:33:24 UTC (rev 17383)
+++ gnucash/branches/2.2/AUTHORS	2008-07-22 22:33:35 UTC (rev 17384)
@@ -160,6 +160,7 @@
 John Hasler <john at dhh.gt.org> engine patch
 Jon Kåre Hellan <hellan at acm.org> misc core dump fixes
 Hendrik-Jan Heins <hjh at passys.nl> Dutch translation
+Joachim Herb <joachim.herb at gmx.de> Data table option for barchart reports
 Claus Hindsgaul <claus_h at image.dk> messages Danish translation
 Ori Hoch <ori at uumpa.com> Hebrew translation
 Péter Hosszú <hosszu at web.de> Hungarian translation

Modified: gnucash/branches/2.2/src/report/standard-reports/category-barchart.scm
===================================================================
--- gnucash/branches/2.2/src/report/standard-reports/category-barchart.scm	2008-07-22 22:33:24 UTC (rev 17383)
+++ gnucash/branches/2.2/src/report/standard-reports/category-barchart.scm	2008-07-22 22:33:35 UTC (rev 17384)
@@ -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,8 +527,80 @@
                 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!
             document

Modified: gnucash/branches/2.2/src/report/standard-reports/net-barchart.scm
===================================================================
--- gnucash/branches/2.2/src/report/standard-reports/net-barchart.scm	2008-07-22 22:33:24 UTC (rev 17383)
+++ gnucash/branches/2.2/src/report/standard-reports/net-barchart.scm	2008-07-22 22:33:35 UTC (rev 17384)
@@ -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-changes mailing list