Use month data type for joined key.

This commit is contained in:
Dominik Pantůček 2023-03-19 18:55:32 +01:00
parent cd2a08e2ec
commit 5f62bb319e
3 changed files with 36 additions and 8 deletions

View file

@ -30,6 +30,7 @@
(
*member-file-context*
*member-file-check-syntax*
*member-default-joined*
load-member-file
member-file-tests!
)
@ -63,6 +64,8 @@
;; 'quiet - ignore
(define *member-file-check-syntax* (make-parameter 'error))
(define *member-default-joined* (make-parameter (make-month 2015 1)))
;; Derived keys
(define start/stop-keys-keys
(map
@ -233,19 +236,29 @@
m)
(cdr ks))))))
;; Converts given key to month if it is a string. Leaves untouched
;; otherwise.
(define (convert-member-key:month m k)
(let ((v (dict-ref m k)))
(if (string? v)
(dict-set m k (string->month v))
m)))
;; All conversions in one place
(define (convert-member-keys m)
(convert-member-keys:card
(convert-member-key:credit
(convert-member-keys:markers->periods m 'suspend 'student))
'card 'desfire))
(convert-member-key:month
(convert-member-keys:card
(convert-member-key:credit
(convert-member-keys:markers->periods m 'suspend 'student))
'card 'desfire)
'joined))
;; Fills-in the defaults
(define (make-default-member-info)
(dict-set
(make-dict)
'joined
"2015-01"))
(*member-default-joined*)))
;; Processes all lines and returns a dictionary representing given
;; member.

View file

@ -53,7 +53,8 @@
member-file
primes
member-record
ansi)
ansi
period)
;; Gets all files and symbolic links from given directory. The
;; symbolic links are represented by cons cells with car being the
@ -273,8 +274,17 @@
(di4 (dict-set di3 'students
(filter-members-by-predicate mb member-student?)))
(di5 (dict-set di4 'destroyed
(filter-members-by-predicate mb member-destroyed?))))
di5))
(filter-members-by-predicate mb member-destroyed?)))
(di6 (dict-set di5 'month (*current-month*))))
di6))
;; Returns a list two lists: keys, data.
;; Each data record contains values for all keys.
(define (members-base-stats . args)
(let ((keys '(month total active suspended students destroyed invalid)))
(let mloop ((data '())
(month '(2015 1))) ; TODO: *oldest-month*
#f)))
;; Basic information about members-base in human-readable form.
(define (print-members-base-info mb)

View file

@ -28,6 +28,7 @@
(module
month
(
make-month
month-valid?
string->month
month->string
@ -44,6 +45,10 @@
(chicken format)
testing)
;; Simple wrapper for creating month representation as a list.
(define (make-month y m)
(list y m))
;; Returns true if this is a valid month representation - a list with
;; two integer elements within the allowed range.
(define (month-valid? m)