From 0d20884637228097b8e7e2b1f01ac2157295e647 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pant=C5=AF=C4=8Dek?= Date: Thu, 16 Mar 2023 21:21:39 +0100 Subject: [PATCH] Credit conversions. --- Makefile | 2 +- member-file.scm | 38 +++++++++++++++++++++++++++++++++----- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 66ebea0..7ed7aa2 100644 --- a/Makefile +++ b/Makefile @@ -50,7 +50,7 @@ brmsaptool: $(BRMSAPTOOL-DEPS) $(CSC) -o $@ $< brmsaptool-static: $(BRMSAPTOOL-OBJS) - $(CSC) -static -k -o $@ $(BRMSAPTOOL-SOURCES) + $(CSC) -static -o $@ $(BRMSAPTOOL-SOURCES) .PHONY: clean clean: diff --git a/member-file.scm b/member-file.scm index 23338bd..1ebd25a 100644 --- a/member-file.scm +++ b/member-file.scm @@ -176,10 +176,12 @@ ;; Converts given key in member info dictionary from period markers ;; list to periods. (define (convert-member-key:markers->periods m k) - (dict-set m k - (period-markers->periods - (sort-period-markers - (dict-ref m k '()))))) + (if (dict-has-key? m k) + (dict-set m k + (period-markers->periods + (sort-period-markers + (dict-ref m k '())))) + m)) ;; Converts all given keys using period-markers->periods. (define (convert-member-keys:markers->periods m . ks) @@ -190,6 +192,32 @@ (loop (convert-member-key:markers->periods m (car ks)) (cdr ks))))) + ;; Credit values contain amount as the first token. Anything after + ;; the first whitespace character is added as label of the credit + ;; transaction. The result is cons of number and string. + (define (convert-member-value:credit v) + (let* ((va (string-split v)) + (v0 (car va)) + (vr (substring v (string-length v0)))) + (cons (string->number v0) + vr))) + + ;; If member information dictionary contains 'credit, all elements of + ;; the list under this key are converted to cons of number (amount) + ;; and string (label / description). + (define (convert-member-key:credit m) + (if (dict-has-key? m 'credit) + (dict-set m 'credit + (reverse + (map convert-member-value:credit + (dict-ref m 'credit)))) + m)) + + ;; All conversions in one place + (define (convert-member-keys m) + (convert-member-key:credit + (convert-member-keys:markers->periods m 'suspend 'student))) + ;; Fills-in the defaults (define (make-default-member-info) (dict-set @@ -204,7 +232,7 @@ (r (make-default-member-info)) (line-number 1)) (if (null? ls) - (convert-member-keys:markers->periods r 'suspend 'student) + (convert-member-keys r) (let ((p (split-member-line (car ls) file-name lines line-number))) (loop (cdr ls) (if p