[report-utilities] more dump data functions

Two API to dump splits in whole book:
* gnc:dump-book             - splits grouped by account
* gnc:dump-all-transactions - splits grouped by transaction
* gnc:dump-split - dumps single split

Example output -- note (gnc:dump-book) dumps each account followed by
its splits, then account balance. (gnc:dump-all-transactions) dumps all
transactions in date order, each followed by its splits.

(gnc:dump-book)

Account 8e56ef54: <Expense> Comm<USD> Type<Expense>
n Split 5dd1c0a9: 05/11/19 Amt<$200.00> $200.00 Desc<vend1> Memo<AP>
n Split f9cb052f: 05/11/19 Amt<$20.00> $20.00 Desc<emp1> Memo<vouch1>
n Split daafc64b: 05/11/19 Amt<$69.00> $69.00 Desc<vend1> Memo<job-bill>
n Split 5e6af9fe: 14/11/19 Amt<$86.00> $86.00 Desc<emp1> Memo<emp-voucher>
n Split 6d636ea2: 14/11/19 Amt<$46.00> $46.00 Desc<vend1>
n Split e618644b: 14/12/19 Amt<-$100.00> -$100.00 Desc<Vend-USD>
n Split 8be19fbd: 25/12/19 Amt<-$46.00> -$46.00 Desc<Vend-USD> Memo<CN$100-desc>
n Split ee4fe250: 01/04/20 Amt<$32.00> $32.00 Desc<Cell phone>
n Split 2cb02dac: 09/05/20 Amt<-$307.00> -$307.00
         Balance: $0.00 Cleared: $0.00 Reconciled: $0.00

Account 6f39f557: <Closing> Comm<USD> Type<Equity>
n Split 13916652: 09/05/20 Amt<$307.00> $307.00
         Balance: $307.00 Cleared: $0.00 Reconciled: $0.00

Account fa6507e1: <Closing:GBP> Comm<GBP> Type<Equity>
n Split 34ce3c03: 09/05/20 Amt<-£1,293.00> -£1,293.00
         Balance: -£1,293.00 Cleared: £0.00 Reconciled: £0.00

(gnc:dump-all-transactions)

  Trans cfbbc2a4: 12/07/19 Curr GBP  Desc<Customer-GBP>
n Split d12f74b2: 12/07/19 Acc<AR-GBP> Amt<£120.00> £120.00 Desc<Customer-GBP> Memo<due 91+>
n Split 3880e99c: 12/07/19 Acc<Standard Sales> Amt<-£20.00> -£20.00 Desc<Customer-GBP> Memo<due 91+>
n Split 6bd9c7e4: 12/07/19 Acc<Income-GBP> Amt<-£100.00> -£100.00 Desc<Customer-GBP> Memo<due 91+>

  Trans 60344bab: 09/10/19 Curr GBP  Desc<Customer-GBP>
n Split aaca8ee0: 09/10/19 Acc<AR-GBP> Amt<£225.00> £225.00 Desc<Customer-GBP> Memo<due 2-3 months ago>
n Split ee49bde8: 09/10/19 Acc<Standard Sales> Amt<-£20.00> -£20.00 Desc<Customer-GBP> Memo<due 2-3 months ago>
n Split e989e863: 09/10/19 Acc<Reduced Sales> Amt<-£5.00> -£5.00 Desc<Customer-GBP> Memo<due 2-3 months ago>
n Split 91d6cadd: 09/10/19 Acc<Income-GBP> Amt<-£200.00> -£200.00 Desc<Customer-GBP> Memo<due 2-3 months ago
This commit is contained in:
Christopher Lam 2020-08-19 20:19:13 +08:00
parent c210ceb3cb
commit 3b312e7548

View File

