From 7d08bff69f1e797730f4b627d920c75d108854a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pant=C5=AF=C4=8Dek?= Date: Sun, 12 Mar 2023 15:06:06 +0100 Subject: [PATCH] Improved periods display, basic multi-value handling for credit, card, desfire keys. --- brmsaptool.scm | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/brmsaptool.scm b/brmsaptool.scm index 4e1574b..3fe6b05 100644 --- a/brmsaptool.scm +++ b/brmsaptool.scm @@ -285,6 +285,20 @@ #t (loop (cdr ps)))))) +;; Returns string representing a month period with possibly open end. +(define (period->string p) + (sprintf "~A..~A" + (month->string (car p)) + (if (cdr p) + (month->string (cdr p)) + "....-.."))) + +;; Returns a string representing a list of periods. +(define (periods->string ps) + (string-intersperse + (map period->string ps) + ", ")) + (define (period-tests!) (display "[test] period ") (unit-test 'sort-period-markers @@ -326,6 +340,13 @@ (not (month-in-periods? '(((2022 1) . (2022 4)) ((2023 5) . (2023 10))) '(2022 10)))) + (unit-test 'period->string + (equal? (period->string '((2022 1) . (2022 4))) + "2022-01..2022-04")) + (unit-test 'periods->string + (equal? (periods->string '(((2022 1) . (2022 4)) + ((2022 12). (2023 2)))) + "2022-01..2022-04, 2022-12..2023-02")) (print " ok.")) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -375,7 +396,10 @@ (dict-set d pk (cons (cons pd (string->month ds)) (dict-ref d pk '())))))) - (dict-set d k v)))) + (case k + ((card desfire credit) (dict-set d k (cons v (dict-ref d k '())))) + (else + (dict-set d k v)))))) ;; Converts given key in member info dictionary from period markers ;; list to periods. @@ -664,8 +688,13 @@ (print "User " id " alias " name) (let loop ((sinfo sinfo)) (when (not (null? sinfo)) - (let ((kv (car sinfo))) - (print " " (car kv) ":\t" (cdr kv)) + (let* ((kv (car sinfo)) + (k (car kv)) + (v (cdr kv))) + (print " " k ":\t" + (if (member k '(student suspend)) + (periods->string v) + v)) (loop (cdr sinfo)))))) (let () (print "No such member " (member-parm) ".")))))