]> git.plutz.net Git - confetti/blob - ledgers/account.sh
styles and translations ledgers
[confetti] / ledgers / account.sh
1 #!/bin/sh
2
3 credit() {
4   printf '%+03i\n' "$1" \
5   | sed -E 's;[0-9]{2}$;d&;; :0 s;([0-9])([0-9]{3}[dm]);\1m\2;; t0; y;dm;,.;'
6 }
7
8 if [ "$REQUEST_METHOD" = POST ]; then
9   uid="$(POST uid)"
10   cfile="$(grep -lxF "UID;:${uid}" "${_DATA}/vcard/"*.vcf || grep -lxF "UID:${uid}" "${_DATA}/vcard/"*.vcf)"
11   REDIRECT "${_BASE}/ledgers/account.sh?card=${cfile##*/}"
12 fi
13
14 . "${_EXEC}/cgilite/storage.sh"
15 . "${_EXEC}/pdiread.sh"
16 . "${_EXEC}/cards/l10n.sh"
17 . "${_EXEC}/cards/widgets.sh"
18
19 cardfile="${_DATA}/vcard/$(GET card |PATH)"
20 if [ ! -f "$cardfile" ]; then
21   SET_COOKIE 0 message="Invalid account: $cardfile"
22   REDIRECT "${_BASE}/ledgers/"
23 fi
24
25 cledger="${cardfile##*/}"
26 cledger="${_DATA}/ledgers/vcf.${cledger%.vcf}.account"
27
28 { card="$(pdi_load "$cardfile")"
29   cat <<-EOF
30         [h1 $(l10n Payments)]
31         [div .card #${cardfile##*/}
32           [div .section .basic . $(
33             card_item "$card" FN GENDER NICKNAME BDAY X-ZACK-JOINDATE X-ZACK-LEAVEDATE SOUND PHOTO LOGO
34           )]
35           [div .section .phone   . $(card_item "$card" TEL)]
36           [div .section .message . $(card_item "$card" EMAIL IMPP URL)]
37           [div .section .address . $(card_item "$card" ADR X-IBAN)]
38           [div .section .note    . $(card_item "$card" NOTE)]
39           [div .section .attendance [h3 $(l10n course_attendance) ] [ul
40             $(grep -F "     ${cardfile##*/}" "$_DATA/mappings/attendance" |while read each discard; do
41               printf '[li [a .item .attendance href="%s/courses#%s" . %s]]' \
42                      "${_BASE}" "$each" \
43                      "$(pdi_value "$(pdi_load "$_DATA/ical/$each")" SUMMARY || l10n "(unnamed course)" |unescape |HTML)"
44             done |sort -k7)]
45             $(card_item "$card" CATEGORIES)
46           ]
47         ]
48         EOF
49   printf '[table .transactions [thead
50           [tr [th .date . %s][th .orig . %s][th .reference . %s][th .amount . %s][th .balance . %s]]' \
51          "$(l10n Date)" "$(l10n Originator)" "$(l10n "Reference Text")" "$(l10n Amount)" "$(l10n Balance)"
52   printf '][tbody'
53   cnt="$(pdi_count "$card" X-IBAN)"
54   while [ "$cnt" -gt 0 ]; do
55     pdi_value "$card" X-IBAN "$cnt" |RXLITERAL
56     cnt=$((cnt - 1))
57   done \
58   | {
59     while read -r iban; do
60       grep -hE "^[^\t]+ [^\t]+  ${iban} " "${_DATA}/ledgers/"*.tbl
61     done
62     if [ -f "$cledger" ]; then
63       :
64     fi
65   } \
66   | sort -n -k2 \
67   | { total=0
68     while read -r date dtstamp iban accname subject amount; do
69       total=$((total + amount))
70       printf '[tr [td .date . %s][td .orig [span . %s][span . %s]][td .reference . %s][td .amount . %s][td .balance . %s]]' \
71              "$date" "$(HTML "$iban")" \
72              "$(UNSTRING "$accname" |HTML)" "$(UNSTRING "$subject" |HTML)" \
73              "$(credit "$amount")" "$(credit "$total")"
74     done
75   }
76   printf '[tr [th colspan=5 . %s]]' "$(l10n 'Manual Record')"
77   printf '[tr [td .date [input type=date placeholder="%s" name=tdate]]
78               [td .orig [input id=trec_once  type=radio name="trec" value="once" selected]
79                         [label for=trec_once  . %s]<br/>
80                         [input id=trec_month type=radio name="trec" value="month"]
81                         [label for=trec_month . %s]
82                         [input type=date name="trec_until" placeholder="%s"]]
83               [td .reference . [textarea placeholder="%s" name=treference]]
84               [td .amount colspan=2 [input type=number placeholder="%s" name=tamount value=0.00 step=.01]]' \
85        "$(l10n Date)" "$(l10n once)" "$(l10n "monthly until")" "$(l10n until)" "$(l10n "Reference Text")" "$(l10n Amount)"
86   printf ']]]'
87 } \
88 | yield_page ledgers