@ -17,6 +17,7 @@
;; 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652
;; Boston, MA 02110-1301, USA gnu@gnu.org
(use-modules (srfi srfi-26))
(use-modules (srfi srfi-13))
(use-modules (ice-9 format))
(use-modules (ice-9 match))
@ -1089,36 +1090,63 @@
(newline)
(last args))))
(define (maybe-str name str)
(match str
((or "" #f) "")
(_ (format #f " ~a<~a>" name str))))
(define-public (gnc:dump-split s show-acc?)
(define txn (xaccSplitGetParent s))
(format #t "~a Split ~a: ~a~a Amt<~a> ~a~a~a\n"
(xaccSplitGetReconcile s)
(string-take (gncSplitGetGUID s) 8)
(qof-print-date (xaccTransGetDate txn))
(maybe-str 'Acc (and show-acc? (xaccAccountGetName (xaccSplitGetAccount s))))
(gnc:monetary->string
(gnc:make-gnc-monetary
(xaccAccountGetCommodity (xaccSplitGetAccount s))
(xaccSplitGetAmount s)))
(gnc:monetary->string
(gnc:make-gnc-monetary
(xaccTransGetCurrency txn)
(xaccSplitGetValue s)))
(maybe-str 'Desc (xaccTransGetDescription txn))
(maybe-str 'Memo (xaccSplitGetMemo s))))
(define-public (gnc:dump-all-transactions)
(define query (qof-query-create-for-splits))
(display "\n(gnc:dump-all-transactions)\n")
(qof-query-set-book query (gnc-get-current-book))
(qof-query-set-sort-order query (list SPLIT-TRANS TRANS-DATE-POSTED) '() '())
(qof-query-set-sort-increasing query #t #t #t)
(let lp ((splits (xaccQueryGetSplitsUniqueTrans query)))
(newline)
(match splits
(() (qof-query-destroy query))
((split . rest)
(let ((trans (xaccSplitGetParent split)))
(format #t " Trans ~a: ~a Curr ~a ~a~a\n"
(string-take (gncTransGetGUID trans) 8)
(qof-print-date (xaccTransGetDate trans))
(gnc-commodity-get-mnemonic (xaccTransGetCurrency trans))
(maybe-str 'Desc (xaccTransGetDescription trans))
(maybe-str 'Notes (xaccTransGetNotes trans)))
(for-each (cut gnc:dump-split <> #t) (xaccTransGetSplitList trans))
(lp rest))))))
;; utility function for testing. dumps the whole book contents to
;; console.
(define (gnc:dump-book)
(display "\n(gnc:dump-book)\n")
(for-each
(lambda (acc)
(format #t "\nAccount: <~a> Comm<~a> Type<~a>\n"
(format #t "\nAccount ~a: ~a Comm<~a> Type<~a>\n"
(string-take (gncAccountGetGUID acc) 8)
(gnc-account-get-full-name acc)
(gnc-commodity-get-mnemonic
(xaccAccountGetCommodity acc))
(xaccAccountGetTypeStr
(xaccAccountGetType acc)))
(for-each
(lambda (s)
(let ((txn (xaccSplitGetParent s)))
(format #t "~a Split: ~a Amt<~a> Val<~a> Desc<~a> Memo<~a>\n"
(xaccSplitGetReconcile s)
(qof-print-date (xaccTransGetDate txn))
(gnc:monetary->string
(gnc:make-gnc-monetary
(xaccAccountGetCommodity acc)
(xaccSplitGetAmount s)))
(gnc:monetary->string
(gnc:make-gnc-monetary
(xaccTransGetCurrency txn)
(xaccSplitGetValue s)))
(xaccTransGetDescription txn)
(xaccSplitGetMemo s))))
(xaccAccountGetSplitList acc))
(format #t "Balance: ~a Cleared: ~a Reconciled: ~a\n"
(gnc-commodity-get-mnemonic (xaccAccountGetCommodity acc))
(xaccAccountGetTypeStr (xaccAccountGetType acc)))
(for-each (cut gnc:dump-split <> #f) (xaccAccountGetSplitList acc))
(format #t " Balance: ~a Cleared: ~a Reconciled: ~a\n"
(gnc:monetary->string
(gnc:make-gnc-monetary
(xaccAccountGetCommodity acc)