From d6d47e91fcb698e7e5619bd384ae7bdf74f475fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pant=C5=AF=C4=8Dek?= Date: Sat, 1 Apr 2023 22:30:42 +0200 Subject: [PATCH] Configurable bank directory. --- src/bbstool.scm | 5 ++++- src/members-payments.scm | 32 +++++++++++++++++++------------- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/bbstool.scm b/src/bbstool.scm index 718ea42..275c645 100644 --- a/src/bbstool.scm +++ b/src/bbstool.scm @@ -61,6 +61,7 @@ CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. (define -fname- (make-parameter #f)) (define -run-tests?- (make-parameter #f)) (define -web-dir- (make-parameter #f)) +(define -bank-dir- (make-parameter #f)) ;; Arguments parsing (command-line @@ -84,6 +85,8 @@ CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. (*table-border-style* (string->symbol style))) (-apikey (fname) "File with Fio API keys" (-apikeys-file- fname)) + (-bankdir (dir) "Where are bank CSV files" + (-bank-dir- dir)) "" "Query options:" (-mi (id) "Specify member by id" (-member-id- (string->number id))) @@ -139,7 +142,7 @@ CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. (if (-action-) (let ((mb (load-members (*members-directory*) #t))) (if (-needs-bank-) - (members-payments-process mb (-apikeys-file-)) + (members-payments-process mb (-apikeys-file-) (-bank-dir-)) mb)) #f)) diff --git a/src/members-payments.scm b/src/members-payments.scm index 852dc79..42636f3 100644 --- a/src/members-payments.scm +++ b/src/members-payments.scm @@ -38,6 +38,8 @@ (chicken io) (chicken irregex) (chicken sort) + (chicken process-context) + (chicken pathname) bank-account member-record members-base @@ -95,24 +97,28 @@ (read-lines (open-input-file apikeys)))) - ;; Loads all accounts - it expects .csv files in the current - ;; directory. - (define (load-accounts accounts-list) + ;; Loads all accounts - it expects .csv files in given directory. + (define (load-accounts accounts-list dir) (map (lambda (acc) - (bank-fio-parse (string-append acc ".csv"))) + (bank-fio-parse (make-pathname dir (string-append acc ".csv")))) accounts-list)) ;; If apikeys is not #f, loads the account numbers, loads bank ;; accounts and processes transactions. - (define (members-payments-process mb apikeys-file) - (if apikeys-file - (let* ((accounts (load-accounts - (load-accounts-list apikeys-file)))) - (map member-add-balance - (foldl members-payments-process-bank - mb - accounts))) - mb)) + (define (members-payments-process mb apikeys-file . dirs) + (let ((dir (if (null? dirs) + (current-directory) + (or (car dirs) + (current-directory))))) + (if apikeys-file + (let* ((accounts (load-accounts + (load-accounts-list apikeys-file) + dir))) + (map member-add-balance + (foldl members-payments-process-bank + mb + accounts))) + mb))) ;; Adds all balances - payments are converted to CZK in member-payments-total (define (member-add-balance mr)