Finish the migration.
This commit is contained in:
parent
ced789ca06
commit
0d649c2fd0
4 changed files with 70 additions and 70 deletions
|
@ -36,7 +36,7 @@
|
|||
(chicken sort)
|
||||
(chicken format)
|
||||
(chicken irregex)
|
||||
dictionary
|
||||
util-dict-list
|
||||
members-base
|
||||
member-record)
|
||||
|
||||
|
@ -46,12 +46,12 @@
|
|||
mb
|
||||
(lambda (mr)
|
||||
(and (member-active? mr)
|
||||
(dict-has-key? (dict-ref mr 'info) type)
|
||||
(not (null? (dict-ref (dict-ref mr 'info) type)))))))
|
||||
(ldict-contains? (ldict-ref mr 'info) type)
|
||||
(not (null? (ldict-ref (ldict-ref mr 'info) type)))))))
|
||||
(recs (map (lambda (mr)
|
||||
(let ((mi (dict-ref mr 'info)))
|
||||
(cons (dict-ref mi 'nick)
|
||||
(dict-ref mi type))))
|
||||
(let ((mi (ldict-ref mr 'info)))
|
||||
(cons (ldict-ref mi 'nick)
|
||||
(ldict-ref mi type))))
|
||||
rmb))
|
||||
(srecs (sort recs
|
||||
(lambda (a b)
|
||||
|
|
|
@ -54,7 +54,7 @@
|
|||
(chicken sort)
|
||||
testing
|
||||
util-list
|
||||
dictionary
|
||||
util-dict-list
|
||||
primes
|
||||
member-record
|
||||
ansi
|
||||
|
@ -71,25 +71,25 @@
|
|||
(define (load-members dn . opts)
|
||||
(let ((progress? (and (not (null? opts))
|
||||
(car opts))))
|
||||
(make-dict
|
||||
(make-ldict
|
||||
`((members
|
||||
.
|
||||
,(with-progress%
|
||||
progress? "members"
|
||||
(let* ((fss (load-members-dir dn))
|
||||
(tot (sub1 (length (dict-keys fss))))
|
||||
(mb0 (dict-map
|
||||
(tot (sub1 (length (ldict-keys fss))))
|
||||
(mb0 (ldict-map
|
||||
(lambda (symfn symlinks prg)
|
||||
(progress%-advance (/ prg tot))
|
||||
(members-dir-load-member dn
|
||||
symfn
|
||||
symlinks))
|
||||
fss))
|
||||
(mb1 (dict-reduce (make-dict)
|
||||
(mb1 (ldict-reduce (make-ldict)
|
||||
(lambda (acc symfn mr)
|
||||
(dict-set acc (dict-ref mr 'id) mr))
|
||||
(ldict-set acc (ldict-ref mr 'id) mr))
|
||||
mb0))
|
||||
(mb (dict-reduce '()
|
||||
(mb (ldict-reduce '()
|
||||
(lambda (acc id mr)
|
||||
(cons mr acc))
|
||||
mb1)))
|
||||
|
@ -97,7 +97,7 @@
|
|||
|
||||
;; Returns the internal members list
|
||||
(define (members-base-members mb)
|
||||
(dict-ref mb 'members))
|
||||
(ldict-ref mb 'members))
|
||||
|
||||
;; Gets member based by generic predicate
|
||||
(define (find-member-by-predicate mb pred)
|
||||
|
@ -114,7 +114,7 @@
|
|||
(find-member-by-predicate
|
||||
mb
|
||||
(lambda (mr)
|
||||
(eq? (dict-ref mr 'id) id))))
|
||||
(eq? (ldict-ref mr 'id) id))))
|
||||
|
||||
;; Returns member record found by id
|
||||
(define (find-member-by-nick mb nick)
|
||||
|
@ -122,8 +122,8 @@
|
|||
mb
|
||||
(lambda (mr)
|
||||
(string-ci=?
|
||||
(dict-ref
|
||||
(dict-ref mr 'info)
|
||||
(ldict-ref
|
||||
(ldict-ref mr 'info)
|
||||
'nick)
|
||||
nick))))
|
||||
|
||||
|
@ -136,7 +136,7 @@
|
|||
|
||||
;; Returns all ids found in the database
|
||||
(define (list-members-ids mb)
|
||||
(map (lambda (mr) (dict-ref mr 'id))
|
||||
(map (lambda (mr) (ldict-ref mr 'id))
|
||||
(members-base-members mb)))
|
||||
|
||||
;; Returns a list of members which match given predicate.
|
||||
|
@ -153,25 +153,25 @@
|
|||
|
||||
;; Returns all nicks found in the database
|
||||
(define (list-members-nicks mb)
|
||||
(map (lambda (mr) (dict-ref (dict-ref mr 'info) 'nick))
|
||||
(map (lambda (mr) (ldict-ref (ldict-ref mr 'info) 'nick))
|
||||
(members-base-members mb)))
|
||||
|
||||
;; Returns dictionary with statistics about the members base.
|
||||
(define (members-base-info mb-arg)
|
||||
(let* ((members (filter-members-by-predicate mb-arg member-record-usable?))
|
||||
(di0 (make-dict))
|
||||
(di1 (dict-set di0 'invalid
|
||||
(di0 (make-ldict))
|
||||
(di1 (ldict-set di0 'invalid
|
||||
(filter (compose not is-4digit-prime? member-id) members)))
|
||||
(di2 (dict-set di1 'active
|
||||
(di2 (ldict-set di1 'active
|
||||
(filter member-active? members)))
|
||||
(di3 (dict-set di2 'suspended
|
||||
(di3 (ldict-set di2 'suspended
|
||||
(filter member-suspended? members)))
|
||||
(di4 (dict-set di3 'students
|
||||
(di4 (ldict-set di3 'students
|
||||
(filter member-student? members)))
|
||||
(di5 (dict-set di4 'destroyed
|
||||
(di5 (ldict-set di4 'destroyed
|
||||
(filter member-destroyed? members)))
|
||||
(di6 (dict-set di5 'month (*current-month*)))
|
||||
(di7 (dict-set di6 'total members)))
|
||||
(di6 (ldict-set di5 'month (*current-month*)))
|
||||
(di7 (ldict-set di6 'total members)))
|
||||
di7))
|
||||
|
||||
(define (members-base-oldest-month mb)
|
||||
|
@ -186,12 +186,12 @@
|
|||
(if (month<? month (*current-month*))
|
||||
(let ((bi (parameterize ((*current-month* month))
|
||||
(members-base-info mb))))
|
||||
(let kloop ((row (list (dict-ref bi 'month)))
|
||||
(let kloop ((row (list (ldict-ref bi 'month)))
|
||||
(keys (cdr keys)))
|
||||
(if (null? keys)
|
||||
(mloop (cons (reverse row) data)
|
||||
(month-add month 1))
|
||||
(kloop (cons (length (dict-ref bi (car keys))) row)
|
||||
(kloop (cons (length (ldict-ref bi (car keys))) row)
|
||||
(cdr keys)))))
|
||||
(list keys (reverse data))))))
|
||||
|
||||
|
@ -213,7 +213,7 @@
|
|||
;; Returns new members base with member records matching the
|
||||
;; predicate processed by proc.
|
||||
(define (members-base-update mb pred? proc)
|
||||
(dict-set mb
|
||||
(ldict-set mb
|
||||
'members
|
||||
(map (lambda (mr)
|
||||
(if (pred? mr)
|
||||
|
@ -223,13 +223,13 @@
|
|||
|
||||
;; Adds unpaired transaction to given members-base
|
||||
(define (members-base-add-unpaired mb tr)
|
||||
(dict-set mb 'unpaired
|
||||
(ldict-set mb 'unpaired
|
||||
(cons tr
|
||||
(dict-ref mb 'unpaired '()))))
|
||||
(ldict-ref mb 'unpaired '()))))
|
||||
|
||||
;; Returns known unpaired transactions
|
||||
(define (members-base-unpaired mb)
|
||||
(dict-ref mb 'unpaired '()))
|
||||
(ldict-ref mb 'unpaired '()))
|
||||
|
||||
;; Returns the list of emails of all active members sorted
|
||||
;; alphabetically
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
member-record
|
||||
members-base
|
||||
bank-fio
|
||||
dictionary
|
||||
util-dict-list
|
||||
member-fees
|
||||
period
|
||||
configuration
|
||||
|
@ -178,16 +178,16 @@
|
|||
|
||||
;; Adds all balances - payments are converted to CZK in member-payments-total
|
||||
(define (member-sort-payments mr)
|
||||
(dict-set mr
|
||||
(ldict-set mr
|
||||
'payments
|
||||
(sort (dict-ref mr 'payments '())
|
||||
(sort (ldict-ref mr 'payments '())
|
||||
(lambda (a b)
|
||||
(string<? (bank-transaction-date a)
|
||||
(bank-transaction-date b))))))
|
||||
|
||||
;; Balances totals
|
||||
(define (member-balance mr)
|
||||
(make-dict `((fees . ,(member-fees-total mr))
|
||||
(make-ldict `((fees . ,(member-fees-total mr))
|
||||
(credit . ,(member-credit-total mr))
|
||||
(payment . ,(member-payments-total mr)))))
|
||||
|
||||
|
@ -195,9 +195,9 @@
|
|||
;; information
|
||||
(define (member-total-balance mr)
|
||||
(let* ((bal (member-balance mr))
|
||||
(fees (dict-ref bal 'fees 0))
|
||||
(credit (dict-ref bal 'credit 0))
|
||||
(payment (dict-ref bal 'payment)))
|
||||
(fees (ldict-ref bal 'fees 0))
|
||||
(credit (ldict-ref bal 'credit 0))
|
||||
(payment (ldict-ref bal 'payment)))
|
||||
(- (+ credit payment) fees)))
|
||||
|
||||
;; Total amount paid - calculated from payments
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
(chicken string)
|
||||
(chicken sort)
|
||||
(chicken format)
|
||||
dictionary
|
||||
util-dict-list
|
||||
member-record
|
||||
month
|
||||
util-list
|
||||
|
@ -63,9 +63,9 @@
|
|||
|
||||
;; Prints human-readable information
|
||||
(define (print-member-info mr)
|
||||
(let* ((id (dict-ref mr 'id))
|
||||
(aliases (dict-ref mr 'symlinks))
|
||||
(info (dict-ref mr 'info))
|
||||
(let* ((id (ldict-ref mr 'id))
|
||||
(aliases (ldict-ref mr 'symlinks))
|
||||
(info (ldict-ref mr 'info))
|
||||
(sinfo (sort info
|
||||
(lambda (a b)
|
||||
(string<?
|
||||
|
@ -87,7 +87,7 @@
|
|||
|
||||
;; Returns nicely formatted table
|
||||
(define (member-info->table mr)
|
||||
(let* ((aliases (dict-ref mr 'symlinks))
|
||||
(let* ((aliases (ldict-ref mr 'symlinks))
|
||||
(mid (member-id mr))
|
||||
(head (list (if (is-4digit-prime? mid)
|
||||
(list "ID:" mid)
|
||||
|
@ -101,14 +101,14 @@
|
|||
(sprintf "~A month~A" msm
|
||||
(if (> msm 1) "s" ""))))
|
||||
#f)))
|
||||
(info (dict-ref mr 'info))
|
||||
(sikeys (sort (dict-keys info)
|
||||
(info (ldict-ref mr 'info))
|
||||
(sikeys (sort (ldict-keys info)
|
||||
(lambda (a b)
|
||||
(string<?
|
||||
(symbol->string a)
|
||||
(symbol->string b)))))
|
||||
(body (map (lambda (k)
|
||||
(let ((v (dict-ref info k)))
|
||||
(let ((v (ldict-ref info k)))
|
||||
(case k
|
||||
((card desfire credit)
|
||||
(list k
|
||||
|
@ -154,9 +154,9 @@
|
|||
#:row0-border #t
|
||||
#:col-border #t))
|
||||
(let* ((balance (member-balance mr))
|
||||
(fees (dict-ref balance 'fees))
|
||||
(credit (dict-ref balance 'credit))
|
||||
(payment (dict-ref balance 'payment))
|
||||
(fees (ldict-ref balance 'fees))
|
||||
(credit (ldict-ref balance 'credit))
|
||||
(payment (ldict-ref balance 'payment))
|
||||
(total (- (+ credit payment) fees)))
|
||||
(print "Total fees: " fees)
|
||||
(print "Total credit: " credit)
|
||||
|
@ -167,8 +167,8 @@
|
|||
;; Nicely prints the member source with any errors recorded.
|
||||
(define (print-member-source mr)
|
||||
(let* ((lines (member-source mr))
|
||||
(file-name (dict-ref mr 'file-name))
|
||||
(hls (dict-ref mr 'highlights '())))
|
||||
(file-name (ldict-ref mr 'file-name))
|
||||
(hls (ldict-ref mr 'highlights '())))
|
||||
(print file-name ":")
|
||||
(print-source-listing
|
||||
lines
|
||||
|
@ -212,11 +212,11 @@
|
|||
(print "Known members: "
|
||||
(length nicks))
|
||||
(let* ((bi (members-base-info mb))
|
||||
(invalid-mrs (dict-ref bi 'invalid))
|
||||
(active-mrs (dict-ref bi 'active))
|
||||
(suspended-mrs (dict-ref bi 'suspended))
|
||||
(destroyed-mrs (dict-ref bi 'destroyed))
|
||||
(student-mrs (dict-ref bi 'students)))
|
||||
(invalid-mrs (ldict-ref bi 'invalid))
|
||||
(active-mrs (ldict-ref bi 'active))
|
||||
(suspended-mrs (ldict-ref bi 'suspended))
|
||||
(destroyed-mrs (ldict-ref bi 'destroyed))
|
||||
(student-mrs (ldict-ref bi 'students)))
|
||||
(print a:success " Active (" (length active-mrs) "): " a:default
|
||||
(member-records->string (sort active-mrs member<?) "~N~E"))
|
||||
(print a:warning " Suspended (" (length suspended-mrs) "): " a:default
|
||||
|
@ -252,12 +252,12 @@
|
|||
;; Prints nicely aligned members base info
|
||||
(define (print-members-base-table mb)
|
||||
(let* ((bi (members-base-info mb))
|
||||
(all-mrs (dict-ref bi 'total))
|
||||
(invalid-mrs (dict-ref bi 'invalid))
|
||||
(active-mrs (dict-ref bi 'active))
|
||||
(suspended-mrs (dict-ref bi 'suspended))
|
||||
(destroyed-mrs (dict-ref bi 'destroyed))
|
||||
(student-mrs (dict-ref bi 'students)))
|
||||
(all-mrs (ldict-ref bi 'total))
|
||||
(invalid-mrs (ldict-ref bi 'invalid))
|
||||
(active-mrs (ldict-ref bi 'active))
|
||||
(suspended-mrs (ldict-ref bi 'suspended))
|
||||
(destroyed-mrs (ldict-ref bi 'destroyed))
|
||||
(student-mrs (ldict-ref bi 'students)))
|
||||
(print "Known members: " (length all-mrs))
|
||||
(newline)
|
||||
(print
|
||||
|
@ -345,9 +345,9 @@
|
|||
(map
|
||||
(lambda (mr)
|
||||
(let* ((balance (member-balance mr))
|
||||
(fees (dict-ref balance 'fees))
|
||||
(credit (dict-ref balance 'credit))
|
||||
(payment (dict-ref balance 'payment))
|
||||
(fees (ldict-ref balance 'fees))
|
||||
(credit (ldict-ref balance 'credit))
|
||||
(payment (ldict-ref balance 'payment))
|
||||
(total (- (+ credit payment) fees)))
|
||||
(list (member-nick mr)
|
||||
(if (member-suspended? mr)
|
||||
|
@ -401,9 +401,9 @@
|
|||
a:default)
|
||||
)))
|
||||
members)
|
||||
(let* ((fees (foldl + 0 (map (lambda (b) (dict-ref b 'fees)) balances)))
|
||||
(credit (foldl + 0 (map (lambda (b) (dict-ref b 'credit)) balances)))
|
||||
(payment (foldl + 0 (map (lambda (b) (dict-ref b 'payment)) balances)))
|
||||
(let* ((fees (foldl + 0 (map (lambda (b) (ldict-ref b 'fees)) balances)))
|
||||
(credit (foldl + 0 (map (lambda (b) (ldict-ref b 'credit)) balances)))
|
||||
(payment (foldl + 0 (map (lambda (b) (ldict-ref b 'payment)) balances)))
|
||||
(total (- (+ credit payment) fees)))
|
||||
(list (list (ansi-string #:bold "Total")
|
||||
""
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue