Use month data type for joined key.
This commit is contained in:
parent
cd2a08e2ec
commit
5f62bb319e
3 changed files with 36 additions and 8 deletions
|
@ -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-key:month
|
||||
(convert-member-keys:card
|
||||
(convert-member-key:credit
|
||||
(convert-member-keys:markers->periods m 'suspend 'student))
|
||||
'card 'desfire))
|
||||
'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.
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue