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-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-keys:card
|
(convert-member-key:month
|
||||||
(convert-member-key:credit
|
(convert-member-keys:card
|
||||||
(convert-member-keys:markers->periods m 'suspend 'student))
|
(convert-member-key:credit
|
||||||
'card 'desfire))
|
(convert-member-keys:markers->periods m 'suspend 'student))
|
||||||
|
'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.
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue