r23762 - gnucash/trunk/src/report/standard-reports - Handle stocks that become worthless in the Advanced Portfolio report
Mike Alexander
mta at code.gnucash.org
Fri Jan 24 22:42:13 EST 2014
Author: mta
Date: 2014-01-24 22:42:12 -0500 (Fri, 24 Jan 2014)
New Revision: 23762
Trac: http://svn.gnucash.org/trac/changeset/23762
Modified:
gnucash/trunk/src/report/standard-reports/advanced-portfolio.scm
Log:
Handle stocks that become worthless in the Advanced Portfolio report
Modified: gnucash/trunk/src/report/standard-reports/advanced-portfolio.scm
===================================================================
--- gnucash/trunk/src/report/standard-reports/advanced-portfolio.scm 2014-01-25 00:55:42 UTC (rev 23761)
+++ gnucash/trunk/src/report/standard-reports/advanced-portfolio.scm 2014-01-25 03:42:12 UTC (rev 23762)
@@ -317,7 +317,10 @@
(let* ((current-units (units-basis b-list))
(units-ratio (gnc-numeric-div (gnc-numeric-add b-units current-units GNC-DENOM-AUTO GNC-RND-ROUND)
current-units GNC-DENOM-AUTO GNC-RND-ROUND))
- (value-ratio (gnc-numeric-div (gnc:make-gnc-numeric 1 1) units-ratio GNC-DENOM-AUTO GNC-RND-ROUND)))
+ ;; If the units ratio is zero the stock is worthless and the value should be zero too
+ (value-ratio (if (gnc-numeric-zero-p units-ratio)
+ (gnc-numeric-zero)
+ (gnc-numeric-div (gnc:make-gnc-numeric 1 1) units-ratio GNC-DENOM-AUTO GNC-RND-ROUND))))
(gnc:debug "blist is " b-list " current units is "
(gnc-numeric-to-string current-units)
@@ -667,20 +670,24 @@
(not (gnc-numeric-zero-p (xaccSplitGetAmount (xaccSplitGetOtherSplit s)))))
(begin (gnc:debug "Money in 2 " (gnc-numeric-to-string split-value))
(moneyincoll 'add commod-currency split-value)))
- (if (gnc-numeric-negative-p split-value)
- ;; Split value is negative, money is going out of stock account
- (let* ((new-basis (sum-basis basis-list currency-frac))
- ;; Capital gain is money out minus change in basis
- (gain (gnc-numeric-sub (gnc-numeric-abs split-value-currency)
- (gnc-numeric-sub orig-basis new-basis
- currency-frac GNC-RND-ROUND)
- currency-frac GNC-RND-ROUND)))
- (gnc:debug "Old basis=" (gnc-numeric-to-string orig-basis)
- " New basis=" (gnc-numeric-to-string new-basis)
- " Gain=" (gnc-numeric-to-string gain))
- (gaincoll 'add currency gain)
- (gnc:debug "Money out 2 " (gnc-numeric-to-string (gnc-numeric-neg split-value)))
- (moneyoutcoll 'add commod-currency (gnc-numeric-neg split-value)))))
+ ;; Split value is zero or negative. If it's zero it's either a stock split/merge
+ ;; or the stock has become worthless (which looks like a merge where the number
+ ;; of shares goes to zero). If the value is negative then it's a disposal of some sort.
+ (let ((new-basis (sum-basis basis-list currency-frac)))
+ (if (or (gnc-numeric-zero-p new-basis)
+ (gnc-numeric-negative-p split-value))
+ ;; Split value is negative or new basis is zero (stock is worthless),
+ ;; Capital gain is money out minus change in basis
+ (let ((gain (gnc-numeric-sub (gnc-numeric-abs split-value-currency)
+ (gnc-numeric-sub orig-basis new-basis
+ currency-frac GNC-RND-ROUND)
+ currency-frac GNC-RND-ROUND)))
+ (gnc:debug "Old basis=" (gnc-numeric-to-string orig-basis)
+ " New basis=" (gnc-numeric-to-string new-basis)
+ " Gain=" (gnc-numeric-to-string gain))
+ (gaincoll 'add currency gain)
+ (gnc:debug "Money out 2 " (gnc-numeric-to-string (gnc-numeric-neg split-value)))
+ (moneyoutcoll 'add commod-currency (gnc-numeric-neg split-value))))))
)
)
)
More information about the gnucash-changes
mailing list