gnucash maint: Multiple changes pushed

Christopher Lam clam at code.gnucash.org
Sat Dec 4 07:38:57 EST 2021


Updated	 via  https://github.com/Gnucash/gnucash/commit/753e1c4b (commit)
	 via  https://github.com/Gnucash/gnucash/commit/3894ee7e (commit)
	 via  https://github.com/Gnucash/gnucash/commit/33b6dfc6 (commit)
	from  https://github.com/Gnucash/gnucash/commit/f771513f (commit)



commit 753e1c4b99654bac18206b875d1d2dd1789da029
Author: Christopher Lam <christopher.lck at gmail.com>
Date:   Fri Dec 3 22:34:13 2021 +0800

    [ifrs-cost-basis] store amounts intead of gnc:monetary objects
    
    This simplifies this report a lot. Also proceeds, dividend, capgains,
    expenses were incorrectly stored with incorrect account currency, and
    should have used transaction currency instead.

diff --git a/gnucash/report/reports/standard/ifrs-cost-basis.scm b/gnucash/report/reports/standard/ifrs-cost-basis.scm
index 58b9dc08f..5752ad239 100644
--- a/gnucash/report/reports/standard/ifrs-cost-basis.scm
+++ b/gnucash/report/reports/standard/ifrs-cost-basis.scm
@@ -172,10 +172,6 @@ the split action field to detect capitalized fees on stock activity")
   (dividend-val get-dividend-val set-dividend-val!)
   (capgains-val get-capgains-val set-capgains-val!))
 
