Add tables to "bar chart" reports

Charles Day cedayiv at gmail.com
Fri Jul 11 19:49:59 EDT 2008


On Sun, Apr 13, 2008 at 10:38 AM, Joachim Herb <Joachim.Herb at gmx.de> wrote:

> 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.
>

I couldn't get this to work. Try opening the attached GnuCash file, running
the expense barchart, then going into the options and checking "Show table".
I got a crashed report and a Scheme backtrace (shown below).

Can you figure out what's wrong?

Cheers,
Charles

In c:/soft/gnucash/inst/share/gnucash/scm/report.scm:
 543: 27* (if template (let* # # # ...) #f)
 544: 28  (let* (# # # ...) (gnc:html-document-set-style-sheet! doc
stylesheet)
...)
 546: 29* [#<procedure #f #> #]
In
c:/soft/gnucash/inst/share/gnucash/guile-modules/gnucash/report/category-barc
hart.scm:
 633: 30  [category-barchart-renderer # "Expense Over Time" ...]
In unknown file:
    ...
   ?: 31  (letrec ((show-acct? #)) (if (not #) (let* # #) ...) ...)
In
c:/soft/gnucash/inst/share/gnucash/guile-modules/gnucash/report/category-barc
hart.scm:
 234: 32* (if (not (null? accounts)) (let* (# # # ...) (letrec # # ...))
...)
 237: 33  (let* (# # # # ...) (letrec # # # ...))
    ...
 532: 34  (begin # # # ...)
 535: 35* (letrec ((addcol (lambda # #))) (addcol (map cadr all-data)))
 546: 36  [addcol ((0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ...))]
    ...
 539: 37  (begin (gnc:html-table-append-column! table (car col)) (addcol
(cdr co
l)))
 540: 38* [gnc:html-table-append-column! # #]
In unknown file:
   ?: 39  (letrec (# # #) (let* # #))
In c:/soft/gnucash/inst/share/gnucash/scm/html-table.scm:
    ...
 500: 40  [gnc:html-table-set-data! # ...
 502: 41*  [reverse ...
 502: 42*   [car ...
 502: 43*    [append-to-element (# # # # ...) (# # # # ...) 13 ...]
 479: 44     (if (= length-to-append 0) (cons (quote ()) newcol) ...)
 481: 45     (let* (# # # # ...) (cons # #))
 486: 46*    (append-to-element rest-new rest-existing (- length-to-append
1))
c:/soft/gnucash/inst/share/gnucash/scm/html-table.scm:486:27: In expression
(app
end-to-element rest-new rest-existing ...):
c:/soft/gnucash/inst/share/gnucash/scm/html-table.scm:486:27: Wrong number
of ar
guments to #<procedure append-to-element (newcol existing-data
length-to-append
width-to-make)>
In c:/soft/gnucash/inst/share/gnucash/scm/report.scm:
 543: 24* (if template (let* # # # ...) #f)
 544: 25  (let* (# # # ...) (gnc:html-document-set-style-sheet! doc
stylesheet)
...)
 546: 26* [#<procedure #f #> #]
In
c:/soft/gnucash/inst/share/gnucash/guile-modules/gnucash/report/category-barc
hart.scm:
 633: 27  [category-barchart-renderer # "Expense Over Time" ...]
In unknown file:
    ...
   ?: 28  (letrec ((show-acct? #)) (if (not #) (let* # #) ...) ...)
In
c:/soft/gnucash/inst/share/gnucash/guile-modules/gnucash/report/category-barc
hart.scm:
 234: 29* (if (not (null? accounts)) (let* (# # # ...) (letrec # # ...))
...)
 237: 30  (let* (# # # # ...) (letrec # # # ...))
    ...
 532: 31  (begin # # # ...)
 535: 32* (letrec ((addcol (lambda # #))) (addcol (map cadr all-data)))
 546: 33  [addcol ((0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ...))]
    ...
 539: 34  (begin (gnc:html-table-append-column! table (car col)) (addcol
(cdr co
l)))
 540: 35* [gnc:html-table-append-column! # #]
In unknown file:
   ?: 36  (letrec (# # #) (let* # #))
In c:/soft/gnucash/inst/share/gnucash/scm/html-table.scm:
    ...
 500: 37  [gnc:html-table-set-data! # ...
 502: 38*  [reverse ...
 502: 39*   [car ...
 502: 40*    [append-to-element (# # # # ...) (# # # # ...) 13 ...]
 479: 41     (if (= length-to-append 0) (cons (quote ()) newcol) ...)
 481: 42     (let* (# # # # ...) (cons # #))
 486: 43*    (append-to-element rest-new rest-existing (- length-to-append
1))
c:/soft/gnucash/inst/share/gnucash/scm/html-table.scm:486:27: In expression
(app
end-to-element rest-new rest-existing ...):
c:/soft/gnucash/inst/share/gnucash/scm/html-table.scm:486:27: Wrong number
of ar
guments to #<procedure append-to-element (newcol existing-data
length-to-append
width-to-make)>



> 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
> _______________________________________________
> gnucash-devel mailing list
> gnucash-devel at gnucash.org
> https://lists.gnucash.org/mailman/listinfo/gnucash-devel
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: expbarchart
Type: application/octet-stream
Size: 2133 bytes
Desc: not available
Url : http://lists.gnucash.org/pipermail/gnucash-devel/attachments/20080711/19040a9e/attachment-0001.obj 


More information about the gnucash-devel mailing list