gnucash maint: [trep-engine] account name filter can exclude filtered string
Christopher Lam
clam at code.gnucash.org
Tue Feb 8 07:41:58 EST 2022
Updated via https://github.com/Gnucash/gnucash/commit/616658db (commit)
from https://github.com/Gnucash/gnucash/commit/331a3947 (commit)
commit 616658dbe9c89cdd2ac67abaa2526b8b50633d79
Author: Christopher Lam <christopher.lck at gmail.com>
Date: Tue Feb 8 20:07:05 2022 +0800
[trep-engine] account name filter can exclude filtered string
diff --git a/gnucash/report/reports/standard/test/test-transaction.scm b/gnucash/report/reports/standard/test/test-transaction.scm
index 1c9dec64f..2aca4d91e 100644
--- a/gnucash/report/reports/standard/test/test-transaction.scm
+++ b/gnucash/report/reports/standard/test/test-transaction.scm
@@ -330,6 +330,21 @@
'("$31.00")
(get-row-col sxml -1 -1)))
+ ;; Filter Account Name Filters
+ (set-option! options "Filter" "Account Name Filter excludes matched strings"
+ #t)
+ (let ((sxml (options->sxml options "accounts filter exclude expen.es regex")))
+ (test-equal "account name filter to 'expen.es, regex, negated', sum = -$31.00"
+ '("-$31.00")
+ (get-row-col sxml -1 -1)))
+
+ (set-option! options "Filter" "Use regular expressions for account name filter"
+ #f)
+ (let ((sxml (options->sxml options "accounts filter exclude expen.es")))
+ (test-equal "account name filter to 'expen.es, negated', sum = $0.00"
+ '("$0.00")
+ (get-row-col sxml -1 -1)))
+
;; Test Transaction Filters
(set! options (default-testing-options))
(set-option! options "General" "Start Date" (cons 'absolute (gnc-dmy2time64 01 01 1969)))
diff --git a/gnucash/report/trep-engine.scm b/gnucash/report/trep-engine.scm
index 153f188a0..4e4cccdaf 100644
--- a/gnucash/report/trep-engine.scm
+++ b/gnucash/report/trep-engine.scm
@@ -110,6 +110,8 @@
(define optname-account-matcher (N_ "Account Name Filter"))
(define optname-account-matcher-regex
(N_ "Use regular expressions for account name filter"))
+(define optname-account-matcher-exclude
+ (N_ "Account Name Filter excludes matched strings"))
(define optname-transaction-matcher (N_ "Transaction Filter"))
(define optname-transaction-matcher-regex
(N_ "Use regular expressions for transaction filter"))
@@ -582,6 +584,12 @@ Expenses:Car and Expenses:Flights. Use a period (.) to match a single character
'20../.' will match 'Travel 2017/1 London'. ")
#f))
+ (gnc:register-trep-option
+ (gnc:make-simple-boolean-option
+ pagename-filter optname-account-matcher-exclude "a7"
+ (G_ "If this option is selected, accounts matching filter are excluded.")
+ #f))
+
(gnc:register-trep-option
(gnc:make-string-option
pagename-filter optname-transaction-matcher
@@ -1987,6 +1995,7 @@ warning will be removed in GnuCash 5.0"))
(let* ((document (gnc:make-html-document))
(account-matcher (opt-val pagename-filter optname-account-matcher))
+ (account-matcher-neg (opt-val pagename-filter optname-account-matcher-exclude))
(account-matcher-regexp
(and (opt-val pagename-filter optname-account-matcher-regex)
(if (defined? 'make-regexp)
@@ -1996,14 +2005,16 @@ warning will be removed in GnuCash 5.0"))
'no-guile-regex-support)))
(c_account_0 (or custom-source-accounts
(opt-val gnc:pagename-accounts optname-accounts)))
- (c_account_1 (filter
- (lambda (acc)
- (if (regexp? account-matcher-regexp)
- (regexp-exec account-matcher-regexp
- (gnc-account-get-full-name acc))
- (string-contains (gnc-account-get-full-name acc)
- account-matcher)))
- c_account_0))
+ (acct? (lambda (acc)
+ (if (regexp? account-matcher-regexp)
+ (regexp-exec account-matcher-regexp
+ (gnc-account-get-full-name acc))
+ (string-contains (gnc-account-get-full-name acc)
+ account-matcher))))
+ (c_account_1 (if (string-null? account-matcher)
+ c_account_0
+ (filter (if account-matcher-neg (negate acct?) acct?)
+ c_account_0)))
(c_account_2 (opt-val gnc:pagename-accounts optname-filterby))
(filter-mode (opt-val gnc:pagename-accounts optname-filtertype))
(begindate (gnc:time64-start-day-time
Summary of changes:
.../reports/standard/test/test-transaction.scm | 15 ++++++++++++
gnucash/report/trep-engine.scm | 27 +++++++++++++++-------
2 files changed, 34 insertions(+), 8 deletions(-)
More information about the gnucash-changes
mailing list