X-Git-Url: https://git.plutz.net/?a=blobdiff_plain;f=invoices.cgi;h=cc505d4c52f3f09f7b9296811405f4b58906d551;hb=c9bb4a41908f01e2e9698d17cf1027255b53a47b;hp=f1a90e0b2ecd0268df3d884b770d572d1761303b;hpb=0f43b65d34a7da6db8e738b3f58cde0fe2e537d5;p=invoices diff --git a/invoices.cgi b/invoices.cgi index f1a90e0..cc505d4 100755 --- a/invoices.cgi +++ b/invoices.cgi @@ -2,35 +2,9 @@ _EXEC="$(realpath "${0%/*}")" . "$_EXEC/cgilite/cgilite.sh" +. "$_EXEC/cgilite/logging.sh" . "$_EXEC/cgilite/storage.sh" - -debug(){ - if [ $# = 0 ]; then - tee /dev/stderr - else - printf %s\\n "$*" >/dev/stderr - fi -} - -timeid(){ - # generate time based ID - # Fixme: Unix time stamps assumed to be 32bit always - d=$(date +%s) - { printf $( - while [ "$d" -gt 0 ]; do - printf \\%o\\n $((d % 256)) - d=$((d / 256)) - done |tac |tr -d \\n - ) - head -c5 /dev/urandom - } \ - | uuencode -m - \ - | sed -n '2{y;+/;:_;;p}' -} - -checkid(){ - grep -m 1 -xE '[0-9a-zA-Z:_]{12}'; -} +. "$_EXEC/cgilite/session.sh" yield_page(){ printf 'Content-Type: text/html; charset=utf-8\r\n\r\n' @@ -145,7 +119,7 @@ client_list(){ list_invoices(){ [ -d invoices/ ] && for i in invoices/*; do - read -r sender client date number vat<<-EOF + read -r sender client date number vat vatrate<<-EOF $(sed q "$i") EOF [ -f "senders/${sender#sender=}" ] \ @@ -173,7 +147,7 @@ list_invoices(){ edit_invoice(){ id="$1" if [ -f "invoices/$id" ]; then - read -r sender client date number vat<<-EOF + read -r sender client date number vat vatrate<<-EOF $(sed q "invoices/$id") EOF fi @@ -182,9 +156,7 @@ edit_invoice(){ && date="$(date -d "@${date#date=}" +%F)" \ || date="$(date +%F)" [ "${number#number=}" ] || number="number=$(date +%s)" - [ "${vat%=*}" = vat -a "${vat#vat=}" -ge 0 ] 2>&- \ - && vatrate="${vat#vat=}" \ - || vatrate=19 + [ "${vatrate#vatrate=}" -ge 0 ] 2>&- || vatrate="vatrate=19" cat <<-EOF [form method="POST" action="/update_invoice" @@ -206,13 +178,32 @@ edit_invoice(){ [label for=date Date:] [input #date name=date value="${date}" placeholder="YYYY-MM-TT"] - [radio "vat" "smallbusiness" #vatsb $([ "$vat" = smallbusiness ] && printf checked) ] + [radio "vat" "smallbusiness" #vatsb $([ "${vat#vat=}" = smallbusiness ] && printf checked) ] [label for=vatsb Small business exemption from VAT] - [radio "vat" "allgross" #vatgross $([ "$vat" = allgross ] && printf checked)] - [label for=vatgross All amounts are gross] - [radio "vat" "rate" #vatrate $([ "${vat%=*}" = vat ] && printf checked) ] - [label for=vatrate VAT Rate: [input type=number name="vatrate" value="${vatrate}"]% ] + [radio "vat" "nett" #vatnett $([ "${vat#vat=}" = nett ] && printf checked)] + [label for=vatnett Nett] + [radio "vat" "gross" #vatgross $([ "${vat#vat=}" = gross ] && printf checked)] + [label for=vatgross Gross] + [label for=vatrate VAT Rate: [input type=number name="vatrate" value="${vatrate#vatrate=}"]% ] + [table + [tr [th Date] [th Work] [th Hours] [th Price] ] +$({ sed 1d "invoices/$id"; printf 'time= work= hours=\n'; } \ + | while read -r time work hours; do + hours="$(UNSTRING "${hours#hours=}" |grep -m1 -xE '[0-9]+' || printf 0)" + printf '[tr + [td [textarea name=date +%s] ] + [td [textarea name=work +%s] ] + [td [input type=number name=hours value="%s"] ] + [td %s] + ]' "$(UNSTRING "${time#time=}" |HTML)" \ + "$(UNSTRING "${work#work=}" |HTML)" \ + "$hours" "$((hours * hourly)) €" + done +) + ] [submit "update" "update" Update] ] EOF @@ -273,12 +264,12 @@ case $info in id="$(POST id |checkid)" if [ "$(POST update)" = update -a "$id" ]; then mkdir -p invoices - vat="$(POST vat |grep -m1 -xE 'smallbusiness|allgross|rate' )" - printf 'sender=%s client=%s date=%s number=%s %s\n' \ + printf 'sender=%s client=%s date=%s number=%s vat=%s vatrate=%s\n' \ "$(POST sender)" "$(POST client)" \ "$(date -d "$(POST date)" +%s)" \ "$(POST number |STRING)" \ - "$([ "$vat" = rate ] && printf 'vat=%i' "$(POST vatrate)" || printf %s "$vat" )" \ + "$(POST vat |grep -m1 -xE 'smallbusiness|gross|nett')" \ + "$(POST vatrate |grep -m1 -xE '[0-9]+')" \ >"invoices/$id" fi REDIRECT "/invoice/$id"