gnucash maint: Bug 798005 - Import of QIF file sets expenses to zero, deposits are fine

Christopher Lam clam at code.gnucash.org
Sun Nov 15 05:36:20 EST 2020


Updated	 via  https://github.com/Gnucash/gnucash/commit/3e2be271 (commit)
	from  https://github.com/Gnucash/gnucash/commit/e9a117b2 (commit)



commit 3e2be271fc3c8245e4be7f24d6a15ca2116d3ab7
Author: Christopher Lam <christopher.lck at gmail.com>
Date:   Sun Nov 15 18:31:30 2020 +0800

    Bug 798005 - Import of QIF file sets expenses to zero, deposits are fine
    
    recongizes numbers with trailing negative sign.

diff --git a/gnucash/import-export/qif-imp/qif-parse.scm b/gnucash/import-export/qif-imp/qif-parse.scm
index 261c10212..c7fec3cbd 100644
--- a/gnucash/import-export/qif-imp/qif-parse.scm
+++ b/gnucash/import-export/qif-imp/qif-parse.scm
@@ -401,14 +401,17 @@
 
 ;; the following is a working refactored function
 (define (qif-parse:parse-number/format value-string format)
-  (let* ((filtered-string (gnc:string-delete-chars value-string "$'+"))
+  (let* ((has-minus? (string-index value-string #\-))
+         (filtered-string (gnc:string-delete-chars value-string "$'+-"))
          (read-string (case format
                         ((decimal) (gnc:string-delete-chars filtered-string ","))
                         ((comma) (gnc:string-replace-char
                                   (gnc:string-delete-chars filtered-string ".")
                                   #\, #\.))
-                        ((integer) filtered-string))))
-    (or (string->number (string-append "#e" read-string)) 0)))
+                        ((integer) filtered-string)))
+         (num (or (string->number (string-append "#e" read-string)) 0)))
+    (pk value-string has-minus? filtered-string read-string num)
+    (if has-minus? (- num) num)))
 
 ;; input: list of numstrings eg "10.50" "20.54"
 ;; input: formats to test '(decimal comma integer)
diff --git a/gnucash/import-export/qif-imp/test/test-qif-parse.scm b/gnucash/import-export/qif-imp/test/test-qif-parse.scm
index 8e94ab308..8d7402b4c 100644
--- a/gnucash/import-export/qif-imp/test/test-qif-parse.scm
+++ b/gnucash/import-export/qif-imp/test/test-qif-parse.scm
@@ -228,6 +228,10 @@
     -1234
     (qif-parse:parse-number/format "-1234" 'integer))
 
+  (test-equal "qif-parse:parse-number/format 1234-"
+    -1234
+    (qif-parse:parse-number/format "1234-" 'integer))
+
   (test-equal "qif-parse:parse-number/format 1234"
     1234
     (qif-parse:parse-number/format "1234" 'integer))



Summary of changes:
 gnucash/import-export/qif-imp/qif-parse.scm           | 9 ++++++---
 gnucash/import-export/qif-imp/test/test-qif-parse.scm | 4 ++++
 2 files changed, 10 insertions(+), 3 deletions(-)



More information about the gnucash-changes mailing list