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