diff --git a/Makefile b/Makefile index a66a779..353210f 100644 --- a/Makefile +++ b/Makefile @@ -251,7 +251,8 @@ bank-fio.so: bank-fio.o bank-fio.o: bank-fio.import.scm 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.o: members-payments.import.scm diff --git a/member-fees.scm b/member-fees.scm index 1e88997..2761421 100644 --- a/member-fees.scm +++ b/member-fees.scm @@ -36,7 +36,6 @@ member-calendar->fees member-fees-total member-credit-total - print-members-fees-table member-calendar->table ) @@ -153,21 +152,6 @@ (amounts (map car credit))) (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?) membertable mr) (let* ((mc (member-calendar mr)) diff --git a/member-record.scm b/member-record.scm index 78a2e8c..58a4d5e 100644 --- a/member-record.scm +++ b/member-record.scm @@ -65,6 +65,7 @@ member-record-add-payment member-payments + member-balances member-record-tests! ) @@ -345,6 +346,10 @@ (define (member-payments mr) (dict-ref mr 'payments '())) + ;; Balances totals + (define (member-balances mr) + (dict-ref mr 'balances (make-dict))) + ;; Self-tests (define (member-record-tests!) (run-tests diff --git a/members-payments.scm b/members-payments.scm index e53f8c2..29e1104 100644 --- a/members-payments.scm +++ b/members-payments.scm @@ -39,7 +39,10 @@ bank-account member-record members-base - bank-fio) + bank-fio + + dictionary + member-fees) ;; Merges bank account statement into members payment keys. The ;; payment key will be a list of transactions. @@ -77,11 +80,20 @@ (if apikeys-file (let* ((accounts (load-accounts (load-accounts-list apikeys-file)))) - (foldl members-payments-process-bank - mb - accounts)) + (map member-add-balances + (foldl members-payments-process-bank + mb + accounts))) 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 (define (member-payments-total mr) (foldl + 0 (map bank-transaction-amount diff --git a/members-print.scm b/members-print.scm index 4914964..164a50e 100644 --- a/members-print.scm +++ b/members-print.scm @@ -36,6 +36,7 @@ print-members-base-table print-members-base-stats print-members-ids-stats + print-members-fees-table ) (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