diff --git a/src/members-fees.scm b/src/members-fees.scm index a79aa0e..5a3b0c3 100644 --- a/src/members-fees.scm +++ b/src/members-fees.scm @@ -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)))))) ) diff --git a/src/members-print.scm b/src/members-print.scm index b470e13..2591238 100644 --- a/src/members-print.scm +++ b/src/members-print.scm @@ -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 diff --git a/src/notifications.scm b/src/notifications.scm index afe2835..bd31e9e 100644 --- a/src/notifications.scm +++ b/src/notifications.scm @@ -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)