From 5af8213951e3a9c9806187d215bc9f00118118b2 Mon Sep 17 00:00:00 2001 From: Christopher Lam Date: Sun, 8 Jan 2023 23:03:15 +0800 Subject: [PATCH 1/2] [balsheet-pnl] generate exchange-fn for each date separately and cache its result --- .../report/reports/standard/balsheet-pnl.scm | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/gnucash/report/reports/standard/balsheet-pnl.scm b/gnucash/report/reports/standard/balsheet-pnl.scm index a1d1aaa6669..2c082a7b093 100644 --- a/gnucash/report/reports/standard/balsheet-pnl.scm +++ b/gnucash/report/reports/standard/balsheet-pnl.scm @@ -769,11 +769,17 @@ also show overall period profit & loss.")) (cons acc (map col-datum-get-split-balance-with-closing cols-data)))) accounts-cols-data)) - (exchange-fn (and common-currency - (gnc:case-exchange-time-fn - price-source common-currency - (map xaccAccountGetCommodity accounts) enddate - #f #f))) + ;; generate an exchange-fn for date, and cache its result. + (get-date-exchange-fn + (let ((h (make-hash-table))) + (lambda (date) + (or (hashv-ref h date) + (let ((exchangefn (gnc:case-exchange-time-fn + price-source common-currency + (map xaccAccountGetCommodity accounts) + date #f #f))) + (hashv-set! h date exchangefn) + exchangefn))))) ;; from col-idx, find effective date to retrieve pricedb ;; entry or to limit transactions to calculate average-cost @@ -799,9 +805,9 @@ also show overall period profit & loss.")) (gnc:gnc-monetary-commodity monetary) common-currency)) (has-price? (gnc:gnc-monetary-commodity monetary)) - (exchange-fn - monetary common-currency - (col-idx->price-date col-idx))))) + (let* ((col-date (col-idx->price-date col-idx)) + (exchange-fn (get-date-exchange-fn col-date))) + (exchange-fn monetary common-currency col-date))))) ;; the following function generates an gnc:html-text object ;; to dump exchange rate for a particular column. From the From afc32af52171feec031947bb5b070c96d5521f01 Mon Sep 17 00:00:00 2001 From: Christopher Lam Date: Sun, 8 Jan 2023 23:54:03 +0800 Subject: [PATCH 2/2] [balsheet-pnl] move out of experimental into regular menu After 4 years it can finally graduate. Also remove FOOTER-TEXT warning. --- gnucash/report/reports/standard/balsheet-pnl.scm | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/gnucash/report/reports/standard/balsheet-pnl.scm b/gnucash/report/reports/standard/balsheet-pnl.scm index 2c082a7b093..e1f5d2b444c 100644 --- a/gnucash/report/reports/standard/balsheet-pnl.scm +++ b/gnucash/report/reports/standard/balsheet-pnl.scm @@ -47,13 +47,6 @@ (split-balance-with-closing col-datum-get-split-balance-with-closing) (split-value-balance col-datum-get-split-value-balance)) -(define FOOTER-TEXT - (gnc:make-html-text - (G_ "WARNING: Foreign currency conversions, and unrealized gains -calculations are not confirmed correct. This report may be modified -without notice. Bug reports are very welcome at -https://bugs.gnucash.org/"))) - ;; define all option's names and help text so that they are properly (define optname-startdate (N_ "Start Date")) @@ -1285,9 +1278,6 @@ also show overall period profit & loss.")) (gnc:html-document-add-object! doc multicol-table)) - (gnc:html-document-add-object! - doc FOOTER-TEXT) - (gnc:report-finished) ;; (gnc:html-document-set-style-text! ;; doc " table, td{ border-width: 1px; border-style:solid; border-color: lightgray; border-collapse: collapse}") @@ -1300,7 +1290,7 @@ also show overall period profit & loss.")) 'version 1 'name balsheet-reportname 'report-guid "065d5d5a77ba11e8b31e83ada73c5eea" - 'menu-path (list gnc:menuname-experimental) + 'menu-path (list gnc:menuname-asset-liability) 'options-generator (lambda () (multicol-report-options-generator 'balsheet)) 'renderer (lambda (rpt) (multicol-report-renderer rpt 'balsheet))) @@ -1308,7 +1298,7 @@ also show overall period profit & loss.")) 'version 1 'name pnl-reportname 'report-guid "0e94fd0277ba11e8825d43e27232c9d4" - 'menu-path (list gnc:menuname-experimental) + 'menu-path (list gnc:menuname-income-expense) 'options-generator (lambda () (multicol-report-options-generator 'pnl)) 'renderer (lambda (rpt) (multicol-report-renderer rpt 'pnl)))