gnucash maint: [trep-engine] add transaction filter exclude option

Christopher Lam clam at code.gnucash.org
Thu Nov 14 17:14:36 EST 2019


Updated	 via  https://github.com/Gnucash/gnucash/commit/58258b94 (commit)
	from  https://github.com/Gnucash/gnucash/commit/509c542a (commit)



commit 58258b94002226ca635a327b945ab340fb7d4acc
Author: Christopher Lam <christopher.lck at gmail.com>
Date:   Thu Nov 14 09:20:16 2019 +0800

    [trep-engine] add transaction filter exclude option
    
    add boolean option which converts the transaction filter from
    'include' to 'exclude'.

diff --git a/gnucash/report/report-system/trep-engine.scm b/gnucash/report/report-system/trep-engine.scm
index 7509a40ad..5e83d506d 100644
--- a/gnucash/report/report-system/trep-engine.scm
+++ b/gnucash/report/report-system/trep-engine.scm
@@ -89,6 +89,8 @@
 (define optname-transaction-matcher (N_ "Transaction Filter"))
 (define optname-transaction-matcher-regex
   (N_ "Use regular expressions for transaction filter"))
+(define optname-transaction-matcher-exclude
+  (N_ "Transaction Filter excludes matched strings"))
 (define optname-reconcile-status (N_ "Reconcile Status"))
 (define optname-void-transactions (N_ "Void Transactions"))
 (define optname-closing-transactions (N_ "Closing transactions"))
@@ -604,6 +606,13 @@ enable full POSIX regular expressions capabilities. '#work|#family' will match b
 tags within description, notes or memo. ")
     #f))
 
+  (gnc:register-trep-option
+   (gnc:make-simple-boolean-option
+    pagename-filter optname-transaction-matcher-exclude
+    "i3"
+    (_ "If this option is selected, transactions matching filter are excluded.")
+    #f))
+
   (gnc:register-trep-option
    (gnc:make-multichoice-option
     pagename-filter optname-reconcile-status
@@ -1969,6 +1978,8 @@ be excluded from periodic reporting.")
                      (lambda () (make-regexp transaction-matcher))
                      (const 'invalid-transaction-regex))
                    'no-guile-regex-support)))
+         (transaction-filter-exclude?
+          (opt-val pagename-filter optname-transaction-matcher-exclude))
          (reconcile-status-filter
           (keylist-get-info reconcile-status-list
                             (opt-val pagename-filter optname-reconcile-status)
@@ -2044,6 +2055,11 @@ be excluded from periodic reporting.")
     (define (date-comparator? X Y)
       (generic-less? X Y 'date 'none #t))
 
+    (define (transaction-filter-match split)
+      (or (match? (xaccTransGetDescription (xaccSplitGetParent split)))
+          (match? (xaccTransGetNotes (xaccSplitGetParent split)))
+          (match? (xaccSplitGetMemo split))))
+
     (cond
      ((or (null? c_account_1)
           (symbol? account-matcher-regexp)
@@ -2129,9 +2145,9 @@ be excluded from periodic reporting.")
                     ((include) (is-filter-member split c_account_2))
                     ((exclude) (not (is-filter-member split c_account_2))))
                   (or (string-null? transaction-matcher)
-                      (match? (xaccTransGetDescription trans))
-                      (match? (xaccTransGetNotes trans))
-                      (match? (xaccSplitGetMemo split)))
+                      (if transaction-filter-exclude?
+                          (not (transaction-filter-match split))
+                          (transaction-filter-match split)))
                   (or (not custom-split-filter)
                       (custom-split-filter split)))))
          splits))
diff --git a/gnucash/report/standard-reports/test/test-transaction.scm b/gnucash/report/standard-reports/test/test-transaction.scm
index b1a75d162..50f43efda 100644
--- a/gnucash/report/standard-reports/test/test-transaction.scm
+++ b/gnucash/report/standard-reports/test/test-transaction.scm
@@ -349,6 +349,12 @@
           '("-$23.00")
           (get-row-col sxml -1 -1)))
 
+      (set-option! options "Filter" "Transaction Filter excludes matched strings" #t)
+      (let ((sxml (options->sxml options "negate transaction filter not.s?")))
+        (test-equal "transaction filter in bank to 'not.s?' and switch regex, sum = -$23.00"
+          '("$24.00")
+          (get-row-col sxml -1 -1)))
+
       ;; Test Reconcile Status Filters
       (set! options (default-testing-options))
       (set-option! options "General" "Start Date" (cons 'absolute (gnc-dmy2time64 01 01 1969)))



Summary of changes:
 gnucash/report/report-system/trep-engine.scm       | 22 +++++++++++++++++++---
 .../standard-reports/test/test-transaction.scm     |  6 ++++++
 2 files changed, 25 insertions(+), 3 deletions(-)



More information about the gnucash-changes mailing list