[category-barchart] *reindent/untabify/delete-trailing-whitespace*

pull/428/head
Christopher Lam 8 years ago
parent 6c59cd15cd
commit f27ea2d4bc

@ -25,7 +25,7 @@
;; depends must be outside module scope -- and should eventually go away.
(define-module (gnucash report standard-reports category-barchart))
(use-modules (srfi srfi-1))
(use-modules (gnucash utilities))
(use-modules (gnucash utilities))
(use-modules (gnucash gnc-module))
(use-modules (gnucash gettext))
@ -42,15 +42,15 @@
;; The names are used in the menu
;; The menu statusbar tips.
(define menutip-income
(define menutip-income
(N_ "Shows a chart with the Income per interval \
developing over time"))
(define menutip-expense
(define menutip-expense
(N_ "Shows a chart with the Expenses per interval \
developing over time"))
(define menutip-assets
(define menutip-assets
(N_ "Shows a chart with the Assets developing over time"))
(define menutip-liabilities
(define menutip-liabilities
(N_ "Shows a chart with the Liabilities \
developing over time"))
@ -87,8 +87,8 @@ developing over time"))
(define opthelp-averaging (N_ "Select whether the amounts should be shown over the full time period or rather as the average e.g. per month."))
(define (options-generator account-types reverse-balance? do-intervals?)
(let* ((options (gnc:new-options))
(add-option
(let* ((options (gnc:new-options))
(add-option
(lambda (new-option)
(gnc:register-option options new-option))))
@ -101,13 +101,13 @@ developing over time"))
options gnc:pagename-general
optname-from-date optname-to-date "a")
(gnc:options-add-interval-choice!
(gnc:options-add-interval-choice!
options gnc:pagename-general optname-stepsize "b" 'MonthDelta)
(gnc:options-add-currency!
(gnc:options-add-currency!
options gnc:pagename-general optname-report-currency "c")
(gnc:options-add-price-source!
(gnc:options-add-price-source!
options gnc:pagename-general
optname-price-source "d" 'weighted-average)
@ -141,17 +141,17 @@ developing over time"))
"a"
(N_ "Report on these accounts, if chosen account level allows.")
(lambda ()
(gnc:filter-accountlist-type
(gnc:filter-accountlist-type
account-types
(gnc-account-get-descendants-sorted (gnc-get-current-root-account))))
(lambda (accounts)
(list #t
(gnc:filter-accountlist-type account-types accounts)))
#t))
(gnc:options-add-account-levels!
options gnc:pagename-accounts optname-levels "c"
(N_ "Show accounts to this depth and not further.")
(gnc:options-add-account-levels!
options gnc:pagename-accounts optname-levels "c"
(N_ "Show accounts to this depth and not further.")
2)
;; Display tab
@ -161,19 +161,19 @@ developing over time"))
"a" (N_ "Show the full account name in legend?") #f))
(add-option
(gnc:make-multichoice-option
gnc:pagename-display optname-chart-type
"b" "Select which chart type to use"
'barchart
(list (vector 'barchart
(N_ "Bar Chart")
(N_ "Use bar charts."))
(vector 'linechart
(N_ "Line Chart")
(N_ "Use line charts."))
)
(gnc:make-multichoice-option
gnc:pagename-display optname-chart-type
"b" "Select which chart type to use"
'barchart
(list (vector 'barchart
(N_ "Bar Chart")
(N_ "Use bar charts."))
(vector 'linechart
(N_ "Line Chart")
(N_ "Use line charts."))
)
)
)
)
(add-option
(gnc:make-simple-boolean-option
@ -195,11 +195,11 @@ developing over time"))
"e" (N_ "Display a table of the selected data.")
#f))
(gnc:options-add-plot-size!
options gnc:pagename-display
(gnc:options-add-plot-size!
options gnc:pagename-display
optname-plot-width optname-plot-height "f" (cons 'percent 100.0) (cons 'percent 100.0))
(gnc:options-add-sort-method!
(gnc:options-add-sort-method!
options gnc:pagename-display
optname-sort-method "g" 'amount)
@ -219,63 +219,63 @@ developing over time"))
;; constant over the whole report period. Note that this might get
;; *really* complicated.
(define (category-barchart-renderer report-obj reportname reportguid
(define (category-barchart-renderer report-obj reportname reportguid
account-types do-intervals?)
;; A helper functions for looking up option values.
(define (get-option section name)
(gnc:option-value
(gnc:lookup-option
(gnc:option-value
(gnc:lookup-option
(gnc:report-options report-obj) section name)))
(gnc:report-starting reportname)
(let* ((to-date-t64 (gnc:time64-end-day-time
(gnc:date-option-absolute-time
(get-option gnc:pagename-general
(get-option gnc:pagename-general
optname-to-date))))
(from-date-t64 (gnc:time64-start-day-time
(gnc:date-option-absolute-time
(get-option gnc:pagename-general
optname-from-date))))
(interval (get-option gnc:pagename-general optname-stepsize))
(report-currency (get-option gnc:pagename-general
optname-report-currency))
(price-source (get-option gnc:pagename-general
optname-price-source))
(report-title (get-option gnc:pagename-general
gnc:optname-reportname))
(averaging-selection (if do-intervals?
(get-option gnc:pagename-general
optname-averaging)
'None))
(accounts (get-option gnc:pagename-accounts optname-accounts))
(account-levels (get-option gnc:pagename-accounts optname-levels))
(chart-type (get-option gnc:pagename-display optname-chart-type))
(stacked? (get-option gnc:pagename-display optname-stacked))
(show-fullname? (get-option gnc:pagename-display optname-fullname))
(max-slices (inexact->exact
(get-option gnc:pagename-display optname-slices)))
(height (get-option gnc:pagename-display optname-plot-height))
(width (get-option gnc:pagename-display optname-plot-width))
(sort-method (get-option gnc:pagename-display optname-sort-method))
(reverse-balance? (get-option "__report" "reverse-balance?"))
(work-done 0)
(work-to-do 0)
(show-table? (get-option gnc:pagename-display (N_ "Show table")))
(document (gnc:make-html-document))
(chart
(if (eqv? chart-type 'barchart)
(from-date-t64 (gnc:time64-start-day-time
(gnc:date-option-absolute-time
(get-option gnc:pagename-general
optname-from-date))))
(interval (get-option gnc:pagename-general optname-stepsize))
(report-currency (get-option gnc:pagename-general
optname-report-currency))
(price-source (get-option gnc:pagename-general
optname-price-source))
(report-title (get-option gnc:pagename-general
gnc:optname-reportname))
(averaging-selection (if do-intervals?
(get-option gnc:pagename-general
optname-averaging)
'None))
(accounts (get-option gnc:pagename-accounts optname-accounts))
(account-levels (get-option gnc:pagename-accounts optname-levels))
(chart-type (get-option gnc:pagename-display optname-chart-type))
(stacked? (get-option gnc:pagename-display optname-stacked))
(show-fullname? (get-option gnc:pagename-display optname-fullname))
(max-slices (inexact->exact
(get-option gnc:pagename-display optname-slices)))
(height (get-option gnc:pagename-display optname-plot-height))
(width (get-option gnc:pagename-display optname-plot-width))
(sort-method (get-option gnc:pagename-display optname-sort-method))
(reverse-balance? (get-option "__report" "reverse-balance?"))
(work-done 0)
(work-to-do 0)
(show-table? (get-option gnc:pagename-display (N_ "Show table")))
(document (gnc:make-html-document))
(chart
(if (eqv? chart-type 'barchart)
(gnc:make-html-barchart)
(gnc:make-html-linechart)
))
(table (gnc:make-html-table))
(topl-accounts (gnc:filter-accountlist-type
account-types
(gnc-account-get-children-sorted
(gnc-get-current-root-account)))))
))
(table (gnc:make-html-table))
(topl-accounts (gnc:filter-accountlist-type
account-types
(gnc-account-get-children-sorted
(gnc-get-current-root-account)))))
;; Returns true if the account a was selected in the account
;; selection option.
(define (show-acct? a)
@ -294,43 +294,43 @@ developing over time"))
(averaging-fraction-func (gnc:date-get-fraction-func averaging-selection))
(interval-fraction-func (gnc:date-get-fraction-func interval))
(averaging-multiplier
(if averaging-fraction-func
;; Calculate the divisor of the amounts so that an
;; average is shown. Multiplier factor is a gnc-numeric
(let* ((start-frac-avg (averaging-fraction-func from-date-t64))
(end-frac-avg (averaging-fraction-func (+ 1 to-date-t64)))
(diff-avg (- end-frac-avg start-frac-avg))
(diff-avg-numeric (/
(inexact->exact (round (* diff-avg 1000000))) ; 6 decimals precision
1000000))
(start-frac-int (interval-fraction-func from-date-t64))
(end-frac-int (interval-fraction-func (+ 1 to-date-t64)))
(diff-int (- end-frac-int start-frac-int))
(diff-int-numeric (/
(inexact->exact diff-int) 1))
)
;; Extra sanity check to ensure a number smaller than 1
(if (> diff-avg diff-int)
(gnc-numeric-div diff-int-numeric diff-avg-numeric GNC-DENOM-AUTO GNC-RND-ROUND)
1/1))
1/1))
(if averaging-fraction-func
;; Calculate the divisor of the amounts so that an
;; average is shown. Multiplier factor is a gnc-numeric
(let* ((start-frac-avg (averaging-fraction-func from-date-t64))
(end-frac-avg (averaging-fraction-func (+ 1 to-date-t64)))
(diff-avg (- end-frac-avg start-frac-avg))
(diff-avg-numeric (/
(inexact->exact (round (* diff-avg 1000000))) ; 6 decimals precision
1000000))
(start-frac-int (interval-fraction-func from-date-t64))
(end-frac-int (interval-fraction-func (+ 1 to-date-t64)))
(diff-int (- end-frac-int start-frac-int))
(diff-int-numeric (/
(inexact->exact diff-int) 1))
)
;; Extra sanity check to ensure a number smaller than 1
(if (> diff-avg diff-int)
(gnc-numeric-div diff-int-numeric diff-avg-numeric GNC-DENOM-AUTO GNC-RND-ROUND)
1/1))
1/1))
;; If there is averaging, the report-title is extended
;; accordingly.
(report-title
(case averaging-selection
((MonthDelta) (string-append report-title " " (_ "Monthly Average")))
((WeekDelta) (string-append report-title " " (_ "Weekly Average")))
((DayDelta) (string-append report-title " " (_ "Daily Average")))
(else report-title)))
(case averaging-selection
((MonthDelta) (string-append report-title " " (_ "Monthly Average")))
((WeekDelta) (string-append report-title " " (_ "Weekly Average")))
((DayDelta) (string-append report-title " " (_ "Daily Average")))
(else report-title)))
(currency-frac (gnc-commodity-get-fraction report-currency))
;; This is the list of date intervals to calculate.
(dates-list (if do-intervals?
(gnc:make-date-interval-list
(gnc:time64-start-day-time from-date-t64)
(gnc:time64-start-day-time from-date-t64)
(gnc:time64-end-day-time to-date-t64)
(gnc:deltasym-to-delta interval))
(gnc:make-date-list
(gnc:time64-end-day-time from-date-t64)
(gnc:time64-end-day-time from-date-t64)
(gnc:time64-end-day-time to-date-t64)
(gnc:deltasym-to-delta interval))))
;; Here the date strings for the x-axis labels are
@ -343,10 +343,10 @@ developing over time"))
(define (datelist->stringlist dates-list)
(map (lambda (date-list-item)
(qof-print-date
(if do-intervals?
(car date-list-item)
date-list-item)))
(qof-print-date
(if do-intervals?
(car date-list-item)
date-list-item)))
dates-list))
;; Converts a commodity-collector into gnc-monetary in the report's
@ -361,11 +361,11 @@ developing over time"))
report-currency
(gnc-numeric-mul
(gnc:gnc-monetary-amount
(gnc:sum-collector-commodity
(gnc:sum-collector-commodity
c report-currency
(lambda (a b) (exchange-fn a b date))))
averaging-multiplier currency-frac GNC-RND-ROUND)
))
))
;; Add two or more gnc-monetary objects
(define (monetary+ a . blist)
@ -407,9 +407,9 @@ developing over time"))
gnc:monetary-neg identity)
(if do-intervals?
(collector->monetary
(gnc:account-get-comm-balance-interval
account
(first date-list-entry)
(gnc:account-get-comm-balance-interval
account
(first date-list-entry)
(second date-list-entry) subacct?)
(second date-list-entry))
(collector->monetary
@ -417,23 +417,23 @@ developing over time"))
account date-list-entry subacct?)
date-list-entry))))
;; Creates the <balance-list> to be used in the function
;; below.
;; Creates the <balance-list> to be used in the function
;; below.
(define (account->balance-list account subacct?)
(map
(map
(lambda (d) (get-balance account d subacct?))
dates-list))
(define (count-accounts current-depth accts)
(if (< current-depth tree-depth)
(let ((sum 0))
(for-each
(lambda (a)
(set! sum (+ sum (+ 1 (count-accounts (+ 1 current-depth)
(gnc-account-get-children a))))))
accts)
sum)
(length (filter show-acct? accts))))
(define (count-accounts current-depth accts)
(if (< current-depth tree-depth)
(let ((sum 0))
(for-each
(lambda (a)
(set! sum (+ sum (+ 1 (count-accounts (+ 1 current-depth)
(gnc-account-get-children a))))))
accts)
sum)
(length (filter show-acct? accts))))
;; Calculates all account's balances. Returns a list of pairs:
;; (<account> <balance-list>), like '((Earnings (10.0 11.2))
@ -455,10 +455,10 @@ developing over time"))
(for-each
(lambda (a)
(begin
(set! work-done (1+ work-done))
(gnc:report-percent-done (+ 20 (* 70 (/ work-done work-to-do))))
(set! work-done (1+ work-done))
(gnc:report-percent-done (+ 20 (* 70 (/ work-done work-to-do))))
(if (show-acct? a)
(set! res
(set! res
(cons (list a (account->balance-list a #f))
res)))
(set! res (append
@ -471,11 +471,11 @@ developing over time"))
;; else (i.e. current-depth == tree-depth)
(map
(lambda (a)
(set! work-done (1+ work-done))
(gnc:report-percent-done (+ 20 (* 70 (/ work-done work-to-do))))
(set! work-done (1+ work-done))
(gnc:report-percent-done (+ 20 (* 70 (/ work-done work-to-do))))
(list a (account->balance-list a #t)))
(filter show-acct? accts))))
;; The percentage done numbers here are a hack so that
;; something gets displayed. On my system the
@ -484,251 +484,251 @@ developing over time"))
;; routine needs to send progress reports, or the price
;; lookup should be distributed and done when actually
;; needed so as to amortize the cpu time properly.
(gnc:report-percent-done 1)
(set! commodity-list (gnc:accounts-get-commodities
(append
(gnc:report-percent-done 1)
(set! commodity-list (gnc:accounts-get-commodities
(append
(gnc:acccounts-get-all-subaccounts accounts)
accounts)
report-currency))
(set! exchange-fn (gnc:case-exchange-time-fn
price-source report-currency
(set! exchange-fn (gnc:case-exchange-time-fn
price-source report-currency
commodity-list to-date-t64
5 15))
5 15))
(set! work-to-do (count-accounts 1 topl-accounts))
;; Sort the account list according to the account code field.
(set! all-data (sort
(filter (lambda (l)
(set! all-data (sort
(filter (lambda (l)
(not (zero?
(gnc:gnc-monetary-amount
(apply monetary+ (cadr l))))))
(traverse-accounts 1 topl-accounts))
(cond
((eq? sort-method 'acct-code)
(lambda (a b)
(string<? (xaccAccountGetCode (car a))
(xaccAccountGetCode (car b)))))
((eq? sort-method 'alphabetical)
(lambda (a b)
(string<? ((if show-fullname?
gnc-account-get-full-name
xaccAccountGetName) (car a))
((if show-fullname?
gnc-account-get-full-name
xaccAccountGetName) (car b)))))
(else
(lambda (a b)
(cond
((eq? sort-method 'acct-code)
(lambda (a b)
(string<? (xaccAccountGetCode (car a))
(xaccAccountGetCode (car b)))))
((eq? sort-method 'alphabetical)
(lambda (a b)
(string<? ((if show-fullname?
gnc-account-get-full-name
xaccAccountGetName) (car a))
((if show-fullname?
gnc-account-get-full-name
xaccAccountGetName) (car b)))))
(else
(lambda (a b)
(> (gnc-numeric-compare (gnc:gnc-monetary-amount (apply monetary+ (cadr a)))
(gnc:gnc-monetary-amount (apply monetary+ (cadr b))))
0)))
)))
)))
;; Or rather sort by total amount?
;;(< (apply + (cadr a))
;;(< (apply + (cadr a))
;; (apply + (cadr b))))))
;; Other sort criteria: max. amount, standard deviation of amount,
;; min. amount; ascending, descending. FIXME: Add user options to
;; choose sorting.
;;(gnc:warn "all-data" all-data)
;; Proceed if the data is non-zeros
(if
(if
(and (not (null? all-data))
(not-all-zeros (map cadr all-data)))
(begin
(begin
(set! date-string-list (datelist->stringlist dates-list))
(qof-date-format-set QOF-DATE-FORMAT-ISO)
(set! date-iso-string-list (datelist->stringlist dates-list))
(qof-date-format-set save-fmt)
;; Set chart title, subtitle etc.
(if (eqv? chart-type 'barchart)
(begin
(gnc:html-barchart-set-title! chart report-title)
(gnc:html-barchart-set-subtitle!
chart (format #f
(if do-intervals?
(_ "~a to ~a")
(_ "Balances ~a to ~a"))
(gnc:html-string-sanitize (qof-print-date from-date-t64))
(gnc:html-string-sanitize (qof-print-date to-date-t64))))
(gnc:html-barchart-set-width! chart width)
(gnc:html-barchart-set-height! chart height)
;; row labels etc.
(gnc:html-barchart-set-row-labels! chart date-string-list)
;; FIXME: axis labels are not yet supported by
;; libguppitank.
(gnc:html-barchart-set-y-axis-label!
chart (gnc-commodity-get-mnemonic report-currency))
(gnc:html-barchart-set-row-labels-rotated?! chart #t)
(gnc:html-barchart-set-stacked?! chart stacked?)
;; If this is a stacked barchart, then reverse the legend.
;; Doesn't do what you'd expect. - DRH
;; It does work, but needs Guppi 0.40.4. - cstim
(gnc:html-barchart-set-legend-reversed?! chart stacked?)
)
(begin
(gnc:html-linechart-set-title! chart report-title)
(gnc:html-linechart-set-subtitle!
chart (format #f
(if do-intervals?
(_ "~a to ~a")
(_ "Balances ~a to ~a"))
(gnc:html-string-sanitize (qof-print-date from-date-t64))
(gnc:html-string-sanitize (qof-print-date to-date-t64))))
(gnc:html-linechart-set-width! chart width)
(gnc:html-linechart-set-height! chart height)
;; row labels etc.
(gnc:html-linechart-set-row-labels! chart date-iso-string-list)
;; FIXME: axis labels are not yet supported by
;; libguppitank.
(gnc:html-linechart-set-y-axis-label!
chart (gnc-commodity-get-mnemonic report-currency))
(gnc:html-linechart-set-row-labels-rotated?! chart #t)
(gnc:html-linechart-set-stacked?! chart stacked?)
;; If this is a stacked linechart, then reverse the legend.
;; Doesn't do what you'd expect. - DRH
;; It does work, but needs Guppi 0.40.4. - cstim
(gnc:html-linechart-set-legend-reversed?! chart stacked?)
)
)
(begin
(gnc:html-barchart-set-title! chart report-title)
(gnc:html-barchart-set-subtitle!
chart (format #f
(if do-intervals?
(_ "~a to ~a")
(_ "Balances ~a to ~a"))
(gnc:html-string-sanitize (qof-print-date from-date-t64))
(gnc:html-string-sanitize (qof-print-date to-date-t64))))
(gnc:html-barchart-set-width! chart width)
(gnc:html-barchart-set-height! chart height)
;; row labels etc.
(gnc:html-barchart-set-row-labels! chart date-string-list)
;; FIXME: axis labels are not yet supported by
;; libguppitank.
(gnc:html-barchart-set-y-axis-label!
chart (gnc-commodity-get-mnemonic report-currency))
(gnc:html-barchart-set-row-labels-rotated?! chart #t)
(gnc:html-barchart-set-stacked?! chart stacked?)
;; If this is a stacked barchart, then reverse the legend.
;; Doesn't do what you'd expect. - DRH
;; It does work, but needs Guppi 0.40.4. - cstim
(gnc:html-barchart-set-legend-reversed?! chart stacked?)
)
(begin
(gnc:html-linechart-set-title! chart report-title)
(gnc:html-linechart-set-subtitle!
chart (format #f
(if do-intervals?
(_ "~a to ~a")
(_ "Balances ~a to ~a"))
(gnc:html-string-sanitize (qof-print-date from-date-t64))
(gnc:html-string-sanitize (qof-print-date to-date-t64))))
(gnc:html-linechart-set-width! chart width)
(gnc:html-linechart-set-height! chart height)
;; row labels etc.
(gnc:html-linechart-set-row-labels! chart date-iso-string-list)
;; FIXME: axis labels are not yet supported by
;; libguppitank.
(gnc:html-linechart-set-y-axis-label!
chart (gnc-commodity-get-mnemonic report-currency))
(gnc:html-linechart-set-row-labels-rotated?! chart #t)
(gnc:html-linechart-set-stacked?! chart stacked?)
;; If this is a stacked linechart, then reverse the legend.
;; Doesn't do what you'd expect. - DRH
;; It does work, but needs Guppi 0.40.4. - cstim
(gnc:html-linechart-set-legend-reversed?! chart stacked?)
)
)
;; If we have too many categories, we sum them into a new
;; 'other' category and add a link to a new report with just
;; those accounts.
(if (> (length all-data) max-slices)
(let* ((start (take all-data (- max-slices 1)))
(finish (drop all-data (- max-slices 1)))
(other-sum (map
(other-sum (map
(lambda (l) (apply monetary+ l))
(apply zip (map cadr finish)))))
(set! all-data
(append start
(list (list (_ "Other") other-sum))))
(append start
(list (list (_ "Other") other-sum))))
(let* ((options (gnc:make-report-options reportguid))
(id #f))
;; now copy all the options
(gnc:options-copy-values
(gnc:options-copy-values
(gnc:report-options report-obj) options)
;; and set the destination accounts
(gnc:option-set-value
(gnc:lookup-option options gnc:pagename-accounts
(gnc:lookup-option options gnc:pagename-accounts
optname-accounts)
(map car finish))
;; Set the URL to point to this report.
(set! id (gnc:make-report reportguid options))
(set! other-anchor (gnc:report-anchor-text id)))))
;; This adds the data. Note the apply-zip stuff: This
;; transposes the data, i.e. swaps rows and columns. Pretty
;; cool, eh? Courtesy of dave_p.
(gnc:report-percent-done 92)
(gnc:report-percent-done 92)
(if (eqv? chart-type 'barchart)
(begin ;; bar chart
(if (not (null? all-data))
(gnc:html-barchart-set-data!
chart
(apply zip (map (lambda (mlist)
(map monetary->double mlist))
(map cadr all-data)))))
;; Labels and colors
(gnc:report-percent-done 94)
(gnc:html-barchart-set-col-labels!
chart (map (lambda (pair)
(if (string? (car pair))
(car pair)
((if show-fullname?
gnc-account-get-full-name
xaccAccountGetName) (car pair))))
all-data))
(gnc:html-barchart-set-col-colors!
chart
(gnc:assign-colors (length all-data)))
)
(begin ;; line chart
(if (not (null? all-data))
(gnc:html-linechart-set-data!
chart
(apply zip (map (lambda (mlist)
(map monetary->double mlist))
(map cadr all-data)))))
;; Labels and colors
(gnc:report-percent-done 94)
(gnc:html-linechart-set-col-labels!
chart (map (lambda (pair)
(if (string? (car pair))
(car pair)
((if show-fullname?
gnc-account-get-full-name
xaccAccountGetName) (car pair))))
all-data))
(gnc:html-linechart-set-col-colors!
chart
(gnc:assign-colors (length all-data)))
)
)
(begin ;; bar chart
(if (not (null? all-data))
(gnc:html-barchart-set-data!
chart
(apply zip (map (lambda (mlist)
(map monetary->double mlist))
(map cadr all-data)))))
;; Labels and colors
(gnc:report-percent-done 94)
(gnc:html-barchart-set-col-labels!
chart (map (lambda (pair)
(if (string? (car pair))
(car pair)
((if show-fullname?
gnc-account-get-full-name
xaccAccountGetName) (car pair))))
all-data))
(gnc:html-barchart-set-col-colors!
chart
(gnc:assign-colors (length all-data)))
)
(begin ;; line chart
(if (not (null? all-data))
(gnc:html-linechart-set-data!
chart
(apply zip (map (lambda (mlist)
(map monetary->double mlist))
(map cadr all-data)))))
;; Labels and colors
(gnc:report-percent-done 94)
(gnc:html-linechart-set-col-labels!
chart (map (lambda (pair)
(if (string? (car pair))
(car pair)
((if show-fullname?
gnc-account-get-full-name
xaccAccountGetName) (car pair))))
all-data))
(gnc:html-linechart-set-col-colors!
chart
(gnc:assign-colors (length all-data)))
)
)
;; set the URLs; the slices are links to other reports
;; (gnc:report-percent-done 96)
;; (let
;; ((urls
;; (map
;; (lambda (pair)
;; (if
;; (string? (car pair))
;; other-anchor
;; (let* ((acct (car pair))
;; (subaccts
;; (gnc-account-get-children acct)))
;; (if (null? subaccts)
;; ;; if leaf-account, make this an anchor
;; ;; to the register.
;; (gnc:account-anchor-text acct)
;; ;; if non-leaf account, make this a link
;; ;; to another report which is run on the
;; ;; immediate subaccounts of this account
;; ;; (and including this account).
;; (gnc:make-report-anchor
;; reportguid
;; report-obj
;; (list
;; (list gnc:pagename-accounts optname-accounts
;; (cons acct subaccts))
;; (list gnc:pagename-accounts optname-levels
;; (+ 1 tree-depth))
;; (list gnc:pagename-general
;; gnc:optname-reportname
;; ((if show-fullname?
;; gnc-account-get-full-name
;; xaccAccountGetName) acct))))))))
;; all-data)))
;; (if (eqv? chart-type 'barchart)
;; (begin ;; bar chart
;; (gnc:html-barchart-set-button-1-bar-urls!
;; chart (append urls urls))
;; ;; The legend urls do the same thing.
;; (gnc:html-barchart-set-button-1-legend-urls!
;; chart (append urls urls))
;; )
;; (begin ;; line chart
;; (gnc:html-linechart-set-button-1-line-urls!
;; chart (append urls urls))
;; ;; The legend urls do the same thing.
;; (gnc:html-linechart-set-button-1-legend-urls!
;; chart (append urls urls))
;; )
;; )
;; )
(gnc:report-percent-done 98)
;; (gnc:report-percent-done 96)
;; (let
;; ((urls
;; (map
;; (lambda (pair)
;; (if
;; (string? (car pair))
;; other-anchor
;; (let* ((acct (car pair))
;; (subaccts
;; (gnc-account-get-children acct)))
;; (if (null? subaccts)
;; ;; if leaf-account, make this an anchor
;; ;; to the register.
;; (gnc:account-anchor-text acct)
;; ;; if non-leaf account, make this a link
;; ;; to another report which is run on the
;; ;; immediate subaccounts of this account
;; ;; (and including this account).
;; (gnc:make-report-anchor
;; reportguid
;; report-obj
;; (list
;; (list gnc:pagename-accounts optname-accounts
;; (cons acct subaccts))
;; (list gnc:pagename-accounts optname-levels
;; (+ 1 tree-depth))
;; (list gnc:pagename-general
;; gnc:optname-reportname
;; ((if show-fullname?
;; gnc-account-get-full-name
;; xaccAccountGetName) acct))))))))
;; all-data)))
;; (if (eqv? chart-type 'barchart)
;; (begin ;; bar chart
;; (gnc:html-barchart-set-button-1-bar-urls!
;; chart (append urls urls))
;; ;; The legend urls do the same thing.
;; (gnc:html-barchart-set-button-1-legend-urls!
;; chart (append urls urls))
;; )
;; (begin ;; line chart
;; (gnc:html-linechart-set-button-1-line-urls!
;; chart (append urls urls))
;; ;; The legend urls do the same thing.
;; (gnc:html-linechart-set-button-1-legend-urls!
;; chart (append urls urls))
;; )
;; )
;; )
(gnc:report-percent-done 98)
(gnc:html-document-add-object! document chart)
(if show-table?
(begin
@ -753,11 +753,11 @@ developing over time"))
(append
(list (_ "Date"))
(map (lambda (pair)
(if (string? (car pair))
(car pair)
((if show-fullname?
gnc-account-get-full-name
xaccAccountGetName) (car pair))))
(if (string? (car pair))
(car pair)
((if show-fullname?
gnc-account-get-full-name
xaccAccountGetName) (car pair))))
all-data)
(if (> (gnc:html-table-num-columns table) 2)
(list (_ "Grand Total"))
@ -789,7 +789,7 @@ developing over time"))
)
)
)
;; set numeric columns to align right
;; set numeric columns to align right
(for-each
(lambda (col)
(gnc:html-table-set-col-style!
@ -805,28 +805,28 @@ developing over time"))
(gnc:html-document-add-object!
document
(gnc:html-make-empty-data-warning
report-title (gnc:report-id report-obj)))))
;; else if no accounts selected
(gnc:html-document-add-object!
document
(gnc:html-make-no-account-warning
report-title (gnc:report-id report-obj))))
report-title (gnc:report-id report-obj)))))
;; else if no accounts selected
(gnc:html-document-add-object!
document
(gnc:html-make-no-account-warning
report-title (gnc:report-id report-obj))))
(gnc:report-finished)
document))
;; Export reports
(export category-barchart-income-uuid category-barchart-expense-uuid
category-barchart-asset-uuid category-barchart-liability-uuid)
category-barchart-asset-uuid category-barchart-liability-uuid)
(define category-barchart-income-uuid "44f81bee049b4b3ea908f8dac9a9474e")
(define category-barchart-expense-uuid "b1f15b2052c149df93e698fe85a81ea6")
(define category-barchart-asset-uuid "e9cf815f79db44bcb637d0295093ae3d")
(define category-barchart-liability-uuid "faf410e8f8da481fbc09e4763da40bcc")
(for-each
(for-each
(lambda (l)
(let ((tip-and-rev (cddddr l)))
(gnc:define-report
@ -834,31 +834,31 @@ developing over time"))
'name (car l)
'report-guid (car (reverse l))
'menu-path (if (caddr l)
(list gnc:menuname-income-expense)
(list gnc:menuname-asset-liability))
(list gnc:menuname-income-expense)
(list gnc:menuname-asset-liability))
'menu-name (cadddr l)
'menu-tip (car tip-and-rev)
'options-generator (lambda () (options-generator (cadr l)
'options-generator (lambda () (options-generator (cadr l)
(cadr tip-and-rev)
(caddr l)))
'renderer (lambda (report-obj)
(category-barchart-renderer report-obj
(car l)
(car (reverse l))
(cadr l)
(caddr l))))))
(list
;; reportname, account-types, do-intervals?,
(category-barchart-renderer report-obj
(car l)
(car (reverse l))
(cadr l)
(caddr l))))))
(list
;; reportname, account-types, do-intervals?,
;; menu-reportname, menu-tip
(list reportname-income (list ACCT-TYPE-INCOME) #t menuname-income menutip-income (lambda (x) #t) category-barchart-income-uuid)
(list reportname-expense (list ACCT-TYPE-EXPENSE) #t menuname-expense menutip-expense (lambda (x) #f) category-barchart-expense-uuid)
(list reportname-assets
(list reportname-assets
(list ACCT-TYPE-ASSET ACCT-TYPE-BANK ACCT-TYPE-CASH ACCT-TYPE-CHECKING
ACCT-TYPE-SAVINGS ACCT-TYPE-MONEYMRKT
ACCT-TYPE-RECEIVABLE ACCT-TYPE-STOCK ACCT-TYPE-MUTUAL
ACCT-TYPE-CURRENCY)
#f menuname-assets menutip-assets (lambda (x) #f) category-barchart-asset-uuid)
(list reportname-liabilities
(list reportname-liabilities
(list ACCT-TYPE-LIABILITY ACCT-TYPE-PAYABLE ACCT-TYPE-CREDIT
ACCT-TYPE-CREDITLINE)
#f menuname-liabilities menutip-liabilities (lambda (x) #t) category-barchart-liability-uuid)))

Loading…
Cancel
Save