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

View file

@ -53,7 +53,8 @@
member-file member-file
primes primes
member-record member-record
ansi) ansi
period)
;; Gets all files and symbolic links from given directory. The ;; Gets all files and symbolic links from given directory. The
;; symbolic links are represented by cons cells with car being the ;; symbolic links are represented by cons cells with car being the
@ -273,8 +274,17 @@
(di4 (dict-set di3 'students (di4 (dict-set di3 'students
(filter-members-by-predicate mb member-student?))) (filter-members-by-predicate mb member-student?)))
(di5 (dict-set di4 'destroyed (di5 (dict-set di4 'destroyed
(filter-members-by-predicate mb member-destroyed?)))) (filter-members-by-predicate mb member-destroyed?)))
di5)) (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. ;; Basic information about members-base in human-readable form.
(define (print-members-base-info mb) (define (print-members-base-info mb)

View file

@ -28,6 +28,7 @@
(module (module
month month
( (
make-month
month-valid? month-valid?
string->month string->month
month->string month->string
@ -44,6 +45,10 @@
(chicken format) (chicken format)
testing) 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 ;; Returns true if this is a valid month representation - a list with
;; two integer elements within the allowed range. ;; two integer elements within the allowed range.
(define (month-valid? m) (define (month-valid? m)