X-Git-Url: http://git.plutz.net/?a=blobdiff_plain;f=ledgers%2Faccount.sh;h=9d3329936e08d25ee74c3248b7bff216bd913fb1;hb=refs%2Fheads%2Fmaster;hp=a92694ffee0cd9801a79001b413f5851a6d6ed00;hpb=919a0cfd686d6cc28b54d823c2e3f37a46a4b2b1;p=confetti diff --git a/ledgers/account.sh b/ledgers/account.sh index a92694f..9d33299 100755 --- a/ledgers/account.sh +++ b/ledgers/account.sh @@ -1,25 +1,58 @@ #!/bin/sh -if [ "$REQUEST_METHOD" = POST ]; then - uid="$(POST uid)" +credit() { + printf '%+04i\n' "$1" \ + | sed -E 's;[0-9]{2}$;d&;; :0 s;([0-9])([0-9]{3}[dm]);\1m\2;; t0; y;dm;,.;' +} + +if uid="$(POST uid)"; then cfile="$(grep -lxF "UID;:${uid}" "${_DATA}/vcard/"*.vcf || grep -lxF "UID:${uid}" "${_DATA}/vcard/"*.vcf)" REDIRECT "${_BASE}/ledgers/account.sh?card=${cfile##*/}" fi +. "${_EXEC}/cgilite/storage.sh" . "${_EXEC}/pdiread.sh" . "${_EXEC}/cards/l10n.sh" . "${_EXEC}/cards/widgets.sh" +. "${_EXEC}/datetime.sh" -cardfile="${_DATA}/vcard/$(GET card |PATH)" -if [ ! -f "$cardfile" ]; then +cardfile="$(GET card |PATH)" cardfile="${cardfile##*/}" +if [ ! -f "${_DATA}/vcard/$cardfile" ]; then SET_COOKIE 0 message="Invalid account: $cardfile" REDIRECT "${_BASE}/ledgers/" fi -{ card="$(pdi_load "$cardfile")" +cledger="${_DATA}/ledgers/vcf.${cardfile%.vcf}.account" + +if tid="$(POST tid)"; then + if [ "$tid" != "$(transid "$cledger")" ]; then + SET_COOKIE 0 message="Ledger was changed since last edit" + REDIRECT "$REQUEST_URI" + fi + tdate="$(isdate "$(POST tdate)")" + tref="$(POST tref |grep -m1 -xE '.+')" + tamount="$(POST tamount \ + | sed -E ' + s;^([\+-]?[0-9]+)[\.,]([0-9][0-9])$;\1\2;; + s;^([\+-]?[0-9]+)$;&00;; + ' | grep -m1 -xE '[\+-]?[0-9]+')" + # debug "TDATE: $tdate TREF: $tref AMOUNT: $tamount" + if ! [ "$tdate" -a "$tref" -a "$tamount" ]; then + SET_COOKIE 0 message="Transaction info invalid" + REDIRECT "$REQUEST_URI" + fi + tdtstamp="$(date -ud "$tdate" +%s)" + printf '%s %i %s \ %s %i\n' \ + "${tdate}" "${tdtstamp}" "$(STRING "${cardfile%.vcf}")" \ + "$(STRING "$tref")" "${tamount}" \ + >>"${cledger}" + REDIRECT "$REQUEST_URI" +fi + +{ card="$(pdi_load "${_DATA}/vcard/$cardfile")" cat <<-EOF [h1 $(l10n Payments)] - [div .card #${cardfile##*/} + [div .card #${cardfile} [div .section .basic . $( card_item "$card" FN GENDER NICKNAME BDAY X-ZACK-JOINDATE X-ZACK-LEAVEDATE SOUND PHOTO LOGO )] @@ -28,7 +61,7 @@ fi [div .section .address . $(card_item "$card" ADR X-IBAN)] [div .section .note . $(card_item "$card" NOTE)] [div .section .attendance [h3 $(l10n course_attendance) ] [ul - $(grep -F " ${cardfile##*/}" "$_DATA/mappings/attendance" |while read each discard; do + $(grep -F " ${cardfile}" "$_DATA/mappings/attendance" |while read each discard; do printf '[li [a .item .attendance href="%s/courses#%s" . %s]]' \ "${_BASE}" "$each" \ "$(pdi_value "$(pdi_load "$_DATA/ical/$each")" SUMMARY || l10n "(unnamed course)" |unescape |HTML)" @@ -36,19 +69,58 @@ fi $(card_item "$card" CATEGORIES) ] ] - [ul .transactions - $(cnt="$(pdi_count "$card" X-IBAN)" - while [ "$cnt" -gt 0 ]; do - pdi_value X-IBAN "$cnt" |RXLITERAL - cnt=$((cnt - 1)) - done \ - | while read -r iban; do - printf '[li . ' - grep -E "^[^\t]+ [^\t]+ ${iban} " |HTML - printf ']' - done - )] EOF - + cat <<-EOF + [form method=POST + [hidden "tid" "$(transid "${cledger}")"] + [table .transactions + [thead [tr + [th .date . $(l10n Date)][th .orig . $(l10n Originator)] + [th .reference . $(l10n "Reference Text")] + [th .amount . $(l10n Amount)][th .balance . $(l10n Balance)] + ]] + [tbody + EOF + cnt="$(pdi_count "$card" X-IBAN)" + { while [ "$cnt" -gt 0 ]; do + pdi_value "$card" X-IBAN "$cnt" |RXLITERAL + cnt=$((cnt - 1)) + done + RXLITERAL "${cardfile%.vcf}"; echo + } |debug \ + | while read -r iban; do + grep -hE "^[^\t]+ [^\t]+ ${iban} " "${_DATA}/ledgers/"* + done \ + | sort -n -k2 \ + | { total=0 + while read -r date dtstamp iban accname reftext amount; do + total=$((total + amount)) + if [ "$iban" = "${cardfile%.vcf}" ]; then + printf '[tr [td .date . %s][td .orig [span . %s][span . %s]][td .reference . %s] + [td .amount . %s][td .balance . %s]]' \ + "$date" "$(l10n "Credit Account")" \ + "$(UNSTRING "$accname" |HTML)" "$(UNSTRING "$reftext" |HTML)" \ + "$(credit "$amount")" "$(credit "$total")" + else + printf '[tr [td .date . %s][td .orig [span . %s][span . %s]][td .reference . %s] + [td .amount . %s][td .balance . %s]]' \ + "$date" "$(HTML "$iban")" \ + "$(UNSTRING "$accname" |HTML)" "$(UNSTRING "$reftext" |HTML)" \ + "$(credit "$amount")" "$(credit "$total")" + fi + done + } + cat <<-EOF + [tr [th colspan=5 . $(l10n 'Manual Record')]] + [tr [td .date + [input type=date placeholder="$(l10n Date)" name=tdate value="$(date +%F)"] + [input type=checkbox id=rr_month name=recur value=monthly] + [label for=rr_month $(l10n Recur Monthly)] + ][td .orig ] + [td .reference . [textarea placeholder="$(l10n "Reference Text")" name=tref]] + [td .amount [input type=number placeholder="$(l10n Amount)" name=tamount value=0.00 step=.01]] + [td .balance [button type=submit . $(l10n Submit)]] + ]]]] + EOF } \ | yield_page ledgers