gnucash master: Fix basis calculation for FIFO or LIFO when less than one lot is sold.

Mike Alexander mta at code.gnucash.org
Mon Mar 24 19:08:59 EDT 2014


Updated	 via  https://github.com/Gnucash/gnucash/commit/b1eb45ef (commit)
	from  https://github.com/Gnucash/gnucash/commit/eaae6e95 (commit)



commit b1eb45ef282da5c705a182f75c17442ff99ec665
Author: Mike Alexander <mta at umich.edu>
Date:   Mon Mar 24 17:51:43 2014 -0400

    Fix basis calculation for FIFO or LIFO when less than one lot is sold.

diff --git a/src/report/standard-reports/advanced-portfolio.scm b/src/report/standard-reports/advanced-portfolio.scm
index bd7b6b4..77953eb 100644
--- a/src/report/standard-reports/advanced-portfolio.scm
+++ b/src/report/standard-reports/advanced-portfolio.scm
@@ -278,12 +278,8 @@
              (case (gnc-numeric-compare (gnc-numeric-abs b-units) (caar b-list))
                ((-1)
                  ;; Sold less than the first lot, create a new first lot from the remainder
-                 (let* ((new-units (gnc-numeric-add b-units (caar b-list) units-denom GNC-RND-ROUND))
-                        (old-val (gnc-numeric-mul (caar b-list) (cdar b-list) currency-frac GNC-RND-ROUND))
-                        (new-val (gnc-numeric-mul old-val 
-                                                  (gnc-numeric-div new-units (caar b-list) GNC-DENOM-AUTO GNC-DENOM-REDUCE)
-                                                  currency-frac GNC-RND-ROUND)))
-                    (basis-builder (cdr b-list) new-units new-val b-method currency-frac))) 
+                 (let ((new-units (gnc-numeric-add b-units (caar b-list) units-denom GNC-RND-ROUND)))
+                        (cons (cons new-units (cdar b-list)) (cdr b-list))))
                ((0)
                  ;; Sold all of the first lot
                  (cdr b-list))
@@ -297,13 +293,8 @@
                (case (gnc-numeric-compare (gnc-numeric-abs b-units) (caar rev-b-list))
                  ((-1)
                    ;; Sold less than the last lot
-                 (let* ((new-units (gnc-numeric-add b-units (caar rev-b-list) units-denom GNC-RND-ROUND))
-                        (old-val (gnc-numeric-mul (caar rev-b-list) (cdar rev-b-list) currency-frac GNC-RND-ROUND))
-                        (new-val (gnc-numeric-mul old-val 
-                                                  (gnc-numeric-div new-units (caar rev-b-list) GNC-DENOM-AUTO GNC-DENOM-REDUCE)
-                                                  currency-frac GNC-RND-ROUND)))
-                    (basis-builder (reverse (cdr rev-b-list)) new-units new-val b-method currency-frac)
-                 ))
+                 (let ((new-units (gnc-numeric-add b-units (caar rev-b-list) units-denom GNC-RND-ROUND)))
+                        (reverse (cons (cons new-units (cdar rev-b-list)) (cdr rev-b-list)))))
                  ((0)
                    ;; Sold all of the last lot
                    (reverse (cdr rev-b-list))



Summary of changes:
 src/report/standard-reports/advanced-portfolio.scm | 17 ++++-------------
 1 file changed, 4 insertions(+), 13 deletions(-)



More information about the gnucash-changes mailing list