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
|
||||
members-summary
|
||||
member-calendar-entry->fee
|
||||
get-expected-income-string
|
||||
)
|
||||
|
||||
(import scheme
|
||||
(chicken base)
|
||||
(chicken format)
|
||||
(chicken sort)
|
||||
(chicken string)
|
||||
srfi-1
|
||||
configuration
|
||||
brmember
|
||||
|
@ -205,5 +207,26 @@
|
|||
(+ (cdr acc) (if (brmember-student? mr) 0 1))))
|
||||
(cons 0 0)
|
||||
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)
|
||||
(min 0 (list-ref member 5)))
|
||||
members)))
|
||||
(let* ((flst
|
||||
(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)))))))
|
||||
(print (get-expected-income-string MB)))))
|
||||
|
||||
(define (unpaired-table mb . args)
|
||||
(apply
|
||||
|
|
|
@ -149,9 +149,7 @@
|
|||
(income (+ (* (lookup-member-fee 'normal) full)
|
||||
(* (lookup-member-fee 'student) students)))
|
||||
(income-lst
|
||||
(list (format "Expected income: ~A CZK" income)
|
||||
(format " ~A full members" full)
|
||||
(format " ~A students" students)))
|
||||
(list (get-expected-income-string mb)))
|
||||
(unpaired (mbase-unpaired mb))
|
||||
(unpaired-lst
|
||||
(if (null? unpaired)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue