Two-pass processing.

This commit is contained in:
Dominik Pantůček 2023-04-03 13:08:37 +02:00
parent f2e47b9ad3
commit 8c2f848c73

View file

@ -335,30 +335,8 @@
;; Prints summary table of all fees and credits for all members ;; Prints summary table of all fees and credits for all members
(define (print-members-fees-table MB) (define (print-members-fees-table MB)
(let ((balances (map member-balance MB)) (let ((balances (map member-balance (sort MB member<?)))
(members ;; Pass 1 (members ;; Pass 1
(map
(lambda (mr)
(list (member-nick mr)
(if (member-suspended? mr)
"suspended"
(if (member-student? mr)
"student"
(if (member-destroyed? mr)
"destroyed"
"active")))
;; TODO: move let* below here and add fees, credit, payment and total
)))))
(print
(table->string
(cons
(list (ansi-string #:bgblue #:brightyellow #:bold "Member")
(ansi-string #:bgblue #:brightyellow #:bold "Status")
(ansi-string #:bgblue #:brightyellow #:bold "Fees")
(ansi-string #:bgblue #:brightyellow #:bold "Credit")
(ansi-string #:bgblue #:brightyellow #:bold "Payments")
(ansi-string #:bgblue #:brightyellow #:bold "Balance"))
(append
(map (map
(lambda (mr) (lambda (mr)
(let* ((balance (member-balance mr)) (let* ((balance (member-balance mr))
@ -374,9 +352,30 @@
(if (member-destroyed? mr) (if (member-destroyed? mr)
"destroyed" "destroyed"
"active"))) "active")))
(sprintf "\t~A" fees) fees
(sprintf "\t~A" credit) credit
(sprintf "\t~A" payment) payment
total
)))
MB)))
(print
(table->string
(cons
(list (ansi-string #:bgblue #:brightyellow #:bold "Member")
(ansi-string #:bgblue #:brightyellow #:bold "Status")
(ansi-string #:bgblue #:brightyellow #:bold "Fees")
(ansi-string #:bgblue #:brightyellow #:bold "Credit")
(ansi-string #:bgblue #:brightyellow #:bold "Payments")
(ansi-string #:bgblue #:brightyellow #:bold "Balance"))
(append
(map ;; Pass 2
(lambda (member)
(let ((total (list-ref member 5)))
(list (list-ref member 0)
(list-ref member 1)
(sprintf "\t~A" (list-ref member 2))
(sprintf "\t~A" (list-ref member 3))
(sprintf "\t~A" (list-ref member 4))
(sprintf "\t~A~A~A" (sprintf "\t~A~A~A"
(if (< total -500) (if (< total -500)
a:error a:error
@ -386,7 +385,7 @@
(exact->inexact total) (exact->inexact total)
a:default) a:default)
))) )))
(sort MB member<?)) members)
(let* ((fees (foldl + 0 (map (lambda (b) (dict-ref b 'fees)) balances))) (let* ((fees (foldl + 0 (map (lambda (b) (dict-ref b 'fees)) balances)))
(credit (foldl + 0 (map (lambda (b) (dict-ref b 'credit)) balances))) (credit (foldl + 0 (map (lambda (b) (dict-ref b 'credit)) balances)))
(payment (foldl + 0 (map (lambda (b) (dict-ref b 'payment)) balances))) (payment (foldl + 0 (map (lambda (b) (dict-ref b 'payment)) balances)))