Define parameters in 2 steps to remove preparam

This commit is contained in:
Vincent Dawans 2023-06-04 14:36:34 -07:00
parent c9c8d48910
commit bb8a6b5601

View File

@ -2187,42 +2187,21 @@ be excluded from periodic reporting.")
(report-title (opt-val gnc:pagename-general gnc:optname-reportname))
(detail-is-single? (eq? (opt-val gnc:pagename-display optname-detail-level) 'single))
(split-action? (qof-book-use-split-action-for-num-field (gnc-get-current-book)))
(preparam (list (cons 'split-action split-action?)))
(amount-setting (opt-val gnc:pagename-display (N_ "Amount")))
(reversed-signs (opt-val gnc:pagename-display (N_ "Sign Reverses")))
(primary-key (opt-val pagename-sorting optname-prime-sortkey))
(primary-order (opt-val pagename-sorting optname-prime-sortorder))
(primary-subtotal (opt-val pagename-sorting optname-prime-subtotal))
(primary-date-subtotal (opt-val pagename-sorting optname-prime-date-subtotal))
(primary-get-info (lambda (info)
(if (memq primary-key DATE-SORTING-TYPES)
(keylist-get-info date-subtotal-list primary-date-subtotal info)
(and (SUBTOTAL-ENABLED? primary-key preparam)
primary-subtotal
(keylist-get-info (sortkey-list preparam) primary-key info)))))
(primary-key/renderer-fn (primary-get-info 'renderer-fn))
(secondary-key (opt-val pagename-sorting optname-sec-sortkey))
(secondary-order (opt-val pagename-sorting optname-sec-sortorder))
(secondary-subtotal (opt-val pagename-sorting optname-sec-subtotal))
(secondary-date-subtotal (opt-val pagename-sorting optname-sec-date-subtotal))
(secondary-get-info (lambda (info)
(if (memq secondary-key DATE-SORTING-TYPES)
(keylist-get-info date-subtotal-list secondary-date-subtotal info)
(and (SUBTOTAL-ENABLED? secondary-key preparam)
secondary-subtotal
(keylist-get-info (sortkey-list preparam) secondary-key info)))))
(secondary-key/renderer-fn (secondary-get-info 'renderer-fn))
(closing-match (keylist-get-info
show-closing-list
(opt-val pagename-filter optname-closing-transactions)
'closing-match))
(splits '())
(custom-sort? (or (and (memq primary-key DATE-SORTING-TYPES)
(not (eq? primary-date-subtotal 'none)))
(and (memq secondary-key DATE-SORTING-TYPES)
(not (eq? secondary-date-subtotal 'none)))
(or (CUSTOM-SORTING? primary-key preparam)
(CUSTOM-SORTING? secondary-key preparam))))
(subtotal-table? (and (opt-val gnc:pagename-display optname-grid)
(if (memq primary-key DATE-SORTING-TYPES)
(keylist-get-info date-subtotal-list
@ -2236,6 +2215,10 @@ be excluded from periodic reporting.")
;; define a preprocessed alist of report parameters.
;; each key returns either the parameter value or #f is the parameter is not used.
(define parameters
;; define parameters-tail, the main set of parameters.
;; additional variables and parameters that require this first set of parameters
;; wll be prepended further down.
(let* ((parameters-tail
(list
;; parameters based on file properties
(cons 'split-action split-action?)
@ -2290,33 +2273,18 @@ be excluded from periodic reporting.")
(cons 'running-grand-total
(or (eq? (opt-val gnc:pagename-display optname-running-totals) 'grand)
(eq? (opt-val gnc:pagename-display optname-running-totals) 'all)))
(cons 'running-prime
(and (primary-get-info 'renderer-fn)
(or (eq? (opt-val gnc:pagename-display optname-running-totals) 'sub)
(eq? (opt-val gnc:pagename-display optname-running-totals) 'all))))
(cons 'running-sec
(and (secondary-get-info 'renderer-fn)
(or (eq? (opt-val gnc:pagename-display optname-running-totals) 'sub)
(eq? (opt-val gnc:pagename-display optname-running-totals) 'all))))
;; parameters based on general options
(cons 'begindate begindate)
(cons 'enddate enddate)
(cons 'export-table (opt-val gnc:pagename-general optname-table-export))
;; parameters based on sorting options
(cons 'primary-key primary-key)
(cons 'primary-key/renderer-fn primary-key/renderer-fn)
(cons 'primary-key/split-sortvalue (primary-get-info 'split-sortvalue))
(cons 'primary-date-subtotal (if (memq primary-key DATE-SORTING-TYPES)
primary-date-subtotal))
(cons 'secondary-key secondary-key)
(cons 'secondary-key/renderer-fn secondary-key/renderer-fn)
(cons 'secondary-key/split-sortvalue (secondary-get-info 'split-sortvalue))
(cons 'secondary-date-subtotal (if (memq secondary-key DATE-SORTING-TYPES)
secondary-date-subtotal))
(cons 'indenting (opt-val pagename-sorting optname-indenting))
(cons 'subtotals-only
(and (opt-val pagename-sorting optname-show-subtotals-only)
(or primary-key/renderer-fn secondary-key/renderer-fn)))
(cons 'sort-account-code (opt-val pagename-sorting (N_ "Show Account Code")))
(cons 'sort-account-full-name
(opt-val pagename-sorting (N_ "Show Full Account Name")))
@ -2344,6 +2312,53 @@ be excluded from periodic reporting.")
primary-subtotal
(eq? secondary-order 'ascend)))
))
;; additional variables that call sortkey-list and therefore
;; whose definition requires the existing parameters-tail alist
(primary-get-info (lambda (info)
(if (memq primary-key DATE-SORTING-TYPES)
(keylist-get-info date-subtotal-list primary-date-subtotal info)
(and (SUBTOTAL-ENABLED? primary-key parameters-tail)
primary-subtotal
(keylist-get-info (sortkey-list parameters-tail) primary-key info)))))
(primary-key/renderer-fn (primary-get-info 'renderer-fn))
(secondary-get-info (lambda (info)
(if (memq secondary-key DATE-SORTING-TYPES)
(keylist-get-info date-subtotal-list secondary-date-subtotal info)
(and (SUBTOTAL-ENABLED? secondary-key parameters-tail)
secondary-subtotal
(keylist-get-info (sortkey-list parameters-tail) secondary-key info)))))
(secondary-key/renderer-fn (secondary-get-info 'renderer-fn)))
;; prepend additional parameters that rely on sortkey-list and therefore
;; whose definition requires the existing parameters-tail alist
(cons*
;; additional parameters based on display options
(cons 'running-prime
(and primary-key/renderer-fn
(or (eq? (opt-val gnc:pagename-display optname-running-totals) 'sub)
(eq? (opt-val gnc:pagename-display optname-running-totals) 'all))))
(cons 'running-sec
(and secondary-key/renderer-fn
(or (eq? (opt-val gnc:pagename-display optname-running-totals) 'sub)
(eq? (opt-val gnc:pagename-display optname-running-totals) 'all))))
;; additional parameters based on sorting options
(cons 'primary-key/renderer-fn primary-key/renderer-fn)
(cons 'primary-key/split-sortvalue (primary-get-info 'split-sortvalue))
(cons 'secondary-key/renderer-fn secondary-key/renderer-fn)
(cons 'secondary-key/split-sortvalue (secondary-get-info 'split-sortvalue))
(cons 'subtotals-only
(and (opt-val pagename-sorting optname-show-subtotals-only)
(or primary-key/renderer-fn secondary-key/renderer-fn)))
;; parameters-tail comes at the end
parameters-tail)))
(define custom-sort?
(or (and (memq primary-key DATE-SORTING-TYPES)
(not (eq? primary-date-subtotal 'none)))
(and (memq secondary-key DATE-SORTING-TYPES)
(not (eq? secondary-date-subtotal 'none)))
(or (CUSTOM-SORTING? primary-key parameters)
(CUSTOM-SORTING? secondary-key parameters))))
(define (match? str)
(cond