Fix computing expected income based on actual fees and discounts.
This commit is contained in:
parent
dc3044026c
commit
15888b7e3e
2 changed files with 40 additions and 29 deletions
|
@ -30,6 +30,7 @@
|
||||||
(
|
(
|
||||||
lookup-member-fee
|
lookup-member-fee
|
||||||
member-calendar
|
member-calendar
|
||||||
|
make-member-calendar-entry
|
||||||
member-calendar-first-month
|
member-calendar-first-month
|
||||||
member-calendar-last-month
|
member-calendar-last-month
|
||||||
member-calendar-query
|
member-calendar-query
|
||||||
|
@ -82,15 +83,17 @@
|
||||||
(if (cal-month>? cm last-month)
|
(if (cal-month>? cm last-month)
|
||||||
(reverse cal)
|
(reverse cal)
|
||||||
(loop (cal-month-add cm)
|
(loop (cal-month-add cm)
|
||||||
(cons (list cm
|
(cons (with-current-month
|
||||||
(with-current-month
|
cm
|
||||||
cm
|
(make-member-calendar-entry mr))
|
||||||
(brmember-flags mr))
|
|
||||||
(with-current-month
|
|
||||||
cm
|
|
||||||
(brmember-spec-fee mr)))
|
|
||||||
cal))))))
|
cal))))))
|
||||||
|
|
||||||
|
;; Assumes current-month is specified correctly
|
||||||
|
(define (make-member-calendar-entry mr)
|
||||||
|
(list (*current-month*)
|
||||||
|
(brmember-flags mr)
|
||||||
|
(brmember-spec-fee mr)))
|
||||||
|
|
||||||
;; Returns the first month of the calendar
|
;; Returns the first month of the calendar
|
||||||
(define (member-calendar-first-month mc)
|
(define (member-calendar-first-month mc)
|
||||||
(caar mc))
|
(caar mc))
|
||||||
|
|
|
@ -500,7 +500,17 @@
|
||||||
(null? (cdr dsa)))
|
(null? (cdr dsa)))
|
||||||
#f
|
#f
|
||||||
(cadr dsa))))
|
(cadr dsa))))
|
||||||
(let* ((members ;; Pass 1
|
(let* ((raw-members
|
||||||
|
(sort
|
||||||
|
(if destroyed?
|
||||||
|
(find-members-by-predicate MB (lambda x #t))
|
||||||
|
(if only-active?
|
||||||
|
(find-members-by-predicate MB (lambda (mr)
|
||||||
|
(brmember-active? mr)))
|
||||||
|
(find-members-by-predicate MB (lambda (mr)
|
||||||
|
(not (brmember-destroyed? mr))))))
|
||||||
|
brmember<?))
|
||||||
|
(members ;; Pass 1
|
||||||
(map
|
(map
|
||||||
(lambda (mr)
|
(lambda (mr)
|
||||||
(let* ((balance (member-balance mr))
|
(let* ((balance (member-balance mr))
|
||||||
|
@ -522,15 +532,7 @@
|
||||||
total
|
total
|
||||||
balance
|
balance
|
||||||
)))
|
)))
|
||||||
(sort
|
raw-members))
|
||||||
(if destroyed?
|
|
||||||
(find-members-by-predicate MB (lambda x #t))
|
|
||||||
(if only-active?
|
|
||||||
(find-members-by-predicate MB (lambda (mr)
|
|
||||||
(brmember-active? mr)))
|
|
||||||
(find-members-by-predicate MB (lambda (mr)
|
|
||||||
(not (brmember-destroyed? mr))))))
|
|
||||||
brmember<?)))
|
|
||||||
(balances (map (lambda (m)
|
(balances (map (lambda (m)
|
||||||
(list-ref m 6))
|
(list-ref m 6))
|
||||||
members)))
|
members)))
|
||||||
|
@ -598,19 +600,25 @@
|
||||||
(map (lambda (member)
|
(map (lambda (member)
|
||||||
(min 0 (list-ref member 5)))
|
(min 0 (list-ref member 5)))
|
||||||
members)))
|
members)))
|
||||||
(let* ((ns (foldl (lambda (acc member)
|
(let* ((flst
|
||||||
(cons (+ (car acc) (if (eq? 'student (cadr member)) 1 0))
|
(map (compose member-calendar-entry->fee make-member-calendar-entry)
|
||||||
(+ (cdr acc) (if (eq? 'active (cadr member)) 1 0))))
|
(filter brmember-active? raw-members)))
|
||||||
(cons 0 0)
|
(amts (sort (delete-duplicates flst) <))
|
||||||
members))
|
(sums
|
||||||
(students (car ns))
|
(map
|
||||||
(full (cdr ns)))
|
(lambda (amt)
|
||||||
|
(cons amt
|
||||||
|
(length (filter (lambda (v) (= v amt)) flst))))
|
||||||
|
amts))
|
||||||
|
)
|
||||||
(print "Expected income: "
|
(print "Expected income: "
|
||||||
(+ (* (lookup-member-fee 'normal) full)
|
(string-intersperse (map
|
||||||
(* (lookup-member-fee 'student) students))
|
(lambda (p)
|
||||||
" (" full " full members + " students " students)"))
|
(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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue