mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
David Montenegro's Balance Sheet + Equity Statement patch (#144243).
* Makefile.am: be sure to rebuild make-gnucash-patch and
make-gnucash-potfiles when the Makefile changes (which means the
PERL paths might have changed).
* src/scm/paths.scm: change the default config file to 1.9, so we
don't screw up users of 1.8.
* src/report/report-system/html-acct-table.scm:
Added file implementing gnc:html-acct-table utility
object for easier creation of HTML reports.
* src/report/standard-reports/balance-sheet.scm:
Updated to use the new gnc:html-acct-table object.
Added many new options, including report/account
form option.
* src/report/standard-reports/equity-statement.scm:
Created Statement of Owner's Equity.
(Unsure if correct exchange-fn's are being used.)
* src/report/report-system/commodity-utilities.scm:
* src/report/report-system/html-table.scm:
* src/report/report-system/html-utilities.scm:
* src/report/report-system/report-system.scm:
* src/report/report-system/report-utilities.scm:
miscellaneous small additions and/or fixes
Fixes #144243.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@10078 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
31
ChangeLog
31
ChangeLog
@@ -1,3 +1,34 @@
|
|||||||
|
2004-06-24 Derek Atkins <derek@ihtfp.com>
|
||||||
|
|
||||||
|
* Makefile.am: be sure to rebuild make-gnucash-patch and
|
||||||
|
make-gnucash-potfiles when the Makefile changes (which means the
|
||||||
|
PERL paths might have changed).
|
||||||
|
* src/scm/paths.scm: change the default config file to 1.9, so we
|
||||||
|
don't screw up users of 1.8.
|
||||||
|
|
||||||
|
2004-06-23 David Montenegro <sunrise2000@comcast.net>
|
||||||
|
|
||||||
|
* src/report/report-system/html-acct-table.scm:
|
||||||
|
Added file implementing gnc:html-acct-table utility
|
||||||
|
object for easier creation of HTML reports.
|
||||||
|
|
||||||
|
* src/report/standard-reports/balance-sheet.scm:
|
||||||
|
Updated to use the new gnc:html-acct-table object.
|
||||||
|
Added many new options, including report/account
|
||||||
|
form option.
|
||||||
|
|
||||||
|
* src/report/standard-reports/equity-statement.scm:
|
||||||
|
Created Statement of Owner's Equity.
|
||||||
|
(Unsure if correct exchange-fn's are being used.)
|
||||||
|
|
||||||
|
* src/report/report-system/commodity-utilities.scm:
|
||||||
|
* src/report/report-system/html-table.scm:
|
||||||
|
* src/report/report-system/html-utilities.scm:
|
||||||
|
* src/report/report-system/report-system.scm:
|
||||||
|
* src/report/report-system/report-utilities.scm:
|
||||||
|
miscellaneous small additions and/or fixes
|
||||||
|
Fixes #144243.
|
||||||
|
|
||||||
2004-06-18 Christian Stimming <stimming@tuhh.de>
|
2004-06-18 Christian Stimming <stimming@tuhh.de>
|
||||||
|
|
||||||
* src/scm/main-window.scm, src/scm/main.scm: Added example Menu
|
* src/scm/main-window.scm, src/scm/main.scm: Added example Menu
|
||||||
|
|||||||
@@ -63,14 +63,14 @@ CLEANFILES = gnucash-config
|
|||||||
## brackets here, instead of the usual @...@. This prevents autoconf
|
## brackets here, instead of the usual @...@. This prevents autoconf
|
||||||
## from substituting the values directly into the left-hand sides of
|
## from substituting the values directly into the left-hand sides of
|
||||||
## the sed substitutions.
|
## the sed substitutions.
|
||||||
make-gnucash-patch: make-gnucash-patch.in
|
make-gnucash-patch: make-gnucash-patch.in Makefile
|
||||||
rm -f $@.tmp
|
rm -f $@.tmp
|
||||||
sed < $< > $@.tmp \
|
sed < $< > $@.tmp \
|
||||||
-e 's:@-PERL-@:${PERL}:g'
|
-e 's:@-PERL-@:${PERL}:g'
|
||||||
chmod +x $@.tmp
|
chmod +x $@.tmp
|
||||||
mv $@.tmp $@
|
mv $@.tmp $@
|
||||||
|
|
||||||
make-gnucash-potfiles: make-gnucash-potfiles.in
|
make-gnucash-potfiles: make-gnucash-potfiles.in Makefile
|
||||||
rm -f $@.tmp
|
rm -f $@.tmp
|
||||||
sed < $< > $@.tmp \
|
sed < $< > $@.tmp \
|
||||||
-e 's:@-PERL-@:${PERL}:g'
|
-e 's:@-PERL-@:${PERL}:g'
|
||||||
|
|||||||
@@ -6,6 +6,13 @@
|
|||||||
# mailing list gnucash-patches@gnucash.org. For more info
|
# mailing list gnucash-patches@gnucash.org. For more info
|
||||||
# consult the README.
|
# consult the README.
|
||||||
#
|
#
|
||||||
|
# WARNING: By default, this script will checkout an entire
|
||||||
|
# up to date copy of the source tree in ../tmp/gnucash/.
|
||||||
|
#
|
||||||
|
# In order to prevent patches which reverse recent changes
|
||||||
|
# made in CVS, make sure to "cvs update" in both
|
||||||
|
# directories before running make-gnucash-patch.
|
||||||
|
#
|
||||||
# This script requires the programs 'makepatch', 'gzip',
|
# This script requires the programs 'makepatch', 'gzip',
|
||||||
# a 'diff' work-a-like, and 'uuencode'.
|
# a 'diff' work-a-like, and 'uuencode'.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ noinst_DATA = .scm-links
|
|||||||
gncscmdir = ${GNC_SHAREDIR}/scm
|
gncscmdir = ${GNC_SHAREDIR}/scm
|
||||||
gncscm_DATA = \
|
gncscm_DATA = \
|
||||||
commodity-utilities.scm \
|
commodity-utilities.scm \
|
||||||
|
html-acct-table.scm \
|
||||||
html-barchart.scm \
|
html-barchart.scm \
|
||||||
html-document.scm \
|
html-document.scm \
|
||||||
html-piechart.scm \
|
html-piechart.scm \
|
||||||
|
|||||||
@@ -21,6 +21,15 @@
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
|
||||||
|
(define (gnc:commodity-collector-contains-commodity? collector commodity)
|
||||||
|
(let ((ret #f))
|
||||||
|
(gnc:commodity-collector-map
|
||||||
|
collector
|
||||||
|
(lambda (comm amt)
|
||||||
|
(set! ret (or ret (gnc:commodity-equiv? comm commodity)))))
|
||||||
|
ret
|
||||||
|
))
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; Functions to get splits with interesting data from accounts.
|
;; Functions to get splits with interesting data from accounts.
|
||||||
|
|
||||||
|
|||||||
@@ -202,7 +202,7 @@ We have three different kinds of style control information available:
|
|||||||
|
|
||||||
- the HTML tag to render (specified by 'tag). Note that this
|
- the HTML tag to render (specified by 'tag). Note that this
|
||||||
may be different from the tag used to look up the style (the
|
may be different from the tag used to look up the style (the
|
||||||
one passed to html-markup).
|
one passed to html-markup). (See NB below.)
|
||||||
- Any attributes to be used inside the start tag (listed
|
- Any attributes to be used inside the start tag (listed
|
||||||
individually as 'attribute (list name value))
|
individually as 'attribute (list name value))
|
||||||
- The font face to use in the body ('font-face)
|
- The font face to use in the body ('font-face)
|
||||||
@@ -259,6 +259,7 @@ We have three different kinds of style control information available:
|
|||||||
;; object is rendered.
|
;; object is rendered.
|
||||||
(gnc:html-text-set-style! txt
|
(gnc:html-text-set-style! txt
|
||||||
"bigred" 'tag "" 'font-color "ff0000" 'font-size 7)
|
"bigred" 'tag "" 'font-color "ff0000" 'font-size 7)
|
||||||
|
;; ^^ NB: "bigred" is the tag. 'tag "" is the info in the style table.
|
||||||
|
|
||||||
(gnc:html-document-add-object! doc txt)
|
(gnc:html-document-add-object! doc txt)
|
||||||
(gnc:html-document-render doc))
|
(gnc:html-document-render doc))
|
||||||
|
|||||||
1102
src/report/report-system/html-acct-table.scm
Normal file
1102
src/report/report-system/html-acct-table.scm
Normal file
File diff suppressed because it is too large
Load Diff
@@ -3,6 +3,8 @@
|
|||||||
;; for simple style elements.
|
;; for simple style elements.
|
||||||
;; Copyright 2000 Bill Gribble <grib@gnumatic.com>
|
;; Copyright 2000 Bill Gribble <grib@gnumatic.com>
|
||||||
;;
|
;;
|
||||||
|
;; * 2004.06.18: David Montenegro, added gnc:html-table-get-cell
|
||||||
|
;;
|
||||||
;; This program is free software; you can redistribute it and/or
|
;; This program is free software; you can redistribute it and/or
|
||||||
;; modify it under the terms of the GNU General Public License as
|
;; modify it under the terms of the GNU General Public License as
|
||||||
;; published by the Free Software Foundation; either version 2 of
|
;; published by the Free Software Foundation; either version 2 of
|
||||||
@@ -21,6 +23,16 @@
|
|||||||
;; Boston, MA 02111-1307, USA gnu@gnu.org
|
;; Boston, MA 02111-1307, USA gnu@gnu.org
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;;
|
||||||
|
;; NB: In this code, "markup" and "/markup" *do not* refer to
|
||||||
|
;; style information. Rather, they let you override the tag
|
||||||
|
;; associated with an html-table row or cell. Style
|
||||||
|
;; information is stored in addition to this "markup" (in
|
||||||
|
;; an entirely different record field).
|
||||||
|
;;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(define <html-table>
|
(define <html-table>
|
||||||
(make-record-type "<html-table>"
|
(make-record-type "<html-table>"
|
||||||
'(col-headers
|
'(col-headers
|
||||||
@@ -125,6 +137,11 @@
|
|||||||
(let* ((retval '())
|
(let* ((retval '())
|
||||||
(push (lambda (l) (set! retval (cons l retval))))
|
(push (lambda (l) (set! retval (cons l retval))))
|
||||||
(style (gnc:html-table-cell-style cell)))
|
(style (gnc:html-table-cell-style cell)))
|
||||||
|
|
||||||
|
; ;; why dont colspans export??!
|
||||||
|
; (gnc:html-table-cell-set-style! cell "td"
|
||||||
|
; 'attribute (list "colspan"
|
||||||
|
; (or (gnc:html-table-cell-colspan cell) 1)))
|
||||||
(gnc:html-document-push-style doc style)
|
(gnc:html-document-push-style doc style)
|
||||||
(push (gnc:html-document-markup-start
|
(push (gnc:html-document-markup-start
|
||||||
doc (gnc:html-table-cell-tag cell)
|
doc (gnc:html-table-cell-tag cell)
|
||||||
@@ -384,6 +401,19 @@
|
|||||||
|
|
||||||
new-num-rows))
|
new-num-rows))
|
||||||
|
|
||||||
|
;; list-set! is 0-based...
|
||||||
|
;; (let ((a '(0 1 2))) (list-set! a 1 "x") a)
|
||||||
|
;; => (0 "x" 2)
|
||||||
|
(define (gnc:html-table-get-cell table row col)
|
||||||
|
(list-ref-safe (gnc:html-table-get-row table row) col))
|
||||||
|
|
||||||
|
(define (gnc:html-table-get-row table row)
|
||||||
|
(let* ((dd (gnc:html-table-data table))
|
||||||
|
(len (length dd))
|
||||||
|
)
|
||||||
|
(list-ref-safe dd (- (- len 1) row))
|
||||||
|
))
|
||||||
|
|
||||||
(define (gnc:html-table-set-cell! table row col . objects)
|
(define (gnc:html-table-set-cell! table row col . objects)
|
||||||
(let ((rowdata #f)
|
(let ((rowdata #f)
|
||||||
(row-loc #f)
|
(row-loc #f)
|
||||||
@@ -518,6 +548,26 @@
|
|||||||
remaining-elements)
|
remaining-elements)
|
||||||
#f))))
|
#f))))
|
||||||
|
|
||||||
|
;;
|
||||||
|
;; It would be nice to have table row/col/cell accessor functions in here.
|
||||||
|
;; It would also be nice to have table juxtaposition functions, too.
|
||||||
|
;; i.e., (gnc:html-table-nth-row table n)
|
||||||
|
;; (gnc:html-table-append-table-horizontal table add-table)
|
||||||
|
;; (An old merge-table used to exist inside balance-sheet.scm/GnuCash 1.8.9.)
|
||||||
|
;; Feel free to contribute! :-)
|
||||||
|
;;
|
||||||
|
|
||||||
|
;; This function was moved here from balance-sheet.scm.
|
||||||
|
(define (gnc:html-table-merge t1 t2)
|
||||||
|
(begin
|
||||||
|
(gnc:html-table-set-data! t1
|
||||||
|
(append
|
||||||
|
(gnc:html-table-data t2)
|
||||||
|
(gnc:html-table-data t1)))
|
||||||
|
(gnc:html-table-set-num-rows-internal!
|
||||||
|
t1 (+ (gnc:html-table-num-rows t1)
|
||||||
|
(gnc:html-table-num-rows t2)))))
|
||||||
|
|
||||||
(define (gnc:html-table-render table doc)
|
(define (gnc:html-table-render table doc)
|
||||||
(let* ((retval '())
|
(let* ((retval '())
|
||||||
(push (lambda (l) (set! retval (cons l retval)))))
|
(push (lambda (l) (set! retval (cons l retval)))))
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; html-utilities.scm: Useful functions when using the HTML generator.
|
;; html-utilities.scm: Useful functions when using the HTML generator.
|
||||||
;; Copyright 2001 Christian Stimming <stimming@tu-harburg.de>
|
|
||||||
;;
|
;;
|
||||||
|
;; Modified slightly by David Montenegro 2004.06.18.
|
||||||
|
;;
|
||||||
|
;; Copyright 2001 Christian Stimming <stimming@tu-harburg.de>
|
||||||
;; This program is free software; you can redistribute it and/or
|
;; This program is free software; you can redistribute it and/or
|
||||||
;; modify it under the terms of the GNU General Public License as
|
;; modify it under the terms of the GNU General Public License as
|
||||||
;; published by the Free Software Foundation; either version 2 of
|
;; published by the Free Software Foundation; either version 2 of
|
||||||
@@ -21,22 +23,23 @@
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
;; returns a list with n #f (empty cell) values
|
;; returns a list with n #f (empty cell) values
|
||||||
|
(define (gnc:html-make-empty-cell) #f)
|
||||||
(define (gnc:html-make-empty-cells n)
|
(define (gnc:html-make-empty-cells n)
|
||||||
(if (> n 0)
|
(if (> n 0)
|
||||||
(cons #f (gnc:html-make-empty-cells (- n 1)))
|
(cons #f (gnc:html-make-empty-cells (- n 1)))
|
||||||
'()))
|
(list)))
|
||||||
|
|
||||||
(define (register-guid type guid)
|
(define (gnc:register-guid type guid)
|
||||||
(gnc:html-build-url gnc:url-type-register (string-append type guid) #f))
|
(gnc:html-build-url gnc:url-type-register (string-append type guid) #f))
|
||||||
|
|
||||||
(define (gnc:account-anchor-text acct)
|
(define (gnc:account-anchor-text acct)
|
||||||
(register-guid "acct-guid=" (gnc:account-get-guid acct)))
|
(gnc:register-guid "acct-guid=" (gnc:account-get-guid acct)))
|
||||||
|
|
||||||
(define (gnc:split-anchor-text split)
|
(define (gnc:split-anchor-text split)
|
||||||
(register-guid "split-guid=" (gnc:split-get-guid split)))
|
(gnc:register-guid "split-guid=" (gnc:split-get-guid split)))
|
||||||
|
|
||||||
(define (gnc:transaction-anchor-text trans)
|
(define (gnc:transaction-anchor-text trans)
|
||||||
(register-guid "trans-guid=" (gnc:transaction-get-guid trans)))
|
(gnc:register-guid (gnc:transaction-get-guid trans)))
|
||||||
|
|
||||||
(define (gnc:report-anchor-text report-id)
|
(define (gnc:report-anchor-text report-id)
|
||||||
(gnc:html-build-url gnc:url-type-report
|
(gnc:html-build-url gnc:url-type-report
|
||||||
@@ -117,22 +120,32 @@
|
|||||||
(assign-colors (+ i 1)))))
|
(assign-colors (+ i 1)))))
|
||||||
(assign-colors 0))
|
(assign-colors 0))
|
||||||
|
|
||||||
;; Appends a horizontal ruler to a html-table with the specified width
|
;; Appends a horizontal ruler to a html-table with the specified
|
||||||
;; colspan.
|
;; colspan at, optionally, the specified column.
|
||||||
(define (gnc:html-table-append-ruler! table colspan)
|
(define (gnc:html-table-append-ruler/at! table colskip colspan)
|
||||||
|
(define empty-cell '())
|
||||||
(gnc:html-table-append-row!
|
(gnc:html-table-append-row!
|
||||||
table
|
table
|
||||||
(list
|
(append (make-list colskip empty-cell)
|
||||||
(gnc:make-html-table-cell/size
|
(list
|
||||||
1 colspan (gnc:make-html-text (gnc:html-markup-hr))))))
|
(gnc:make-html-table-cell/size
|
||||||
|
1 colspan (gnc:make-html-text (gnc:html-markup-hr)))))))
|
||||||
(define (gnc:html-table-append-ruler/markup! table markup colspan)
|
|
||||||
(gnc:html-table-append-row/markup!
|
(define (gnc:html-table-append-ruler/at/markup! table markup colskip colspan)
|
||||||
|
(define empty-cell "")
|
||||||
|
(gnc:html-table-append-row/markup!
|
||||||
table
|
table
|
||||||
markup
|
markup
|
||||||
(list
|
(append (make-list colskip empty-cell)
|
||||||
(gnc:make-html-table-cell/size
|
(list
|
||||||
1 colspan (gnc:make-html-text (gnc:html-markup-hr))))))
|
(gnc:make-html-table-cell/size
|
||||||
|
1 colspan (gnc:make-html-text (gnc:html-markup-hr)))))))
|
||||||
|
|
||||||
|
(define (gnc:html-table-append-ruler! table colspan)
|
||||||
|
(gnc:html-table-append-ruler/at! table 0 colspan))
|
||||||
|
|
||||||
|
(define (gnc:html-table-append-ruler/markup! table markup colspan)
|
||||||
|
(gnc:html-table-append-ruler/at/markup! table markup 0 colspan))
|
||||||
|
|
||||||
;; Creates a table cell with some text in it. The cell will be created
|
;; Creates a table cell with some text in it. The cell will be created
|
||||||
;; with the colspan 'colspan' (the rowspan==1), the content 'content'
|
;; with the colspan 'colspan' (the rowspan==1), the content 'content'
|
||||||
@@ -140,10 +153,12 @@
|
|||||||
;; string, or a <html-text> object. Returns a <html-table-cell>
|
;; string, or a <html-text> object. Returns a <html-table-cell>
|
||||||
;; object.
|
;; object.
|
||||||
(define (gnc:html-acct-table-cell colspan content boldface?)
|
(define (gnc:html-acct-table-cell colspan content boldface?)
|
||||||
|
;; instead of html-markup-b, just use the corresponding html-table-styles.
|
||||||
|
(define default-style "text-cell")
|
||||||
|
(define boldface-style "total-label-cell")
|
||||||
(gnc:make-html-table-cell/size/markup
|
(gnc:make-html-table-cell/size/markup
|
||||||
1 colspan
|
1 colspan
|
||||||
;; instead of html-markup-b, just use the right html-table-styles.
|
(if boldface? boldface-style default-style)
|
||||||
(if boldface? "total-label-cell" "text-cell")
|
|
||||||
content))
|
content))
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
@@ -194,8 +209,10 @@
|
|||||||
;; in the appropriate name column. my-commodity (a
|
;; in the appropriate name column. my-commodity (a
|
||||||
;; <gnc:commodity*>) is the "natural" balance of the current
|
;; <gnc:commodity*>) is the "natural" balance of the current
|
||||||
;; account. balance (a commodity-collector) is the balance to be
|
;; account. balance (a commodity-collector) is the balance to be
|
||||||
;; printed. If reverse-balance? == #t then the balance's signs get
|
;; printed. If reverse-balance? == #t then the balances' signs get
|
||||||
;; reversed.
|
;; reversed.
|
||||||
|
;; DM: If you trace this function through gnc:html-build-acct-table,
|
||||||
|
;; my-commodity always ends up being report-commodity.
|
||||||
(define (gnc:html-acct-table-comm-row-helper!
|
(define (gnc:html-acct-table-comm-row-helper!
|
||||||
table tree-depth report-commodity exchange-fn
|
table tree-depth report-commodity exchange-fn
|
||||||
current-depth my-name my-commodity balance
|
current-depth my-name my-commodity balance
|
||||||
@@ -232,12 +249,14 @@
|
|||||||
"number-cell"
|
"number-cell"
|
||||||
(gnc:make-html-text (gnc:html-markup-b domestic-balance)))))
|
(gnc:make-html-text (gnc:html-markup-b domestic-balance)))))
|
||||||
(list
|
(list
|
||||||
(gnc:make-html-table-cell/markup
|
(and foreign-balance
|
||||||
"number-cell"
|
(gnc:make-html-table-cell/markup
|
||||||
foreign-balance)
|
"number-cell"
|
||||||
(gnc:make-html-table-cell/markup
|
foreign-balance))
|
||||||
"number-cell"
|
(and domestic-balance
|
||||||
domestic-balance)))
|
(gnc:make-html-table-cell/markup
|
||||||
|
"number-cell"
|
||||||
|
domestic-balance))))
|
||||||
(gnc:html-make-empty-cells (* 2 (- current-depth
|
(gnc:html-make-empty-cells (* 2 (- current-depth
|
||||||
(if group-header-line? 0 1)))))))
|
(if group-header-line? 0 1)))))))
|
||||||
|
|
||||||
@@ -288,7 +307,7 @@
|
|||||||
(gnc:make-gnc-monetary curr val))))
|
(gnc:make-gnc-monetary curr val))))
|
||||||
(commodity-row-helper!
|
(commodity-row-helper!
|
||||||
;; print no account name
|
;; print no account name
|
||||||
(car (gnc:html-make-empty-cells 1))
|
(gnc:html-make-empty-cell)
|
||||||
;; print the account balance in the respective
|
;; print the account balance in the respective
|
||||||
;; commodity
|
;; commodity
|
||||||
bal
|
bal
|
||||||
@@ -375,6 +394,37 @@
|
|||||||
show-total? get-total-fn
|
show-total? get-total-fn
|
||||||
total-name group-types? show-parent-balance? show-parent-total?
|
total-name group-types? show-parent-balance? show-parent-total?
|
||||||
show-other-curr? report-commodity exchange-fn show-zero-entries?)
|
show-other-curr? report-commodity exchange-fn show-zero-entries?)
|
||||||
|
;; Select, here, which version of gnc:html-build-acct-table you want
|
||||||
|
;; to use by default.
|
||||||
|
(define fn-version 'first)
|
||||||
|
(if (equal? fn-version 'second)
|
||||||
|
(gnc:second-html-build-acct-table
|
||||||
|
start-date end-date
|
||||||
|
tree-depth show-subaccts? accounts
|
||||||
|
start-percent delta-percent
|
||||||
|
show-col-headers?
|
||||||
|
show-total? get-total-fn
|
||||||
|
total-name group-types? show-parent-balance? show-parent-total?
|
||||||
|
show-other-curr? report-commodity exchange-fn show-zero-entries?)
|
||||||
|
(gnc:first-html-build-acct-table
|
||||||
|
start-date end-date
|
||||||
|
tree-depth show-subaccts? accounts
|
||||||
|
start-percent delta-percent
|
||||||
|
show-col-headers?
|
||||||
|
show-total? get-total-fn
|
||||||
|
total-name group-types? show-parent-balance? show-parent-total?
|
||||||
|
show-other-curr? report-commodity exchange-fn show-zero-entries?)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(define (gnc:first-html-build-acct-table
|
||||||
|
start-date end-date
|
||||||
|
tree-depth show-subaccts? accounts
|
||||||
|
start-percent delta-percent
|
||||||
|
show-col-headers?
|
||||||
|
show-total? get-total-fn
|
||||||
|
total-name group-types? show-parent-balance? show-parent-total?
|
||||||
|
show-other-curr? report-commodity exchange-fn show-zero-entries?)
|
||||||
(let ((table (gnc:make-html-table))
|
(let ((table (gnc:make-html-table))
|
||||||
(work-to-do 0)
|
(work-to-do 0)
|
||||||
(work-done 0)
|
(work-done 0)
|
||||||
@@ -410,7 +460,7 @@
|
|||||||
this-collector x )))
|
this-collector x )))
|
||||||
(gnc:group-map-all-accounts
|
(gnc:group-map-all-accounts
|
||||||
(lambda (a)
|
(lambda (a)
|
||||||
;; Important: Calculate the balance if and only of the
|
;; Important: Calculate the balance if and only if the
|
||||||
;; account a is shown, i.e. (use-acct? a) == #t.
|
;; account a is shown, i.e. (use-acct? a) == #t.
|
||||||
(and (use-acct? a)
|
(and (use-acct? a)
|
||||||
(my-get-balance-nosub a)))
|
(my-get-balance-nosub a)))
|
||||||
@@ -659,7 +709,7 @@
|
|||||||
|
|
||||||
(gnc:html-table-set-style!
|
(gnc:html-table-set-style!
|
||||||
table "th"
|
table "th"
|
||||||
'attribute '("align" "right")
|
'attribute '("align" "center")
|
||||||
'attribute '("valign" "top"))
|
'attribute '("valign" "top"))
|
||||||
|
|
||||||
;; set some column headers
|
;; set some column headers
|
||||||
|
|||||||
@@ -48,7 +48,7 @@
|
|||||||
(export gnc:case-exchange-time-fn)
|
(export gnc:case-exchange-time-fn)
|
||||||
(export gnc:sum-collector-commodity)
|
(export gnc:sum-collector-commodity)
|
||||||
(export gnc:sum-collector-stocks)
|
(export gnc:sum-collector-stocks)
|
||||||
|
(export gnc:commodity-collector-contains-commodity?)
|
||||||
|
|
||||||
;; options-utilities.scm
|
;; options-utilities.scm
|
||||||
|
|
||||||
@@ -84,7 +84,8 @@
|
|||||||
(export gnc:html-acct-table-cell)
|
(export gnc:html-acct-table-cell)
|
||||||
(export gnc:html-acct-table-row-helper! )
|
(export gnc:html-acct-table-row-helper! )
|
||||||
(export gnc:html-acct-table-comm-row-helper!)
|
(export gnc:html-acct-table-comm-row-helper!)
|
||||||
(export gnc:html-build-acct-table )
|
(export gnc:html-build-acct-table)
|
||||||
|
(export gnc:first-html-build-acct-table)
|
||||||
(export gnc:html-make-exchangerates)
|
(export gnc:html-make-exchangerates)
|
||||||
(export gnc:html-make-no-account-warning)
|
(export gnc:html-make-no-account-warning)
|
||||||
(export gnc:html-make-empty-data-warning)
|
(export gnc:html-make-empty-data-warning)
|
||||||
@@ -401,6 +402,43 @@
|
|||||||
(export gnc:html-style-sheet-find)
|
(export gnc:html-style-sheet-find)
|
||||||
(export gnc:html-style-sheet-remove)
|
(export gnc:html-style-sheet-remove)
|
||||||
|
|
||||||
|
;; html-acct-table.scm
|
||||||
|
|
||||||
|
(export gnc:colspans-are-working-right)
|
||||||
|
(export <html-acct-table>)
|
||||||
|
(export gnc:html-acct-table?)
|
||||||
|
(export gnc:_make-html-acct-table_)
|
||||||
|
(export gnc:make-html-acct-table)
|
||||||
|
(export gnc:make-html-acct-table/env)
|
||||||
|
(export gnc:make-html-acct-table/env/accts)
|
||||||
|
(export gnc:_html-acct-table-matrix_)
|
||||||
|
(export gnc:_html-acct-table-set-matrix!_)
|
||||||
|
(export gnc:_html-acct-table-env_)
|
||||||
|
(export gnc:_html-acct-table-set-env!_)
|
||||||
|
(export gnc:html-acct-table-add-accounts!)
|
||||||
|
(export gnc:html-acct-table-num-rows)
|
||||||
|
(export gnc:html-acct-table-num-cols)
|
||||||
|
(export gnc:html-acct-table-get-row)
|
||||||
|
(export gnc:html-acct-table-get-cell)
|
||||||
|
(export gnc:html-acct-table-set-cell!)
|
||||||
|
(export gnc:html-acct-table-get-row-env)
|
||||||
|
(export gnc:html-acct-table-set-row-env!)
|
||||||
|
(export gnc:html-acct-table-append-row)
|
||||||
|
(export gnc:html-acct-table-prepend-row!)
|
||||||
|
(export gnc:html-acct-table-append-col)
|
||||||
|
(export gnc:html-acct-table-prepend-col!)
|
||||||
|
(export gnc:html-acct-table-remove-last-row!)
|
||||||
|
(export gnc:html-acct-table-render)
|
||||||
|
(export gnc:account-code-less-p)
|
||||||
|
(export gnc:account-name-less-p)
|
||||||
|
(export gnc:account-path-less-p)
|
||||||
|
(export gnc:identity)
|
||||||
|
(export gnc:html-table-add-labeled-amount-line!)
|
||||||
|
(export gnc:html-table-add-account-balances)
|
||||||
|
(export gnc:second-html-build-acct-table)
|
||||||
|
(export gnc:commodity-table)
|
||||||
|
(export gnc:uniform-commodity?)
|
||||||
|
|
||||||
;; html-table.scm
|
;; html-table.scm
|
||||||
|
|
||||||
(export <html-table>)
|
(export <html-table>)
|
||||||
@@ -465,9 +503,11 @@
|
|||||||
(export gnc:html-table-append-row!)
|
(export gnc:html-table-append-row!)
|
||||||
(export gnc:html-table-remove-last-row!)
|
(export gnc:html-table-remove-last-row!)
|
||||||
(export gnc:html-table-prepend-row!)
|
(export gnc:html-table-prepend-row!)
|
||||||
|
(export gnc:html-table-get-cell)
|
||||||
(export gnc:html-table-set-cell!)
|
(export gnc:html-table-set-cell!)
|
||||||
(export gnc:html-table-append-column!)
|
(export gnc:html-table-append-column!)
|
||||||
(export gnc:html-table-prepend-column!)
|
(export gnc:html-table-prepend-column!)
|
||||||
|
(export gnc:html-table-merge)
|
||||||
(export gnc:html-table-render)
|
(export gnc:html-table-render)
|
||||||
|
|
||||||
;; html-text.scm
|
;; html-text.scm
|
||||||
@@ -530,6 +570,7 @@
|
|||||||
(export gnc:make-value-collector)
|
(export gnc:make-value-collector)
|
||||||
(export gnc:make-numeric-collector)
|
(export gnc:make-numeric-collector)
|
||||||
(export gnc:make-commodity-collector)
|
(export gnc:make-commodity-collector)
|
||||||
|
(export gnc:commodity-collector-commodity-count)
|
||||||
(export gnc:account-get-balance-at-date)
|
(export gnc:account-get-balance-at-date)
|
||||||
(export gnc:account-get-comm-balance-at-date)
|
(export gnc:account-get-comm-balance-at-date)
|
||||||
(export gnc:accounts-get-balance-helper)
|
(export gnc:accounts-get-balance-helper)
|
||||||
@@ -549,6 +590,7 @@
|
|||||||
(export gnc:report-percent-done)
|
(export gnc:report-percent-done)
|
||||||
(export gnc:report-finished)
|
(export gnc:report-finished)
|
||||||
(export gnc:accounts-count-splits)
|
(export gnc:accounts-count-splits)
|
||||||
|
(export gnc:commodity-collector-allzero?)
|
||||||
|
|
||||||
(load-from-path "commodity-utilities.scm")
|
(load-from-path "commodity-utilities.scm")
|
||||||
(load-from-path "html-barchart.scm")
|
(load-from-path "html-barchart.scm")
|
||||||
@@ -560,6 +602,7 @@
|
|||||||
(load-from-path "html-style-sheet.scm")
|
(load-from-path "html-style-sheet.scm")
|
||||||
(load-from-path "html-table.scm")
|
(load-from-path "html-table.scm")
|
||||||
(load-from-path "html-text.scm")
|
(load-from-path "html-text.scm")
|
||||||
|
(load-from-path "html-acct-table.scm")
|
||||||
(load-from-path "html-utilities.scm")
|
(load-from-path "html-utilities.scm")
|
||||||
(load-from-path "options-utilities.scm")
|
(load-from-path "options-utilities.scm")
|
||||||
(load-from-path "report-utilities.scm")
|
(load-from-path "report-utilities.scm")
|
||||||
|
|||||||
@@ -474,6 +474,17 @@
|
|||||||
(define (gnc:commodity-collector-list collector)
|
(define (gnc:commodity-collector-list collector)
|
||||||
(collector 'list #f #f))
|
(collector 'list #f #f))
|
||||||
|
|
||||||
|
;; Returns the number of commodities in a commodity-collector.
|
||||||
|
;; (If this were implemented as a record, I would be able to
|
||||||
|
;; just (length ...) the alist, but....)
|
||||||
|
(define (gnc:commodity-collector-commodity-count collector)
|
||||||
|
(let ((commodities 0))
|
||||||
|
(gnc:commodity-collector-map
|
||||||
|
collector
|
||||||
|
(lambda (comm amt) (set! commodities (+ commodities 1))))
|
||||||
|
commodities
|
||||||
|
))
|
||||||
|
|
||||||
;; Returns zero if all entries in this collector are zero.
|
;; Returns zero if all entries in this collector are zero.
|
||||||
(define (gnc:commodity-collector-allzero? collector)
|
(define (gnc:commodity-collector-allzero? collector)
|
||||||
(let ((result #t))
|
(let ((result #t))
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ gncscmmod_DATA = \
|
|||||||
cash-flow.scm \
|
cash-flow.scm \
|
||||||
category-barchart.scm \
|
category-barchart.scm \
|
||||||
daily-reports.scm \
|
daily-reports.scm \
|
||||||
|
equity-statement.scm \
|
||||||
net-barchart.scm \
|
net-barchart.scm \
|
||||||
pnl.scm \
|
pnl.scm \
|
||||||
portfolio.scm \
|
portfolio.scm \
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
650
src/report/standard-reports/equity-statement.scm
Normal file
650
src/report/standard-reports/equity-statement.scm
Normal file
@@ -0,0 +1,650 @@
|
|||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; equity-statement.scm: statement of owner's equity (net worth)
|
||||||
|
;;
|
||||||
|
;; By David Montenegro 2004.06.23 <sunrise2000@comcast.net>
|
||||||
|
;;
|
||||||
|
;; * Based on balance-sheet.scm by Robert Merkel <rgmerk@mira.net>
|
||||||
|
;;
|
||||||
|
;; * BUGS:
|
||||||
|
;;
|
||||||
|
;; The multicurrency support has NOT been tested and IS ALPHA. I
|
||||||
|
;; really don't if I used the correct exchange functions. Search
|
||||||
|
;; code for regexp "*exchange-fn".
|
||||||
|
;;
|
||||||
|
;; I have also made the educated assumption <grin> that a decrease
|
||||||
|
;; in the value of a liability or equity also represents an
|
||||||
|
;; unrealized loss. I *think* that is right, but am not sure.
|
||||||
|
;;
|
||||||
|
;; This code makes the assumption that you want your equity
|
||||||
|
;; statement to no more than daily resolution.
|
||||||
|
;;
|
||||||
|
;; The Accounts option panel needs a way to select (and select by
|
||||||
|
;; default) capital and draw accounts.
|
||||||
|
;;
|
||||||
|
;; The variables in this code could use more consistent naming.
|
||||||
|
;;
|
||||||
|
;; See also any "FIXME"s in the code.
|
||||||
|
;;
|
||||||
|
;; 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
|
||||||
|
;; 59 Temple Place - Suite 330 Fax: +1-617-542-2652
|
||||||
|
;; Boston, MA 02111-1307, USA gnu@gnu.org
|
||||||
|
;;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
(define-module (gnucash report equity-statement))
|
||||||
|
(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_ "Equity Statement"))
|
||||||
|
|
||||||
|
;; define all option's names and help text so that they are properly
|
||||||
|
;; defined in *one* place.
|
||||||
|
(define optname-report-title (N_ "Report Title"))
|
||||||
|
(define opthelp-report-title (N_ "Title for this report"))
|
||||||
|
|
||||||
|
(define optname-party-name (N_ "Company name"))
|
||||||
|
(define opthelp-party-name (N_ "Name of company/individual"))
|
||||||
|
|
||||||
|
(define optname-start-date (N_ "Equity Statement Start Date"))
|
||||||
|
(define opthelp-start-date
|
||||||
|
(N_ "Start of the period this equity statement will cover"))
|
||||||
|
(define optname-end-date (N_ "Equity Statement End Date"))
|
||||||
|
(define opthelp-end-date
|
||||||
|
(N_ "End of the period this equity statement will cover"))
|
||||||
|
|
||||||
|
(define optname-accounts (N_ "Accounts to include"))
|
||||||
|
(define opthelp-accounts
|
||||||
|
(N_ "Report only on these accounts"))
|
||||||
|
|
||||||
|
(define optname-use-rules (N_ "Show accounting-style rules"))
|
||||||
|
(define opthelp-use-rules
|
||||||
|
(N_ "Use rules beneath columns of added numbers like accountants do"))
|
||||||
|
|
||||||
|
(define pagename-commodities (N_ "Commodities"))
|
||||||
|
(define optname-report-commodity (N_ "Report's currency"))
|
||||||
|
(define optname-price-source (N_ "Price Source"))
|
||||||
|
(define optname-show-foreign (N_ "Show Foreign Currencies"))
|
||||||
|
(define opthelp-show-foreign
|
||||||
|
(N_ "Display any foreign currency amount in an account"))
|
||||||
|
(define optname-show-rates (N_ "Show Exchange Rates"))
|
||||||
|
(define opthelp-show-rates (N_ "Show the exchange rates used"))
|
||||||
|
|
||||||
|
;; This calculates the increase in the balance(s) of all accounts in
|
||||||
|
;; <accountlist> over the period from <start-date> to <end-date>.
|
||||||
|
;; Returns a commodity collector.
|
||||||
|
;;
|
||||||
|
;; Note: There is both a gnc:account-get-comm-balance-interval and
|
||||||
|
;; gnc:group-get-comm-balance-interval which could replace this
|
||||||
|
;; function....
|
||||||
|
;;
|
||||||
|
(define (accountlist-get-comm-balance-at-date accountlist start-date end-date)
|
||||||
|
;; (for-each (lambda (x) (display x))
|
||||||
|
;; (list "computing from: " (gnc:print-date start-date) " to "
|
||||||
|
;; (gnc:print-date end-date) "\n"))
|
||||||
|
(let ((collector (gnc:make-commodity-collector)))
|
||||||
|
(for-each (lambda (account)
|
||||||
|
(let* (
|
||||||
|
(start-balance
|
||||||
|
(gnc:account-get-comm-balance-at-date
|
||||||
|
account start-date #f))
|
||||||
|
(sb (cadr (start-balance
|
||||||
|
'getpair
|
||||||
|
(gnc:account-get-commodity account)
|
||||||
|
#f)))
|
||||||
|
(end-balance
|
||||||
|
(gnc:account-get-comm-balance-at-date
|
||||||
|
account end-date #f))
|
||||||
|
(eb (cadr (end-balance
|
||||||
|
'getpair
|
||||||
|
(gnc:account-get-commodity account)
|
||||||
|
#f)))
|
||||||
|
)
|
||||||
|
;; (for-each (lambda (x) (display x))
|
||||||
|
;; (list "Start balance: " sb " : "
|
||||||
|
;; (gnc:account-get-name account) " : end balance: "
|
||||||
|
;; eb "\n"))
|
||||||
|
(collector 'merge end-balance #f)
|
||||||
|
(collector 'minusmerge start-balance #f)
|
||||||
|
))
|
||||||
|
accountlist)
|
||||||
|
collector))
|
||||||
|
|
||||||
|
;; options generator
|
||||||
|
(define (equity-statement-options-generator)
|
||||||
|
(let* ((options (gnc:new-options))
|
||||||
|
(add-option
|
||||||
|
(lambda (new-option)
|
||||||
|
(gnc:register-option options new-option))))
|
||||||
|
|
||||||
|
(add-option
|
||||||
|
(gnc:make-string-option
|
||||||
|
(N_ "General") optname-report-title
|
||||||
|
"a" opthelp-report-title reportname))
|
||||||
|
(add-option
|
||||||
|
(gnc:make-string-option
|
||||||
|
(N_ "General") optname-party-name
|
||||||
|
"b" opthelp-party-name (N_ "")))
|
||||||
|
;; this should default to company name in (gnc:get-current-book)
|
||||||
|
;; does anyone know the function to get the company name??
|
||||||
|
;; (GnuCash is *so* well documented... sigh)
|
||||||
|
|
||||||
|
;; date at which to report balance
|
||||||
|
(gnc:options-add-date-interval!
|
||||||
|
options gnc:pagename-general
|
||||||
|
optname-start-date optname-end-date "c")
|
||||||
|
|
||||||
|
;; accounts to work on
|
||||||
|
(add-option
|
||||||
|
(gnc:make-account-list-option
|
||||||
|
gnc:pagename-accounts optname-accounts
|
||||||
|
"a"
|
||||||
|
opthelp-accounts
|
||||||
|
(lambda ()
|
||||||
|
(gnc:filter-accountlist-type
|
||||||
|
'(bank cash credit asset liability stock mutual-fund currency
|
||||||
|
payable receivable equity income expense)
|
||||||
|
(gnc:group-get-subaccounts (gnc:get-current-group))))
|
||||||
|
#f #t))
|
||||||
|
|
||||||
|
;; all about currencies
|
||||||
|
(gnc:options-add-currency!
|
||||||
|
options pagename-commodities
|
||||||
|
optname-report-commodity "a")
|
||||||
|
|
||||||
|
(gnc:options-add-price-source!
|
||||||
|
options pagename-commodities
|
||||||
|
optname-price-source "b" 'weighted-average)
|
||||||
|
|
||||||
|
(add-option
|
||||||
|
(gnc:make-simple-boolean-option
|
||||||
|
pagename-commodities optname-show-foreign
|
||||||
|
"c" opthelp-show-foreign #t))
|
||||||
|
|
||||||
|
(add-option
|
||||||
|
(gnc:make-simple-boolean-option
|
||||||
|
pagename-commodities optname-show-rates
|
||||||
|
"d" opthelp-show-rates #f))
|
||||||
|
|
||||||
|
;; some detailed formatting options
|
||||||
|
(add-option
|
||||||
|
(gnc:make-simple-boolean-option
|
||||||
|
gnc:pagename-display optname-use-rules
|
||||||
|
"f" opthelp-use-rules #f))
|
||||||
|
|
||||||
|
;; Set the accounts page as default option tab
|
||||||
|
(gnc:options-set-default-section options gnc:pagename-accounts)
|
||||||
|
|
||||||
|
options))
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; equity-statement-renderer
|
||||||
|
;; set up the document and add the table
|
||||||
|
;; then then return the document or, if
|
||||||
|
;; requested, export it to a file
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
(define (equity-statement-renderer report-obj choice filename)
|
||||||
|
(define (get-option pagename optname)
|
||||||
|
(gnc:option-value
|
||||||
|
(gnc:lookup-option
|
||||||
|
(gnc:report-options report-obj) pagename optname)))
|
||||||
|
(define forever-ago (cons 0 0))
|
||||||
|
|
||||||
|
(gnc:report-starting reportname)
|
||||||
|
|
||||||
|
;; get all option's values
|
||||||
|
(let* (
|
||||||
|
(report-title (get-option gnc:pagename-general optname-report-title))
|
||||||
|
(company-name (get-option gnc:pagename-general optname-party-name))
|
||||||
|
;; this code makes the assumption that you want your equity
|
||||||
|
;; statement to no more than daily resolution
|
||||||
|
(start-date-printable (gnc:date-option-absolute-time
|
||||||
|
(get-option gnc:pagename-general
|
||||||
|
optname-start-date)))
|
||||||
|
(start-date-tp (gnc:timepair-end-day-time
|
||||||
|
(gnc:timepair-previous-day start-date-printable)))
|
||||||
|
(end-date-tp (gnc:timepair-end-day-time
|
||||||
|
(gnc:date-option-absolute-time
|
||||||
|
(get-option gnc:pagename-general
|
||||||
|
optname-end-date))))
|
||||||
|
;;(end-date-printable (gnc:date-option-absolute-time
|
||||||
|
;; (get-option gnc:pagename-general
|
||||||
|
;; optname-end-date)))
|
||||||
|
;; why dont we use this? why use any -printable at all?
|
||||||
|
(accounts (get-option gnc:pagename-accounts
|
||||||
|
optname-accounts))
|
||||||
|
(report-commodity (get-option pagename-commodities
|
||||||
|
optname-report-commodity))
|
||||||
|
(price-source (get-option pagename-commodities
|
||||||
|
optname-price-source))
|
||||||
|
(show-fcur? (get-option pagename-commodities
|
||||||
|
optname-show-foreign))
|
||||||
|
(show-rates? (get-option pagename-commodities
|
||||||
|
optname-show-rates))
|
||||||
|
(use-rules? (get-option gnc:pagename-display
|
||||||
|
optname-use-rules))
|
||||||
|
|
||||||
|
;; decompose the account list
|
||||||
|
(split-up-accounts (gnc:decompose-accountlist accounts))
|
||||||
|
(asset-accounts
|
||||||
|
(assoc-ref split-up-accounts 'asset))
|
||||||
|
(liability-accounts
|
||||||
|
(assoc-ref split-up-accounts 'liability))
|
||||||
|
(income-expense-accounts
|
||||||
|
(append (assoc-ref split-up-accounts 'income)
|
||||||
|
(assoc-ref split-up-accounts 'expense)))
|
||||||
|
(equity-accounts
|
||||||
|
(assoc-ref split-up-accounts 'equity))
|
||||||
|
;; N.B.: equity-accounts will also contain drawing accounts
|
||||||
|
;; these must still be split-out and itemized separately
|
||||||
|
(capital-accounts #f)
|
||||||
|
(drawing-accounts #f)
|
||||||
|
|
||||||
|
(doc (gnc:make-html-document))
|
||||||
|
;; exchange rates calculation parameters
|
||||||
|
(start-exchange-fn
|
||||||
|
(gnc:case-exchange-fn
|
||||||
|
price-source report-commodity start-date-tp))
|
||||||
|
(end-exchange-fn
|
||||||
|
(gnc:case-exchange-fn
|
||||||
|
price-source report-commodity end-date-tp))
|
||||||
|
)
|
||||||
|
|
||||||
|
(gnc:html-document-set-title!
|
||||||
|
doc (sprintf #f
|
||||||
|
(string-append "%s %s "
|
||||||
|
(N_ "For Period")
|
||||||
|
" %s "
|
||||||
|
(N_ "to")
|
||||||
|
" %s")
|
||||||
|
report-title company-name
|
||||||
|
(gnc:print-date start-date-printable)
|
||||||
|
(gnc:print-date end-date-tp)))
|
||||||
|
|
||||||
|
(if (null? accounts)
|
||||||
|
|
||||||
|
;; error condition: no accounts specified is this *really*
|
||||||
|
;; necessary?? i'd be fine with an all-zero income statement
|
||||||
|
;; that would, technically, be correct....
|
||||||
|
(gnc:html-document-add-object!
|
||||||
|
doc
|
||||||
|
(gnc:html-make-no-account-warning
|
||||||
|
reportname (gnc:report-id report-obj)))
|
||||||
|
|
||||||
|
;; Get all the balances for each account group.
|
||||||
|
(let* ((book-balance #f) ;; assets - liabilities - equity, norm 0
|
||||||
|
(start-asset-balance #f)
|
||||||
|
(end-asset-balance #f)
|
||||||
|
(neg-start-liability-balance #f) ;; credit balances are < 0
|
||||||
|
(neg-end-liability-balance #f)
|
||||||
|
(neg-pre-start-retained-earnings #f)
|
||||||
|
(neg-pre-end-retained-earnings #f)
|
||||||
|
(neg-net-income #f)
|
||||||
|
(net-income #f)
|
||||||
|
|
||||||
|
(neg-start-equity-balance #f)
|
||||||
|
(neg-end-equity-balance #f)
|
||||||
|
|
||||||
|
(start-capital-balance #f)
|
||||||
|
(end-capital-balance #f)
|
||||||
|
(start-drawing-balance #f)
|
||||||
|
(end-drawing-balance #f)
|
||||||
|
|
||||||
|
(start-book-balance #f)
|
||||||
|
(end-book-balance #f)
|
||||||
|
|
||||||
|
(start-unrealized-gains #f)
|
||||||
|
(end-unrealized-gains #f)
|
||||||
|
(net-unrealized-gains #f)
|
||||||
|
|
||||||
|
(start-total-equity #f)
|
||||||
|
(end-total-equity #f)
|
||||||
|
|
||||||
|
(investments #f)
|
||||||
|
(draws #f)
|
||||||
|
|
||||||
|
(capital-increase #f)
|
||||||
|
|
||||||
|
;; Create the account table below where its
|
||||||
|
;; percentage time can be tracked.
|
||||||
|
(build-table (gnc:make-html-table)) ;; gnc:html-table
|
||||||
|
(get-start-balance-fn
|
||||||
|
(lambda (account)
|
||||||
|
(gnc:account-get-comm-balance-at-date
|
||||||
|
account start-date-tp #f)))
|
||||||
|
(get-end-balance-fn
|
||||||
|
(lambda (account)
|
||||||
|
(gnc:account-get-comm-balance-at-date
|
||||||
|
account end-date-tp #f)))
|
||||||
|
(terse-period? #t)
|
||||||
|
(period-for (if terse-period?
|
||||||
|
(string-append " " (N_ "for Period"))
|
||||||
|
(string-append
|
||||||
|
", "
|
||||||
|
(gnc:print-date start-date-printable) " "
|
||||||
|
(N_ "to") " "
|
||||||
|
(gnc:print-date end-date-tp)
|
||||||
|
)))
|
||||||
|
)
|
||||||
|
|
||||||
|
;; a helper to add a line to our report
|
||||||
|
(define (report-line
|
||||||
|
table pos-label neg-label amount col
|
||||||
|
exchange-fn rule? row-style)
|
||||||
|
(let* ((neg? (and amount
|
||||||
|
(gnc:numeric-negative-p
|
||||||
|
(gnc:gnc-monetary-amount
|
||||||
|
(gnc:sum-collector-commodity
|
||||||
|
amount report-commodity exchange-fn)))))
|
||||||
|
(label (if neg? (or neg-label pos-label) pos-label))
|
||||||
|
(pos-bal (if neg?
|
||||||
|
(let ((bal (gnc:make-commodity-collector)))
|
||||||
|
(bal 'minusmerge amount #f)
|
||||||
|
bal)
|
||||||
|
amount))
|
||||||
|
(bal (gnc:sum-collector-commodity
|
||||||
|
pos-bal report-commodity exchange-fn))
|
||||||
|
(balance
|
||||||
|
(or (and (gnc:uniform-commodity? bal report-commodity) bal)
|
||||||
|
(and show-fucr?
|
||||||
|
(gnc:commodity-table
|
||||||
|
bal report-commodity exchange-fn))
|
||||||
|
bal
|
||||||
|
))
|
||||||
|
(column (or col 0))
|
||||||
|
)
|
||||||
|
(gnc:html-table-add-labeled-amount-line!
|
||||||
|
table 3 row-style rule?
|
||||||
|
label 0 1 "text-cell"
|
||||||
|
bal (+ col 1) 1 "number-cell")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
;; sum any unrealized gains
|
||||||
|
;;
|
||||||
|
;; Hm... unrealized gains.... This is when you purchase
|
||||||
|
;; something and its value increases/decreases (prior to
|
||||||
|
;; your selling it) and you have to reflect that on your
|
||||||
|
;; balance sheet.
|
||||||
|
;;
|
||||||
|
;; I *think* a decrease in the value of a liability or
|
||||||
|
;; equity constitutes an unrealized loss. I'm unsure about
|
||||||
|
;; that though....
|
||||||
|
;;
|
||||||
|
(define (unrealized-gains-at-date book-balance exchange-fn date-tp)
|
||||||
|
(let* ((unrealized-gain-collector (gnc:make-commodity-collector))
|
||||||
|
(weighted-fn
|
||||||
|
(gnc:case-exchange-fn 'weighted-average
|
||||||
|
report-commodity date-tp))
|
||||||
|
|
||||||
|
(value
|
||||||
|
(gnc:gnc-monetary-amount
|
||||||
|
(gnc:sum-collector-commodity book-balance
|
||||||
|
report-commodity
|
||||||
|
exchange-fn)))
|
||||||
|
|
||||||
|
(cost
|
||||||
|
(gnc:gnc-monetary-amount
|
||||||
|
(gnc:sum-collector-commodity book-balance
|
||||||
|
report-commodity
|
||||||
|
weighted-fn)))
|
||||||
|
|
||||||
|
(unrealized-gain (gnc:numeric-sub-fixed value cost)))
|
||||||
|
|
||||||
|
(unrealized-gain-collector 'add report-commodity unrealized-gain)
|
||||||
|
unrealized-gain-collector
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
;; If you ask me, any outstanding(TM) retained earnings and
|
||||||
|
;; unrealized gains should be added directly into equity,
|
||||||
|
;; both at the start and end dates of the reporting period.
|
||||||
|
(gnc:report-percent-done 4)
|
||||||
|
|
||||||
|
;; start and end asset balances
|
||||||
|
(set! start-asset-balance
|
||||||
|
(gnc:accounts-get-comm-total-assets
|
||||||
|
asset-accounts get-start-balance-fn)) ; OK
|
||||||
|
(set! end-asset-balance
|
||||||
|
(gnc:accounts-get-comm-total-assets
|
||||||
|
asset-accounts get-end-balance-fn)) ; OK
|
||||||
|
|
||||||
|
;; start and end liability balances
|
||||||
|
(set! neg-start-liability-balance
|
||||||
|
(gnc:accounts-get-comm-total-assets
|
||||||
|
liability-accounts get-start-balance-fn)) ; OK
|
||||||
|
(set! neg-end-liability-balance
|
||||||
|
(gnc:accounts-get-comm-total-assets
|
||||||
|
liability-accounts get-end-balance-fn)) ; OK
|
||||||
|
|
||||||
|
;; start and end retained earnings (income - expenses)
|
||||||
|
(set! neg-pre-start-retained-earnings
|
||||||
|
(accountlist-get-comm-balance-at-date
|
||||||
|
income-expense-accounts
|
||||||
|
forever-ago start-date-tp)) ; OK
|
||||||
|
(set! neg-pre-end-retained-earnings
|
||||||
|
(accountlist-get-comm-balance-at-date
|
||||||
|
income-expense-accounts
|
||||||
|
forever-ago end-date-tp)) ; OK
|
||||||
|
(set! neg-net-income
|
||||||
|
(accountlist-get-comm-balance-at-date
|
||||||
|
income-expense-accounts
|
||||||
|
start-date-tp end-date-tp)) ; OK
|
||||||
|
(set! net-income (gnc:make-commodity-collector))
|
||||||
|
(net-income 'minusmerge neg-net-income #f)
|
||||||
|
|
||||||
|
;; start and end (unadjusted) equity balances
|
||||||
|
(set! neg-start-equity-balance
|
||||||
|
(gnc:accounts-get-comm-total-assets
|
||||||
|
equity-accounts get-start-balance-fn)) ; OK
|
||||||
|
(set! neg-end-equity-balance
|
||||||
|
(gnc:accounts-get-comm-total-assets
|
||||||
|
equity-accounts get-end-balance-fn)) ; OK
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;;
|
||||||
|
;; beleive it or not, i think this part is right...
|
||||||
|
;;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
;; start and end unrealized gains
|
||||||
|
(set! start-book-balance (gnc:make-commodity-collector))
|
||||||
|
(start-book-balance 'merge start-asset-balance #f)
|
||||||
|
(start-book-balance 'merge neg-start-liability-balance #f)
|
||||||
|
(start-book-balance 'merge neg-start-equity-balance #f)
|
||||||
|
(start-book-balance 'merge neg-pre-start-retained-earnings #f) ; OK
|
||||||
|
|
||||||
|
(set! end-book-balance (gnc:make-commodity-collector))
|
||||||
|
(end-book-balance 'merge end-asset-balance #f)
|
||||||
|
(end-book-balance 'merge neg-end-liability-balance #f)
|
||||||
|
(end-book-balance 'merge neg-end-equity-balance #f)
|
||||||
|
(end-book-balance 'merge neg-pre-end-retained-earnings #f) ; OK
|
||||||
|
|
||||||
|
(set! start-unrealized-gains
|
||||||
|
(unrealized-gains-at-date start-book-balance
|
||||||
|
start-exchange-fn
|
||||||
|
start-date-tp)) ; OK
|
||||||
|
(set! end-unrealized-gains
|
||||||
|
(unrealized-gains-at-date end-book-balance
|
||||||
|
end-exchange-fn
|
||||||
|
end-date-tp)) ; OK
|
||||||
|
|
||||||
|
;; unrealized gains accrued during the reporting period...
|
||||||
|
(set! net-unrealized-gains (gnc:make-commodity-collector))
|
||||||
|
(net-unrealized-gains 'merge end-unrealized-gains #f)
|
||||||
|
(net-unrealized-gains 'minusmerge start-unrealized-gains #f) ; OK
|
||||||
|
|
||||||
|
;; starting and ending total equity...
|
||||||
|
(set! start-total-equity (gnc:make-commodity-collector))
|
||||||
|
(start-total-equity 'minusmerge neg-start-equity-balance #f)
|
||||||
|
(start-total-equity 'minusmerge neg-pre-start-retained-earnings #f)
|
||||||
|
(start-total-equity 'merge start-unrealized-gains #f) ; OK
|
||||||
|
|
||||||
|
(set! end-total-equity (gnc:make-commodity-collector))
|
||||||
|
(end-total-equity 'minusmerge neg-end-equity-balance #f)
|
||||||
|
(end-total-equity 'minusmerge neg-pre-end-retained-earnings #f)
|
||||||
|
(end-total-equity 'merge end-unrealized-gains #f) ; OK
|
||||||
|
|
||||||
|
;;
|
||||||
|
;; calculate investments & draws...
|
||||||
|
;;
|
||||||
|
;; since, as this time, GnuCash does not have any
|
||||||
|
;; contra-account types, i'm gonna have to fudge this a
|
||||||
|
;; bit... i'll do a transaction query and classify the
|
||||||
|
;; splits by debit/credit.
|
||||||
|
;;
|
||||||
|
|
||||||
|
;; FIXME: um... no. that sounds like too much work.
|
||||||
|
;; ok, for now, just assume draws are zero and investments signed
|
||||||
|
(set! draws (gnc:make-commodity-collector)) ;; 0
|
||||||
|
(set! investments (gnc:make-commodity-collector)) ;; 0
|
||||||
|
(investments 'minusmerge neg-end-equity-balance #f) ;; > 0
|
||||||
|
(investments 'merge neg-start-equity-balance #f) ;; net increase
|
||||||
|
|
||||||
|
;; increase in equity
|
||||||
|
(set! capital-increase (gnc:make-commodity-collector))
|
||||||
|
(capital-increase 'merge net-income #f)
|
||||||
|
(capital-increase 'merge investments #f)
|
||||||
|
(capital-increase 'minusmerge draws #f)
|
||||||
|
(capital-increase 'merge net-unrealized-gains #f)
|
||||||
|
|
||||||
|
(gnc:report-percent-done 30)
|
||||||
|
|
||||||
|
;; Workaround to force gtkhtml into displaying wide
|
||||||
|
;; enough columns.
|
||||||
|
(gnc:html-table-append-row!
|
||||||
|
build-table
|
||||||
|
(make-list 2 " \
|
||||||
|
\
|
||||||
|
")
|
||||||
|
)
|
||||||
|
|
||||||
|
(gnc:report-percent-done 80)
|
||||||
|
|
||||||
|
(report-line
|
||||||
|
build-table
|
||||||
|
(string-append (N_ "Capital") ", "
|
||||||
|
(gnc:print-date start-date-printable))
|
||||||
|
#f start-total-equity
|
||||||
|
1 start-exchange-fn #f "primary-subheading"
|
||||||
|
)
|
||||||
|
(report-line
|
||||||
|
build-table
|
||||||
|
(string-append (N_ "Net income") period-for)
|
||||||
|
(string-append (N_ "Net loss") period-for)
|
||||||
|
net-income
|
||||||
|
0 end-exchange-fn #f #f
|
||||||
|
)
|
||||||
|
(report-line
|
||||||
|
build-table
|
||||||
|
(string-append (N_ "Investments less withdrawals") period-for)
|
||||||
|
#f
|
||||||
|
investments
|
||||||
|
0 end-exchange-fn #f #f
|
||||||
|
)
|
||||||
|
(report-line
|
||||||
|
build-table
|
||||||
|
(string-append (N_ "Unrealized gains") period-for)
|
||||||
|
(string-append (N_ "Unrealized losses") period-for)
|
||||||
|
net-unrealized-gains
|
||||||
|
0 end-exchange-fn #f #f
|
||||||
|
)
|
||||||
|
(report-line
|
||||||
|
build-table
|
||||||
|
(N_ "Increase in capital")
|
||||||
|
(N_ "Decrease in capital")
|
||||||
|
capital-increase
|
||||||
|
1 end-exchange-fn use-rules? #f
|
||||||
|
)
|
||||||
|
(report-line
|
||||||
|
build-table
|
||||||
|
(string-append (N_ "Captial") ", "
|
||||||
|
(gnc:print-date end-date-tp))
|
||||||
|
#f
|
||||||
|
end-total-equity
|
||||||
|
1 end-exchange-fn #f "primary-subheading"
|
||||||
|
)
|
||||||
|
|
||||||
|
(gnc:html-document-add-object! doc build-table)
|
||||||
|
|
||||||
|
;; add currency information if requested
|
||||||
|
(gnc:report-percent-done 90)
|
||||||
|
(and show-rates?
|
||||||
|
(let* ((curr-tbl (gnc:make-html-table))
|
||||||
|
(headers (list
|
||||||
|
(gnc:print-date start-date-printable)
|
||||||
|
(gnc:print-date end-date-tp)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(then (gnc:html-make-exchangerates
|
||||||
|
report-commodity start-exchange-fn accounts))
|
||||||
|
(now (gnc:html-make-exchangerates
|
||||||
|
report-commodity end-exchange-fn accounts))
|
||||||
|
)
|
||||||
|
|
||||||
|
(gnc:html-table-set-col-headers! curr-tbl headers)
|
||||||
|
(gnc:html-table-set-style!
|
||||||
|
curr-tbl "table" 'attribute '("border" "1"))
|
||||||
|
(gnc:html-table-set-style!
|
||||||
|
then "table" 'attribute '("border" "0"))
|
||||||
|
(gnc:html-table-set-style!
|
||||||
|
now "table" 'attribute '("border" "0"))
|
||||||
|
(gnc:html-table-append-ruler! build-table 3)
|
||||||
|
(gnc:html-table-append-row! curr-tbl (list then now))
|
||||||
|
(gnc:html-document-add-object! doc curr-tbl)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(gnc:report-percent-done 100)
|
||||||
|
|
||||||
|
;; if sending the report to a file, do so now
|
||||||
|
;; however, this still doesn't seem to get around the
|
||||||
|
;; colspan bug... cf. gnc:colspans-are-working-right
|
||||||
|
(if filename
|
||||||
|
(let* ((port (open-output-file filename))
|
||||||
|
(gnc:display-report-list-item
|
||||||
|
(list doc) port " equity-statement.scm ")
|
||||||
|
(close-output-port port)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(gnc:report-finished)
|
||||||
|
|
||||||
|
doc
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(gnc:define-report
|
||||||
|
'version 1
|
||||||
|
'name reportname
|
||||||
|
'menu-path (list gnc:menuname-income-expense)
|
||||||
|
'options-generator equity-statement-options-generator
|
||||||
|
'renderer (lambda (report-obj)
|
||||||
|
(equity-statement-renderer report-obj #f #f))
|
||||||
|
'export-types #f
|
||||||
|
'export-thunk (lambda (report-obj choice filename)
|
||||||
|
(equity-statement-renderer report-obj #f filename)))
|
||||||
|
|
||||||
|
;; END
|
||||||
|
|
||||||
@@ -71,6 +71,7 @@
|
|||||||
(use-modules (gnucash report advanced-portfolio))
|
(use-modules (gnucash report advanced-portfolio))
|
||||||
(use-modules (gnucash report average-balance))
|
(use-modules (gnucash report average-balance))
|
||||||
(use-modules (gnucash report balance-sheet))
|
(use-modules (gnucash report balance-sheet))
|
||||||
|
(use-modules (gnucash report equity-statement))
|
||||||
(use-modules (gnucash report cash-flow))
|
(use-modules (gnucash report cash-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))
|
||||||
|
|||||||
@@ -40,10 +40,10 @@
|
|||||||
(gnc:make-dir home-dir)))
|
(gnc:make-dir home-dir)))
|
||||||
|
|
||||||
(define gnc:current-config-auto
|
(define gnc:current-config-auto
|
||||||
(build-path (getenv "HOME") ".gnucash" "config-1.8.auto"))
|
(build-path (getenv "HOME") ".gnucash" "config-1.9.auto"))
|
||||||
|
|
||||||
(define gnc:current-saved-reports
|
(define gnc:current-saved-reports
|
||||||
(build-path (getenv "HOME") ".gnucash" "saved-reports-1.8"))
|
(build-path (getenv "HOME") ".gnucash" "saved-reports-1.9"))
|
||||||
|
|
||||||
(define gnc:load-user-config-if-needed
|
(define gnc:load-user-config-if-needed
|
||||||
(let ((user-config-loaded? #f))
|
(let ((user-config-loaded? #f))
|
||||||
@@ -74,11 +74,13 @@
|
|||||||
;; Don't continue adding to this list. When 2.0
|
;; Don't continue adding to this list. When 2.0
|
||||||
;; rolls around bump the 1.4 (unnumbered) files
|
;; rolls around bump the 1.4 (unnumbered) files
|
||||||
;; off the list.
|
;; off the list.
|
||||||
'("config-1.8.user" "config-1.6.user" "config.user"
|
'("config-1.9.user" "config-1.8.user"
|
||||||
"config-1.8.auto" "config-1.6.auto" "config.auto"))
|
"config-1.6.user" "config.user"
|
||||||
|
"config-1.9.auto" "config-1.8.auto"
|
||||||
|
"config-1.6.auto" "config.auto"))
|
||||||
(gnc:debug "loading saved reports")
|
(gnc:debug "loading saved reports")
|
||||||
(or-map try-load-no-set
|
(or-map try-load-no-set
|
||||||
'("saved-reports-1.8"))
|
'("saved-reports-1.9" "saved-reports-1.8"))
|
||||||
)))))
|
)))))
|
||||||
|
|
||||||
;; the system config should probably be loaded from some directory
|
;; the system config should probably be loaded from some directory
|
||||||
|
|||||||
Reference in New Issue
Block a user