Prepare for balances in totals table.

This commit is contained in:
Dominik Pantůček 2023-03-30 19:18:48 +02:00
parent 8f0d5acf0a
commit 606a208237
5 changed files with 40 additions and 21 deletions

View file

@ -251,7 +251,8 @@ bank-fio.so: bank-fio.o
bank-fio.o: bank-fio.import.scm bank-fio.o: bank-fio.import.scm
bank-fio.import.scm: $(BANK-FIO-SOURCES) bank-fio.import.scm: $(BANK-FIO-SOURCES)
MEMBERS-PAYMENTS-SOURCES=members-payments.scm bank-account.import.scm MEMBERS-PAYMENTS-SOURCES=members-payments.scm bank-account.import.scm \
dictionary.import.scm member-fees.import.scm
members-payments.so: members-payments.o members-payments.so: members-payments.o
members-payments.o: members-payments.import.scm members-payments.o: members-payments.import.scm

View file

@ -36,7 +36,6 @@
member-calendar->fees member-calendar->fees
member-fees-total member-fees-total
member-credit-total member-credit-total
print-members-fees-table
member-calendar->table member-calendar->table
) )
@ -153,21 +152,6 @@
(amounts (map car credit))) (amounts (map car credit)))
(foldl + 0 amounts))) (foldl + 0 amounts)))
;; Prints summary table of all fees and credits for all members
(define (print-members-fees-table MB)
(print
(table->string
(cons
(list "Member" "Fees" "Credit")
(map
(lambda (mr)
(list (member-nick mr)
(sprintf "\t~A" (member-fees-total mr))
(sprintf "\t~A" (member-credit-total mr))
))
(sort (filter-members-by-predicate MB member-active?) member<?)))
#:col-border #t #:row0-border #t)))
;; Nicely print calendar for given member ;; Nicely print calendar for given member
(define (member-calendar->table mr) (define (member-calendar->table mr)
(let* ((mc (member-calendar mr)) (let* ((mc (member-calendar mr))

View file

@ -65,6 +65,7 @@
member-record-add-payment member-record-add-payment
member-payments member-payments
member-balances
member-record-tests! member-record-tests!
) )
@ -345,6 +346,10 @@
(define (member-payments mr) (define (member-payments mr)
(dict-ref mr 'payments '())) (dict-ref mr 'payments '()))
;; Balances totals
(define (member-balances mr)
(dict-ref mr 'balances (make-dict)))
;; Self-tests ;; Self-tests
(define (member-record-tests!) (define (member-record-tests!)
(run-tests (run-tests

View file

@ -39,7 +39,10 @@
bank-account bank-account
member-record member-record
members-base members-base
bank-fio) bank-fio
dictionary
member-fees)
;; Merges bank account statement into members payment keys. The ;; Merges bank account statement into members payment keys. The
;; payment key will be a list of transactions. ;; payment key will be a list of transactions.
@ -77,11 +80,20 @@
(if apikeys-file (if apikeys-file
(let* ((accounts (load-accounts (let* ((accounts (load-accounts
(load-accounts-list apikeys-file)))) (load-accounts-list apikeys-file))))
(foldl members-payments-process-bank (map member-add-balances
mb (foldl members-payments-process-bank
accounts)) mb
accounts)))
mb)) mb))
;; Adds all balances
(define (member-add-balances mr)
(dict-set mr
'balances
(make-dict `((fees . ,(member-fees-total mr))
(credit . ,(member-credit-total mr))
(balance . ,(member-payments-total mr))))))
;; Total amount paid ;; Total amount paid
(define (member-payments-total mr) (define (member-payments-total mr)
(foldl + 0 (map bank-transaction-amount (foldl + 0 (map bank-transaction-amount

View file

@ -36,6 +36,7 @@
print-members-base-table print-members-base-table
print-members-base-stats print-members-base-stats
print-members-ids-stats print-members-ids-stats
print-members-fees-table
) )
(import scheme (import scheme
@ -320,4 +321,20 @@
", ") ", ")
")")))) ")"))))
;; Prints summary table of all fees and credits for all members
(define (print-members-fees-table MB)
(print
(table->string
(cons
(list "Member" "Fees" "Credit" "Payments" "Balance")
(map
(lambda (mr)
(let ((balances (member-balances mr)))
(list (member-nick mr)
(sprintf "\t~A" (member-fees-total mr))
(sprintf "\t~A" (member-credit-total mr))
)))
(sort (filter-members-by-predicate MB member-active?) member<?)))
#:col-border #t #:row0-border #t)))
) )