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

View file

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

View file

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