REFACTOR: centralize left-cols to a vector-list

This commit is contained in:
Christopher Lam 2017-12-11 06:36:33 +08:00
parent 7b6ac3a077
commit 005fdb5f43

View File

@ -853,33 +853,106 @@ tags within description, notes or memo. ")
(left-cols-list (left-cols-list
(append (append
(add-if (column-uses? 'date) (add-if (column-uses? 'date)
(_ "Date")) (vector (_ "Date")
(lambda (split transaction-row?)
(if transaction-row?
(gnc:make-html-table-cell/markup
"date-cell"
(qof-print-date (xaccTransGetDate (xaccSplitGetParent split))))
""))))
(add-if (column-uses? 'reconciled-date) (add-if (column-uses? 'reconciled-date)
(_ "Reconciled Date")) (vector (_ "Reconciled Date")
(lambda (split transaction-row?)
(gnc:make-html-table-cell/markup
"date-cell"
(let ((date (xaccSplitGetDateReconciled split)))
(if (zero? date)
""
(qof-print-date date)))))))
(add-if (column-uses? 'num) (add-if (column-uses? 'num)
(if (and BOOK-SPLIT-ACTION (vector (if (and BOOK-SPLIT-ACTION
(opt-val gnc:pagename-display (N_ "Trans Number"))) (opt-val gnc:pagename-display (N_ "Trans Number")))
(_ "Num/T-Num") (_ "Num/T-Num")
(_ "Num"))) (_ "Num"))
(lambda (split transaction-row?)
(define trans (xaccSplitGetParent split))
(if transaction-row?
(if BOOK-SPLIT-ACTION
(let* ((num (gnc-get-num-action trans split))
(t-num (if (opt-val gnc:pagename-display (N_ "Trans Number"))
(gnc-get-num-action trans #f)
""))
(num-string (if (string-null? t-num)
num
(string-append num "/" t-num))))
(gnc:make-html-table-cell/markup "text-cell" num-string))
(gnc:make-html-table-cell/markup "text-cell"
(gnc-get-num-action trans split)))
""))))
(add-if (column-uses? 'description) (add-if (column-uses? 'description)
(_ "Description")) (vector (_ "Description")
(lambda (split transaction-row?)
(define trans (xaccSplitGetParent split))
(if transaction-row?
(gnc:make-html-table-cell/markup
"text-cell"
(xaccTransGetDescription trans))
""))))
(add-if (column-uses? 'memo) (add-if (column-uses? 'memo)
(if (column-uses? 'notes) (vector (if (column-uses? 'notes)
(string-append (_ "Memo") "/" (_ "Notes")) (string-append (_ "Memo") "/" (_ "Notes"))
(_ "Memo"))) (_ "Memo"))
(add-if (or (column-uses? 'account-name) (lambda (split transaction-row?)
(column-uses? 'account-code)) (define trans (xaccSplitGetParent split))
(_ "Account")) (define memo (xaccSplitGetMemo split))
(add-if (or (column-uses? 'other-account-name) (if (and (string-null? memo) (column-uses? 'notes))
(column-uses? 'other-account-code)) (xaccTransGetNotes trans)
(_ "Transfer from/to")) memo))))
(add-if (or (column-uses? 'account-name) (column-uses? 'account-code))
(vector (_ "Account")
(lambda (split transaction-row?)
(define account (xaccSplitGetAccount split))
(account-namestring account
(column-uses? 'account-code)
(column-uses? 'account-name)
(column-uses? 'account-full-name)))))
(add-if (or (column-uses? 'other-account-name) (column-uses? 'other-account-code))
(vector (_ "Transfer from/to")
(lambda (split transaction-row?)
(define other-account (xaccSplitGetAccount (xaccSplitGetOtherSplit split)))
(account-namestring other-account
(column-uses? 'other-account-code)
(column-uses? 'other-account-name)
(column-uses? 'other-account-full-name)))))
(add-if (column-uses? 'shares) (add-if (column-uses? 'shares)
(_ "Shares")) (vector (_ "Shares")
(lambda (split transaction-row?)
(gnc:make-html-table-cell/markup
"number-cell"
(xaccSplitGetAmount split)))))
(add-if (column-uses? 'price) (add-if (column-uses? 'price)
(_ "Price"))))) (vector (_ "Price")
(if (null? headings-list) (lambda (split transaction-row?)
(list "") (define trans (xaccSplitGetParent split))
headings-list))) (gnc:make-html-table-cell/markup
"number-cell"
(gnc:make-gnc-monetary (xaccTransGetCurrency trans)
(xaccSplitGetSharePrice split)))))))))
(if (and (null? left-cols-list)
(or (opt-val gnc:pagename-display "Totals")
(primary-get-info 'renderer-key)
(secondary-get-info 'renderer-key)))
(list (vector "" (lambda (s t) #f)))
left-cols-list)))
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
@ -1154,6 +1227,13 @@ tags within description, notes or memo. ")
(trans (xaccSplitGetParent split)) (trans (xaccSplitGetParent split))
(account (xaccSplitGetAccount split))) (account (xaccSplitGetAccount split)))
(define left-cols
(map (lambda (left-col)
(let* ((col-fn (vector-ref left-col 1))
(col-data (col-fn split transaction-row?)))
col-data))
left-columns))
(define cells (define cells
(map (lambda (cell) (map (lambda (cell)
(let* ((calculator (vector-ref cell 1)) (let* ((calculator (vector-ref cell 1))
@ -1164,87 +1244,11 @@ tags within description, notes or memo. ")
reverse? reverse?
subtotal?))) subtotal?)))
cell-calculators)) cell-calculators))
(if (column-uses? 'date)
(addto! row-contents
(if transaction-row?
(gnc:make-html-table-cell/markup
"date-cell"
(qof-print-date (xaccTransGetDate trans)))
"")))
(if (column-uses? 'reconciled-date)
(addto! row-contents
(gnc:make-html-table-cell/markup
"date-cell"
(let ((date (xaccSplitGetDateReconciled split)))
(if (zero? date)
""
(qof-print-date date))))))
(if (column-uses? 'num)
(addto! row-contents
(if transaction-row?
(if BOOK-SPLIT-ACTION
(let* ((num (gnc-get-num-action trans split))
(t-num (if (if (gnc:lookup-option options
gnc:pagename-display
(N_ "Trans Number"))
(opt-val gnc:pagename-display (N_ "Trans Number"))
"")
(gnc-get-num-action trans #f)
""))
(num-string (if (string-null? t-num)
num
(string-append num "/" t-num))))
(gnc:make-html-table-cell/markup "text-cell" num-string))
(gnc:make-html-table-cell/markup "text-cell"
(gnc-get-num-action trans split)))
"")))
(if (column-uses? 'description)
(addto! row-contents
(if transaction-row?
(gnc:make-html-table-cell/markup
"text-cell"
(xaccTransGetDescription trans))
"")))
(if (column-uses? 'memo)
(let ((memo (xaccSplitGetMemo split)))
(if (and (string-null? memo) (column-uses? 'notes))
(addto! row-contents (xaccTransGetNotes trans))
(addto! row-contents memo))))
(if (or (column-uses? 'account-name) (column-uses? 'account-code))
(addto! row-contents (account-namestring account
(column-uses? 'account-code)
(column-uses? 'account-name)
(column-uses? 'account-full-name))))
(if (or (column-uses? 'other-account-name) (column-uses? 'other-account-code))
(addto! row-contents (account-namestring (xaccSplitGetAccount (xaccSplitGetOtherSplit split))
(column-uses? 'other-account-code)
(column-uses? 'other-account-name)
(column-uses? 'other-account-full-name))))
(if (column-uses? 'shares)
(addto! row-contents (gnc:make-html-table-cell/markup
"number-cell"
(xaccSplitGetAmount split))))
(if (column-uses? 'price)
(addto! row-contents
(gnc:make-html-table-cell/markup
"number-cell"
(gnc:make-gnc-monetary (xaccTransGetCurrency trans)
(xaccSplitGetSharePrice split)))))
;; hack to ensure cell alignment is corrected when no left columns were selected
;; this is needed because subtotal renderer will always insert at least 1 column
(if (null? row-contents)
(addto! row-contents (gnc:html-make-empty-cell)))
(for-each (lambda (col)
(addto! row-contents col))
left-cols)
(for-each (lambda (cell) (for-each (lambda (cell)
(let ((cell-content (vector-ref cell 0)) (let ((cell-content (vector-ref cell 0))
;; reverse? returns a bool - will check if the cell type has reversible sign, ;; reverse? returns a bool - will check if the cell type has reversible sign,