From 58c5a7882957be325bfb3aba9c671a7dda7a1203 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pant=C5=AF=C4=8Dek?= Date: Sun, 19 Mar 2023 20:43:00 +0100 Subject: [PATCH] Suspended for at least 24 months. --- member-record.scm | 11 +++++++++-- members-base.scm | 7 +++++++ period.scm | 3 ++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/member-record.scm b/member-record.scm index 53fb387..5e3262e 100644 --- a/member-record.scm +++ b/member-record.scm @@ -38,6 +38,7 @@ member-id member-existing? member-format + member-suspended-months member-record-tests! ) @@ -64,6 +65,8 @@ (string-intersperse (map symbol->string aliases) ", ")) + (when (member-suspended? mr) + (print " Suspended for " (member-suspended-months mr) " months.")) (newline) (let loop ((sinfo sinfo)) (when (not (null? sinfo)) @@ -149,6 +152,7 @@ (cons (case (cadr fmtl) ((#\N) (mr-ref mr 'nick)) ((#\I) (number->string (mr-ref mr 'id))) + ((#\S) (number->string (member-suspended-months mr))) ((#\~) "~")) resl)) (loop (cdr fmtl) @@ -156,9 +160,12 @@ ;; Returns the number of months the user is suspended. Zero if not ;; suspended. - (define (member-suspended-month mr) + (define (member-suspended-months mr) (if (member-suspended? mr) - 1 + (let ((period (periods-match (mr-ref mr 'suspend)))) + (if period + (month-diff (car period) (*current-month*)) + 0)) 0)) ;; Performs module self-tests. diff --git a/members-base.scm b/members-base.scm index 196be69..2e0379c 100644 --- a/members-base.scm +++ b/members-base.scm @@ -315,6 +315,13 @@ (member-records->string destroyed-mrs)) (print a:highlight " Students (" (length student-mrs) "): " a:default (member-records->string student-mrs)) + (let ((suspended2 (filter-members-by-predicate + suspended-mrs + (lambda (mr) + (>= (member-suspended-months mr) 24))))) + (when (not (null? suspended2)) + (print " Suspended for at least 24 months: " + (member-records->string suspended2 "~N (~S)")))) (when (not (null? invalid-mrs)) (print a:error " Invalid Id (" (length invalid-mrs) "): " (member-records->string invalid-mrs "~N (~I)") diff --git a/period.scm b/period.scm index 8598839..9fe5d48 100644 --- a/period.scm +++ b/period.scm @@ -37,6 +37,7 @@ month-in-periods? period->string periods->string + periods-match period-tests! ) @@ -126,7 +127,7 @@ (month->string (car p)) (if (cdr p) (month->string (cdr p)) - "....-.."))) + "****-**"))) ;; Returns a string representing a list of periods. (define (periods->string ps)