Use the same algorithm for expected income in summary emails.

This commit is contained in:
Dominik Pantůček 2024-02-09 14:44:24 +01:00
parent dcf6d8937f
commit c458dc3900
3 changed files with 25 additions and 22 deletions

View file

@ -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))))))
)

View file

@ -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

View file

@ -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)