mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Bug #506856: Add Budget Bar Chat Report
The contributor writes: This report display the budgeted vs actual budget in a barchart. Patch by "tbic". git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@17662 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
1367aa95da
commit
b6c3ac3f4d
@ -26,6 +26,7 @@ gncscmmod_DATA = \
|
|||||||
balance-sheet.scm \
|
balance-sheet.scm \
|
||||||
cash-flow.scm \
|
cash-flow.scm \
|
||||||
budget.scm \
|
budget.scm \
|
||||||
|
budget-barchart.scm \
|
||||||
budget-flow.scm \
|
budget-flow.scm \
|
||||||
category-barchart.scm \
|
category-barchart.scm \
|
||||||
daily-reports.scm \
|
daily-reports.scm \
|
||||||
|
212
src/report/standard-reports/budget-barchart.scm
Normal file
212
src/report/standard-reports/budget-barchart.scm
Normal file
@ -0,0 +1,212 @@
|
|||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; net-barchart.scm : Display a time series for either net worth or
|
||||||
|
;; net profit.
|
||||||
|
;;
|
||||||
|
;; By Robert Merkel <rgmerk@mira.net>
|
||||||
|
;; and Christian Stimming <stimming@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
|
||||||
|
;; published by the Free Software Foundation; either version 2 of
|
||||||
|
;; the License, or (at your option) any later version.
|
||||||
|
;;
|
||||||
|
;; This program is distributed in the hope that it will be useful,
|
||||||
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
;; GNU General Public License for more details.
|
||||||
|
;;
|
||||||
|
;; You should have received a copy of the GNU General Public License
|
||||||
|
;; along with this program; if not, contact:
|
||||||
|
;;
|
||||||
|
;; Free Software Foundation Voice: +1-617-542-5942
|
||||||
|
;; 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652
|
||||||
|
;; Boston, MA 02110-1301, USA gnu@gnu.org
|
||||||
|
;;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
(define-module (gnucash report budget-barchart))
|
||||||
|
|
||||||
|
(use-modules (srfi srfi-1))
|
||||||
|
(use-modules (gnucash main)) ;; FIXME: delete after we finish modularizing.
|
||||||
|
(use-modules (ice-9 slib))
|
||||||
|
(use-modules (gnucash gnc-module))
|
||||||
|
|
||||||
|
(require 'printf)
|
||||||
|
|
||||||
|
(gnc:module-load "gnucash/report/report-system" 0)
|
||||||
|
|
||||||
|
(define reportname (N_ "Budget Barchart"))
|
||||||
|
|
||||||
|
(define optname-accounts (N_ "Accounts"))
|
||||||
|
(define optname-budget (N_ "Budget"))
|
||||||
|
|
||||||
|
(define optname-running-sum (N_ "Running Sum"))
|
||||||
|
|
||||||
|
;(define (options-generator inc-exp?)
|
||||||
|
(define (options-generator)
|
||||||
|
(let* (
|
||||||
|
(options (gnc:new-options))
|
||||||
|
;; This is just a helper function for making options.
|
||||||
|
;; See gnucash/src/scm/options.scm for details.
|
||||||
|
(add-option
|
||||||
|
(lambda (new-option)
|
||||||
|
(gnc:register-option options new-option)))
|
||||||
|
)
|
||||||
|
;; Option to select Budget
|
||||||
|
(add-option (gnc:make-budget-option
|
||||||
|
gnc:pagename-general optname-budget
|
||||||
|
"a" (N_ "Budget")))
|
||||||
|
|
||||||
|
;; Display tab
|
||||||
|
(add-option
|
||||||
|
(gnc:make-simple-boolean-option
|
||||||
|
gnc:pagename-general
|
||||||
|
optname-running-sum
|
||||||
|
"b"
|
||||||
|
(N_ "Calculate as running sum?")
|
||||||
|
#t))
|
||||||
|
|
||||||
|
;; Option to select the accounts to that will be displayed
|
||||||
|
(add-option (gnc:make-account-list-option
|
||||||
|
gnc:pagename-accounts optname-accounts
|
||||||
|
"a" (N_ "Report on these accounts")
|
||||||
|
(lambda ()
|
||||||
|
(gnc:filter-accountlist-type
|
||||||
|
(list ACCT-TYPE-BANK ACCT-TYPE-ASSET ACCT-TYPE-LIABILITY)
|
||||||
|
(gnc-account-get-descendants-sorted (gnc-get-current-root-account))))
|
||||||
|
#f #t))
|
||||||
|
|
||||||
|
;; Set default page
|
||||||
|
(gnc:options-set-default-section options gnc:pagename-general)
|
||||||
|
|
||||||
|
;; Return options
|
||||||
|
options
|
||||||
|
))
|
||||||
|
|
||||||
|
|
||||||
|
;; For each period in the budget:
|
||||||
|
;; Retrive the budgeted running sum and actual running sum
|
||||||
|
;; for bac chart.
|
||||||
|
;;
|
||||||
|
;; Create bar and and vaules
|
||||||
|
;;
|
||||||
|
(define (gnc:chart-create-budget-actual budget acct running-sum)
|
||||||
|
(let* ((chart (gnc:make-html-barchart)))
|
||||||
|
|
||||||
|
;; Setup barchart
|
||||||
|
(gnc:html-barchart-set-title! chart (xaccAccountGetName acct))
|
||||||
|
(gnc:html-barchart-set-width! chart 700)
|
||||||
|
(gnc:html-barchart-set-height! chart 400)
|
||||||
|
(gnc:html-barchart-set-row-labels-rotated?! chart #t)
|
||||||
|
(gnc:html-barchart-set-col-labels!
|
||||||
|
chart (list (_ "Budget") (_ "Actual")))
|
||||||
|
(gnc:html-barchart-set-col-colors!
|
||||||
|
chart '("blue" "red"))
|
||||||
|
|
||||||
|
;; Prepair vars for running sums, and to loop though periods
|
||||||
|
(let* (
|
||||||
|
(num-periods (gnc-budget-get-num-periods budget))
|
||||||
|
(period 0)
|
||||||
|
(bgt-sum 0)
|
||||||
|
(act-sum 0)
|
||||||
|
(date 0)
|
||||||
|
(bgt-vals '())
|
||||||
|
(act-vals '())
|
||||||
|
(date-list '())
|
||||||
|
)
|
||||||
|
|
||||||
|
;; Loop though periods
|
||||||
|
(while (< period num-periods)
|
||||||
|
|
||||||
|
;; Add calc new running sum and add to list
|
||||||
|
(if running-sum
|
||||||
|
(set! bgt-sum (+ bgt-sum
|
||||||
|
(gnc-numeric-to-double
|
||||||
|
(gnc-budget-get-account-period-value budget acct period))))
|
||||||
|
|
||||||
|
(set! bgt-sum
|
||||||
|
(gnc-numeric-to-double
|
||||||
|
(gnc-budget-get-account-period-value budget acct period)))
|
||||||
|
)
|
||||||
|
(set! bgt-vals (append bgt-vals (list bgt-sum)))
|
||||||
|
|
||||||
|
(if running-sum
|
||||||
|
(set! act-sum (+ act-sum
|
||||||
|
(gnc-numeric-to-double
|
||||||
|
(gnc-budget-get-account-period-actual-value budget acct period))))
|
||||||
|
|
||||||
|
(set! act-sum
|
||||||
|
(gnc-numeric-to-double
|
||||||
|
(gnc-budget-get-account-period-actual-value budget acct period)))
|
||||||
|
)
|
||||||
|
(set! act-vals (append act-vals (list act-sum)))
|
||||||
|
|
||||||
|
;; Add period to date list
|
||||||
|
(set! date (gnc-budget-get-period-start-date budget period))
|
||||||
|
(set! date-list (append date-list (list (gnc-print-date date))))
|
||||||
|
|
||||||
|
(set! period (+ period 1))
|
||||||
|
)
|
||||||
|
|
||||||
|
;; Add data to chart
|
||||||
|
(gnc:html-barchart-append-column! chart bgt-vals)
|
||||||
|
(gnc:html-barchart-append-column! chart act-vals)
|
||||||
|
(gnc:html-barchart-set-row-labels! chart date-list)
|
||||||
|
(if running-sum
|
||||||
|
(gnc:html-barchart-set-subtitle! chart
|
||||||
|
(string-append "Bgt:" (number->string bgt-sum) "\n Act:" (number->string act-sum))))
|
||||||
|
)
|
||||||
|
|
||||||
|
;; Reutrn newly created chart
|
||||||
|
chart
|
||||||
|
))
|
||||||
|
|
||||||
|
|
||||||
|
;; This is the rendering function. It accepts a database of options
|
||||||
|
;; and generates an object of type <html-document>. See the file
|
||||||
|
;; report-html.txt for documentation; the file report-html.scm
|
||||||
|
;; includes all the relevant Scheme code. The option database passed
|
||||||
|
;; to the function is one created by the options-generator function
|
||||||
|
;; defined above.
|
||||||
|
(define (net-renderer report-obj)
|
||||||
|
|
||||||
|
;; This is a helper function for looking up option values.
|
||||||
|
(define (get-option section name)
|
||||||
|
(gnc:option-value
|
||||||
|
(gnc:lookup-option (gnc:report-options report-obj) section name)))
|
||||||
|
|
||||||
|
(let* (
|
||||||
|
(budget (get-option gnc:pagename-general optname-budget))
|
||||||
|
(running-sum (get-option gnc:pagename-general optname-running-sum))
|
||||||
|
(accounts (get-option gnc:pagename-accounts optname-accounts))
|
||||||
|
(report-title (get-option gnc:pagename-general
|
||||||
|
gnc:optname-reportname))
|
||||||
|
(document (gnc:make-html-document))
|
||||||
|
)
|
||||||
|
(if (null? accounts)
|
||||||
|
;; No accounts selected
|
||||||
|
(gnc:html-document-add-object!
|
||||||
|
document
|
||||||
|
(gnc:html-make-no-account-warning
|
||||||
|
report-title (gnc:report-id report-obj)))
|
||||||
|
|
||||||
|
;; Else create chart for each account
|
||||||
|
(for-each (lambda (acct)
|
||||||
|
(if (null? (gnc-account-get-descendants acct))
|
||||||
|
(gnc:html-document-add-object! document
|
||||||
|
(gnc:chart-create-budget-actual budget acct running-sum)))
|
||||||
|
)
|
||||||
|
accounts
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
document
|
||||||
|
))
|
||||||
|
|
||||||
|
;; Here we define the actual report
|
||||||
|
(gnc:define-report
|
||||||
|
'version 1
|
||||||
|
'name (N_ "Budget Barchart")
|
||||||
|
'menu-path (list gnc:menuname-asset-liability)
|
||||||
|
'options-generator (lambda () (options-generator))
|
||||||
|
'renderer (lambda (report-obj) (net-renderer report-obj)))
|
@ -75,6 +75,7 @@
|
|||||||
(use-modules (gnucash report general-ledger))
|
(use-modules (gnucash report general-ledger))
|
||||||
(use-modules (gnucash report cash-flow))
|
(use-modules (gnucash report cash-flow))
|
||||||
(use-modules (gnucash report budget))
|
(use-modules (gnucash report budget))
|
||||||
|
(use-modules (gnucash report budget-barchart))
|
||||||
(use-modules (gnucash report budget-flow))
|
(use-modules (gnucash report budget-flow))
|
||||||
(use-modules (gnucash report category-barchart))
|
(use-modules (gnucash report category-barchart))
|
||||||
(use-modules (gnucash report daily-reports))
|
(use-modules (gnucash report daily-reports))
|
||||||
|
Loading…
Reference in New Issue
Block a user