r15972 - gnucash/trunk/src/report/standard-reports - Bug#131623: Fix computation of unrealized gains in Balance Sheet report. Patch from Mike Alexander <mta at umich.edu>.
Josh Sled
jsled at cvs.gnucash.org
Sat Apr 21 18:20:19 EDT 2007
Author: jsled
Date: 2007-04-21 18:20:18 -0400 (Sat, 21 Apr 2007)
New Revision: 15972
Trac: http://svn.gnucash.org/trac/changeset/15972
Modified:
gnucash/trunk/src/report/standard-reports/balance-sheet.scm
Log:
Bug#131623: Fix computation of unrealized gains in Balance Sheet report. Patch from Mike Alexander <mta at umich.edu>.
Modified: gnucash/trunk/src/report/standard-reports/balance-sheet.scm
===================================================================
--- gnucash/trunk/src/report/standard-reports/balance-sheet.scm 2007-04-21 21:49:11 UTC (rev 15971)
+++ gnucash/trunk/src/report/standard-reports/balance-sheet.scm 2007-04-21 22:20:18 UTC (rev 15972)
@@ -139,6 +139,9 @@
(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"))
+(define optname-unrealized-gains (N_ "Compute unrealized gains and losses"))
+(define opthelp-unrealized-gains
+ (N_ "Include unrealized gains and losses in the computation. Will produce incorrect results if the current file uses commodity trading accounts"))
;; options generator
@@ -168,6 +171,11 @@
(gnc:make-simple-boolean-option
gnc:pagename-general optname-report-form
"d" opthelp-report-form #t))
+
+ (add-option
+ (gnc:make-simple-boolean-option
+ gnc:pagename-general optname-unrealized-gains
+ "e" opthelp-unrealized-gains #t))
;; accounts to work on
(add-option
@@ -293,6 +301,8 @@
optname-date))))
(report-form? (get-option gnc:pagename-general
optname-report-form))
+ (compute-unrealized-gains? (get-option gnc:pagename-general
+ optname-unrealized-gains))
(accounts (get-option gnc:pagename-accounts
optname-accounts))
(depth-limit (get-option gnc:pagename-accounts
@@ -405,6 +415,22 @@
table
(+ (* 2 tree-depth)
(if (equal? tabbing 'canonically-tabbed) 1 0))))
+
+ ;; Get the value of all transactions (in transaction currency)
+ ;; in the given account before the given date
+ (define (get-account-value-at-date account to-date)
+ (let ((value (gnc:make-commodity-collector)))
+ (for-each
+ (lambda (split)
+ (let* ((parent (xaccSplitGetParent split))
+ (currency (xaccTransGetCurrency parent)))
+ (if (gnc:timepair-le (gnc-transaction-get-date-posted parent) to-date)
+ (value 'add currency (xaccSplitGetValue split)))))
+ (xaccAccountGetSplitList account)
+ )
+ value
+ )
+ )
;;(gnc:warn "account names" liability-account-names)
(gnc:html-document-set-title!
@@ -425,6 +451,7 @@
;; Get all the balances for each of the account types.
(let* ((asset-balance #f)
+ (asset-basis #f)
(neg-liability-balance #f) ;; credit balances are < 0
(liability-balance #f)
(neg-equity-balance #f)
@@ -434,7 +461,6 @@
(unrealized-gain-collector #f)
(total-equity-balance #f)
(liability-plus-equity #f)
- (book-balance #f) ;; assets - liabilities - equity, norm 0
;; Create the account tables below where their
;; percentage time can be tracked.
@@ -450,6 +476,9 @@
(lambda (account)
(gnc:account-get-comm-balance-at-date
account date-tp #f)))
+ (get-total-value-fn
+ (lambda (account)
+ (get-account-value-at-date account date-tp)))
)
;; If you ask me, any outstanding(TM) retained earnings and
@@ -461,6 +490,9 @@
(set! asset-balance
(gnc:accounts-get-comm-total-assets
asset-accounts get-total-balance-fn))
+ (set! asset-basis
+ (gnc:accounts-get-comm-total-assets
+ asset-accounts get-total-value-fn))
(gnc:report-percent-done 6)
;; sum liabilities
(set! neg-liability-balance
@@ -496,38 +528,15 @@
;; 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....
- ;;
- (set! book-balance (gnc:make-commodity-collector))
- (book-balance 'merge asset-balance #f)
- (book-balance 'merge neg-liability-balance #f)
- (book-balance 'merge neg-equity-balance #f)
- (book-balance 'merge neg-retained-earnings #f)
+ ;;
+ ;; Don't calculate unrealized gains if we were asked not to. If we are using
+ ;; commodity trading accounts they will automatically accumulate the gains.
(set! unrealized-gain-collector (gnc:make-commodity-collector))
- (let* ((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)
- )
- ;; calculate equity and liability+equity totals
+ (if compute-unrealized-gains?
+ (begin (unrealized-gain-collector 'merge asset-balance #f)
+ (unrealized-gain-collector 'minusmerge asset-basis #f)))
+
+ ;; calculate equity and liability+equity totals
(set! total-equity-balance (gnc:make-commodity-collector))
(total-equity-balance 'merge
equity-balance
More information about the gnucash-changes
mailing list