-(define (get-amount mon)
-  (and (gnc:gnc-monetary? mon)
-       (gnc:gnc-monetary-amount mon)))
-
 ;; "bitfield" Nabc a=neg b=zero c=pos
 (define (N001 x) (if (number? x) (>  x 0) #f))
 (define (N100 x) (if (number? x) (<  x 0) #f))
@@ -227,26 +223,19 @@ the split action field to detect capitalized fees on stock activity")
 
 (define shown-headers? #f)
 (define (txn-identify trans txn-info cumul-units)
-  (define trans-units (get-amount (get-stock-amt txn-info)))
-  (define trans-value (get-amount (get-stock-val txn-info)))
-  (define cash-value (get-amount (get-proceeds-val txn-info)))
-  (define fees-stock (get-amount (get-fees-cap-val txn-info)))
-  (define fees-expense (get-amount (get-fees-exp-val txn-info)))
-  (define dividend (get-amount (get-dividend-val txn-info)))
-  (define capgains (get-amount (get-capgains-val txn-info)))
   (let lp ((types (cmp cumul-units short-types open-types long-types)))
     (match types
       (()
        ;; (gnc:pk (qof-print-date (xaccTransGetDate trans)) txn-info)
        "Unknown")
       (((amt-fn val-fn proc-fn fee-cap-fn fee-exp-fn div-fn capg-fn res) . tail)
-       (if (and (amt-fn trans-units)
-                (val-fn trans-value)
-                (proc-fn cash-value)
-                (fee-cap-fn fees-stock)
-                (fee-exp-fn fees-expense)
-                (div-fn dividend)
-                (capg-fn capgains))
+       (if (and (amt-fn (get-stock-amt txn-info))
+                (val-fn (get-stock-val txn-info))
+                (proc-fn (get-proceeds-val txn-info))
+                (fee-cap-fn (get-fees-cap-val txn-info))
+                (fee-exp-fn (get-fees-exp-val txn-info))
+                (div-fn (get-dividend-val txn-info))
+                (capg-fn (get-capgains-val txn-info)))
            res
            (lp tail))))))
 
@@ -258,10 +247,6 @@ the split action field to detect capitalized fees on stock activity")
   (define (cap-expenses? split)
     (and ((from-acct? stock-acct) split)
          (equal? (gnc-get-action-num txn split) cap-fee-action)))
-  (define (make-monetary account amount)
-    (and amount (gnc:make-gnc-monetary (xaccAccountGetCommodity account) amount)))
-  (define (make-parent-monetary amount)
-    (and amount (gnc:make-gnc-monetary (gnc-account-get-currency-or-parent stock-acct) amount)))
   (let lp ((splits (xaccTransGetSplitList txn))
            (stock-amt #f)
            (stock-val #f)
@@ -271,14 +256,8 @@ the split action field to detect capitalized fees on stock activity")
            (dividend-val #f)
            (capgains-val #f))
     (match splits
-      (() (make-txn-info
-           (make-monetary stock-acct stock-amt)
-           (make-parent-monetary stock-val)
-           (make-monetary proceeds-acct proceeds-val)
-           (make-parent-monetary fees-cap-val)
-           (make-monetary expenses-acct fees-exp-val)
-           (make-monetary dividend-acct dividend-val)
-           (make-monetary capgains-acct capgains-val)))
+      (() (make-txn-info stock-amt stock-val proceeds-val fees-cap-val
+                         fees-exp-val dividend-val capgains-val))
 
       (((? (from-acct? proceeds-acct) split) . rest)
        (lp rest stock-amt stock-val
@@ -419,15 +398,14 @@ the split action field to detect capitalized fees on stock activity")
            (let* ((trans (xaccSplitGetParent split))
                   (txn-info (txn->info trans stock-acct cap-fee-action proceeds-acct
                                        capgains-acct fees-acct dividend-acct))
-                  (trans-units (get-amount (get-stock-amt txn-info)))
-                  (cash-value (get-amount (get-proceeds-val txn-info)))
-                  (dividends-val (get-amount (get-dividend-val txn-info)))
-                  (capgains-val (get-amount (get-capgains-val txn-info)))
-                  (fees-expense (get-amount (get-fees-exp-val txn-info)))
-                  (fees-value (M+ (get-amount (get-fees-cap-val txn-info))
-                                  fees-expense))
-                  (trans-value (M+ (get-amount (get-stock-val txn-info))
-                                   (get-amount (get-fees-cap-val txn-info))))
+                  (trans-units (get-stock-amt txn-info))
+                  (cash-value (get-proceeds-val txn-info))
+                  (dividends-val (get-dividend-val txn-info))
+                  (capgains-val (get-capgains-val txn-info))
+                  (fees-expense (get-fees-exp-val txn-info))
+                  (fees-value (M+ (get-fees-cap-val txn-info) fees-expense))
+                  (trans-value (M+ (get-stock-val txn-info)
+                                   (get-fees-cap-val txn-info)))
                   (new-units (M+ cumul-units trans-units))
 
                   (sale?

commit 3894ee7ea8270855f92deba456fefad7254dab0e
Author: Christopher Lam <christopher.lck at gmail.com>
Date:   Sun Nov 28 17:33:24 2021 +0800

    [ifrs-cost-basis] reuse txn-info instead of rescanning txn
    
    Instead of scanning stock transaction splits repeatedly, reuse
    txn-info already generated with txn->info to generate amounts for use
    in the report.

diff --git a/gnucash/report/reports/standard/ifrs-cost-basis.scm b/gnucash/report/reports/standard/ifrs-cost-basis.scm
index 59ce4a446..58b9dc08f 100644
--- a/gnucash/report/reports/standard/ifrs-cost-basis.scm
+++ b/gnucash/report/reports/standard/ifrs-cost-basis.scm
@@ -160,25 +160,6 @@ the split action field to detect capitalized fees on stock activity")
     ((n) (and n (not (zero? n)) (/ n)))
     ((divisor head . tail) (M* divisor (M/ (fold M* head tail))))))
 
-(define (trans-extract trans account numfilter split->amount)
-  (define (not-account? s)
-    (and account (not (equal? (xaccSplitGetAccount s) account))))
-  (define (not-num-filter? s)
-    (and numfilter
-         (not (equal? (gnc-get-action-num (xaccSplitGetParent s) s) numfilter))))
-  (let lp ((splits (xaccTransGetSplitList trans)) (result #f))
-    (match splits
-      (() result)
-      (((? not-account?) . rest) (lp rest result))
-      (((? not-num-filter?) . rest) (lp rest result))
-      ((split . rest) (lp rest (M+ (split->amount split) result))))))
-
-(define (trans-extract-value trans account numfilter)
-  (trans-extract trans account numfilter xaccSplitGetValue))
-
-(define (trans-extract-amount trans account numfilter)
-  (trans-extract trans account numfilter xaccSplitGetAmount))
-
 (define-record-type :txn-info
   (make-txn-info stock-amt stock-val proceeds-val
                  fees-cap-val fees-exp-val dividend-val capgains-val)
@@ -191,6 +172,10 @@ the split action field to detect capitalized fees on stock activity")
   (dividend-val get-dividend-val set-dividend-val!)
   (capgains-val get-capgains-val set-capgains-val!))
 
+(define (get-amount mon)
+  (and (gnc:gnc-monetary? mon)
+       (gnc:gnc-monetary-amount mon)))
+
 ;; "bitfield" Nabc a=neg b=zero c=pos
 (define (N001 x) (if (number? x) (>  x 0) #f))
 (define (N100 x) (if (number? x) (<  x 0) #f))
@@ -242,9 +227,6 @@ the split action field to detect capitalized fees on stock activity")
 
 (define shown-headers? #f)
 (define (txn-identify trans txn-info cumul-units)
-  (define (get-amount mon)
-    (and (gnc:gnc-monetary? mon)
-         (gnc:gnc-monetary-amount mon)))
   (define trans-units (get-amount (get-stock-amt txn-info)))
   (define trans-value (get-amount (get-stock-val txn-info)))
   (define cash-value (get-amount (get-proceeds-val txn-info)))
@@ -437,13 +419,15 @@ the split action field to detect capitalized fees on stock activity")
            (let* ((trans (xaccSplitGetParent split))
                   (txn-info (txn->info trans stock-acct cap-fee-action proceeds-acct
                                        capgains-acct fees-acct dividend-acct))
-                  (trans-units (trans-extract-amount trans stock-acct #f))
-                  (trans-value (trans-extract-value trans stock-acct #f))
-                  (cash-value (trans-extract-value trans proceeds-acct #f))
-                  (dividends-val (trans-extract-value trans dividend-acct #f))
-                  (capgains-val (trans-extract-value trans capgains-acct #f))
-                  (fees-expense (trans-extract-value trans fees-acct #f))
-                  (fees-value (trans-extract-value trans #f cap-fee-action))
+                  (trans-units (get-amount (get-stock-amt txn-info)))
+                  (cash-value (get-amount (get-proceeds-val txn-info)))
+                  (dividends-val (get-amount (get-dividend-val txn-info)))
+                  (capgains-val (get-amount (get-capgains-val txn-info)))
+                  (fees-expense (get-amount (get-fees-exp-val txn-info)))
+                  (fees-value (M+ (get-amount (get-fees-cap-val txn-info))
+                                  fees-expense))
+                  (trans-value (M+ (get-amount (get-stock-val txn-info))
+                                   (get-amount (get-fees-cap-val txn-info))))
                   (new-units (M+ cumul-units trans-units))
 
                   (sale?

commit 33b6dfc6ce0b4628da088c9f5768d5118bcee03d
Author: Christopher Lam <christopher.lck at gmail.com>
Date:   Sat Dec 4 20:33:29 2021 +0800

    [options.scm] addendum ca6604c93 gnc:make-budget-option
    
    selection-budget changed from budget object to guid, handle other uses
    as appropriate.

diff --git a/libgnucash/app-utils/options.scm b/libgnucash/app-utils/options.scm
index 4aa435744..52ab8cf3d 100644
--- a/libgnucash/app-utils/options.scm
+++ b/libgnucash/app-utils/options.scm
@@ -508,21 +508,20 @@ the option '~a'."))
 	"(lambda (option) "
 	"(if option ((gnc:option-setter option) "
 	"(gnc-budget-lookup "
-	(gnc:value->string (gncBudgetGetGUID selection-budget))
+	(gnc:value->string selection-budget)
 	" (gnc-get-current-book)))))"))
 
      ;; scm->kvp -- commit the change
      ;; b -- book;  p -- key-path
      (lambda (b p) 
-       (qof-book-set-option 
-	b (gncBudgetGetGUID selection-budget) p))
+       (qof-book-set-option b selection-budget p))
 
      ;; kvp->scm -- get the stored value
      (lambda (b p)
        (let ((v (qof-book-get-option b p)))
          (if (and v (string? v))
-	     (begin 
-	       (set! selection-budget (gnc-budget-lookup v (gnc-get-current-book)))))))
+	     (set! selection-budget (convert-to-guid
+                                     (gnc-budget-lookup v (gnc-get-current-book)))))))
 
      ;; value-validator -- returns (#t value) or (#f "failure message")
      ;; As no user-generated input, this legacy hard-wire is probably ok



Summary of changes:
 .../report/reports/standard/ifrs-cost-basis.scm    | 72 +++++-----------------
 libgnucash/app-utils/options.scm                   |  9 ++-
 2 files changed, 21 insertions(+), 60 deletions(-)



More information about the gnucash-changes mailing list