Use the same algorithm for expected income in summary emails.
This commit is contained in:
parent
dcf6d8937f
commit
c458dc3900
3 changed files with 25 additions and 22 deletions
|
@ -41,12 +41,14 @@
|
||||||
member-calendar->table
|
member-calendar->table
|
||||||
members-summary
|
members-summary
|
||||||
member-calendar-entry->fee
|
member-calendar-entry->fee
|
||||||
|
get-expected-income-string
|
||||||
)
|
)
|
||||||
|
|
||||||
(import scheme
|
(import scheme
|
||||||
(chicken base)
|
(chicken base)
|
||||||
(chicken format)
|
(chicken format)
|
||||||
(chicken sort)
|
(chicken sort)
|
||||||
|
(chicken string)
|
||||||
srfi-1
|
srfi-1
|
||||||
configuration
|
configuration
|
||||||
brmember
|
brmember
|
||||||
|
@ -206,4 +208,25 @@
|
||||||
(cons 0 0)
|
(cons 0 0)
|
||||||
members)))
|
members)))
|
||||||
|
|
||||||
|
(define (get-expected-income-string mb)
|
||||||
|
(let* ((flst
|
||||||
|
(map (compose member-calendar-entry->fee make-member-calendar-entry)
|
||||||
|
(find-members-by-predicate mb brmember-active?)))
|
||||||
|
(amts (sort (delete-duplicates flst) <))
|
||||||
|
(sums
|
||||||
|
(map
|
||||||
|
(lambda (amt)
|
||||||
|
(cons amt
|
||||||
|
(length (filter (lambda (v) (= v amt)) flst))))
|
||||||
|
amts)))
|
||||||
|
(string-append
|
||||||
|
"Expected income: "
|
||||||
|
(string-intersperse (map
|
||||||
|
(lambda (p)
|
||||||
|
(format "~A*~A" (cdr p) (car p)))
|
||||||
|
sums)
|
||||||
|
" + ")
|
||||||
|
" = "
|
||||||
|
(number->string (foldl + 0 (map (lambda (p) (* (car p) (cdr p))) sums))))))
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
|
@ -600,25 +600,7 @@
|
||||||
(map (lambda (member)
|
(map (lambda (member)
|
||||||
(min 0 (list-ref member 5)))
|
(min 0 (list-ref member 5)))
|
||||||
members)))
|
members)))
|
||||||
(let* ((flst
|
(print (get-expected-income-string MB)))))
|
||||||
(map (compose member-calendar-entry->fee make-member-calendar-entry)
|
|
||||||
(filter brmember-active? raw-members)))
|
|
||||||
(amts (sort (delete-duplicates flst) <))
|
|
||||||
(sums
|
|
||||||
(map
|
|
||||||
(lambda (amt)
|
|
||||||
(cons amt
|
|
||||||
(length (filter (lambda (v) (= v amt)) flst))))
|
|
||||||
amts))
|
|
||||||
)
|
|
||||||
(print "Expected income: "
|
|
||||||
(string-intersperse (map
|
|
||||||
(lambda (p)
|
|
||||||
(format "~A*~A" (cdr p) (car p)))
|
|
||||||
sums)
|
|
||||||
" + ")
|
|
||||||
" = "
|
|
||||||
(foldl + 0 (map (lambda (p) (* (car p) (cdr p))) sums)))))))
|
|
||||||
|
|
||||||
(define (unpaired-table mb . args)
|
(define (unpaired-table mb . args)
|
||||||
(apply
|
(apply
|
||||||
|
|
|
@ -149,9 +149,7 @@
|
||||||
(income (+ (* (lookup-member-fee 'normal) full)
|
(income (+ (* (lookup-member-fee 'normal) full)
|
||||||
(* (lookup-member-fee 'student) students)))
|
(* (lookup-member-fee 'student) students)))
|
||||||
(income-lst
|
(income-lst
|
||||||
(list (format "Expected income: ~A CZK" income)
|
(list (get-expected-income-string mb)))
|
||||||
(format " ~A full members" full)
|
|
||||||
(format " ~A students" students)))
|
|
||||||
(unpaired (mbase-unpaired mb))
|
(unpaired (mbase-unpaired mb))
|
||||||
(unpaired-lst
|
(unpaired-lst
|
||||||
(if (null? unpaired)
|
(if (null? unpaired)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue