Use tiocgwinsz for printing the info table.

This commit is contained in:
Dominik Pantůček 2023-12-05 22:33:59 +01:00
parent fd05ecda88
commit b34770269e
3 changed files with 108 additions and 104 deletions

View file

@ -67,7 +67,8 @@
cal-format
util-git
cal-day
racket-kwargs)
racket-kwargs
tiocgwinsz)
(define *show-payments-count* (make-parameter 36))
@ -301,102 +302,103 @@
;; Prints nicely aligned members base info
(define (print-members-base-table mb)
(let* ((total-count (length
(find-members-by-predicate mb brmember-usable?)))
(invalid-mrs (find-members-by-predicate
mb
(compose not is-4digit-prime? brmember-id)))
(suspended-mrs (find-members-by-predicate mb brmember-suspended?))
(debtor-mrs (sort
(members-to-notify mb 3)
brmember<?))
(soon-expire-mrs (sort
(find-members-by-predicate
mb
(brmember-suspended-for 21 24))
brmember<?)))
(print "Known members: " total-count)
(newline)
(print
(table->string
(filter
identity
(list (list "Type" "Count" "List")
(members-pred-table-row mb
(ansi-string #:yellow "Chair:")
brmember-chair?
"~N")
(members-pred-table-row mb
(ansi-string #:yellow "Council:")
brmember-council?
"~N")
(members-pred-table-row mb
(ansi-string #:yellow "Revision:")
brmember-revision?
"~N")
(members-pred-table-row mb
(ansi-string #:yellow "Grant:")
brmember-grant?
"~N")
(members-pred-table-row mb
(string-append a:success "Active:")
brmember-active?
"~N~E")
(members-pred-table-row mb
(string-append a:highlight "Students:")
brmember-student?
"~N~E")
(members-table-row a:warning "Suspended:" suspended-mrs "~N~E (~S)")
(members-pred-table-row mb
(string-append a:warning "Destroyed:")
brmember-destroyed?
"~N~E")
(let ((suspended2 (filter
(lambda (mr)
(>= (brmember-suspended-months mr)
member-suspend-max-months))
suspended-mrs)))
(if (null? suspended2)
(let-values (((rows columns) (term-size)))
(let* ((total-count (length
(find-members-by-predicate mb brmember-usable?)))
(invalid-mrs (find-members-by-predicate
mb
(compose not is-4digit-prime? brmember-id)))
(suspended-mrs (find-members-by-predicate mb brmember-suspended?))
(debtor-mrs (sort
(members-to-notify mb 3)
brmember<?))
(soon-expire-mrs (sort
(find-members-by-predicate
mb
(brmember-suspended-for 21 24))
brmember<?)))
(print "Known members: " total-count)
(newline)
(print
(table->string
(filter
identity
(list (list "Type" "Count" "List")
(members-pred-table-row mb
(ansi-string #:yellow "Chair:")
brmember-chair?
"~N")
(members-pred-table-row mb
(ansi-string #:yellow "Council:")
brmember-council?
"~N")
(members-pred-table-row mb
(ansi-string #:yellow "Revision:")
brmember-revision?
"~N")
(members-pred-table-row mb
(ansi-string #:yellow "Grant:")
brmember-grant?
"~N")
(members-pred-table-row mb
(string-append a:success "Active:")
brmember-active?
"~N~E")
(members-pred-table-row mb
(string-append a:highlight "Students:")
brmember-student?
"~N~E")
(members-table-row a:warning "Suspended:" suspended-mrs "~N~E (~S)")
(members-pred-table-row mb
(string-append a:warning "Destroyed:")
brmember-destroyed?
"~N~E")
(let ((suspended2 (filter
(lambda (mr)
(>= (brmember-suspended-months mr)
member-suspend-max-months))
suspended-mrs)))
(if (null? suspended2)
#f
(members-table-row (ansi #:magenta) "Suspended (long):" suspended2 "~N (~S)")))
(if (null? soon-expire-mrs)
#f
(members-table-row (ansi #:magenta) "Suspended (long):" suspended2 "~N (~S)")))
(if (null? soon-expire-mrs)
#f
(members-table-row (ansi #:magenta #:bold) "Expire Soon:"
soon-expire-mrs "~N (~S)"))
(members-pred-table-row mb
(ansi-string #:red #:bold "Prolems:")
brmember-has-problems?
"~N~E ~A")
(if (null? debtor-mrs)
#f
(list (ansi-string "\t" #:magenta #:bold "Debtors:")
(format "~A" (length debtor-mrs))
(table->string
(append
(members-attrs-table debtor-mrs
brmember-format
(list "Name" "Balance" "Last Payment")
(list "~N" "\t~B" "~L"))
(list
(list
"Total"
(format
"\t~A"
(foldr
(lambda (v a)
(+ (member-total-balance v) a))
0
debtor-mrs)))))
#:border '(((#:bottom #:right light) ... (#:bottom light))
((#:right light) ... none) ...
((#:top #:right light) ... (#:top light)))
#:ansi-reset? #t)))
))
#:border '(((#:bottom #:right light) ... (#:bottom light))
...
((#:right light) ... none))
#:width 70
#:ansi-reset? #t)))
(members-table-row (ansi #:magenta #:bold) "Expire Soon:"
soon-expire-mrs "~N (~S)"))
(members-pred-table-row mb
(ansi-string #:red #:bold "Prolems:")
brmember-has-problems?
"~N~E ~A")
(if (null? debtor-mrs)
#f
(list (ansi-string "\t" #:magenta #:bold "Debtors:")
(format "~A" (length debtor-mrs))
(table->string
(append
(members-attrs-table debtor-mrs
brmember-format
(list "Name" "Balance" "Last Payment")
(list "~N" "\t~B" "~L"))
(list
(list
"Total"
(format
"\t~A"
(foldr
(lambda (v a)
(+ (member-total-balance v) a))
0
debtor-mrs)))))
#:border '(((#:bottom #:right light) ... (#:bottom light))
((#:right light) ... none) ...
((#:top #:right light) ... (#:top light)))
#:ansi-reset? #t)))
))
#:border '(((#:bottom #:right light) ... (#:bottom light))
...
((#:right light) ... none))
#:width (- columns 10)
#:ansi-reset? #t))))
(let ((pmrs (find-members-by-predicate mb brmember-file-has-problems?)))
(when (not (null? pmrs))
(newline)