}
list_invoices(){
+ [ -d invoices/ ] || return 0
+
+ printf '[h1 Open]'
+ for i in invoices/*; do case "$(line <$i)" in
+ *status=open*) list_invoice "$i";;
+ *status=*) :;;
+ *) list_invoice "$i";;
+ esac; done
+
+ for n in resent:Resent sent:Sent paid:Paid cancelled:Cancelled; do
+ printf '[h1 %s]' "${n#*:}"
+ for i in invoices/*; do case "$(line <$i)" in
+ *status=${n%:*}*) list_invoice "$i";;
+ esac; done
+ done
+}
+
+list_invoice(){
+ local i="$1"
local sender client date number vat vatrate iban bic hourly \
- taxtype nett tax gross total
+ taxtype nett tax gross total status
- [ -d invoices/ ] && for i in invoices/*; do
- read -r sender client date number vat vatrate hourly x<<-EOF
+ read -r sender client date number vat vatrate hourly status x<<-EOF
$(sed q "$i")
EOF
- [ ! -f "senders/${sender#sender=}" ] \
- && sender="(unset)" \
- || read -r sender iban bic x<"senders/${sender#sender=}"
+ [ ! -f "senders/${sender#sender=}" ] \
+ && sender="(unset)" \
+ || read -r sender iban bic x<"senders/${sender#sender=}"
- [ ! -f "clients/${client#client=}" ] \
- && client="(unset)" \
- || read -r client hourly x<"clients/${client#client=}"
+ [ ! -f "clients/${client#client=}" ] \
+ && client="(unset)" \
+ || read -r client hourly x<"clients/${client#client=}"
- [ "${date#date=}" -ge 0 ] 2>&- \
- && date="$(date -d "@${date#date=}" +%x)" \
- || date="(unset)"
+ [ "${date#date=}" -ge 0 ] 2>&- \
+ && date="$(date -d "@${date#date=}" +%x)" \
+ || date="(unset)"
- read -r taxtype nett tax gross x<<-EOF
+ read -r taxtype nett tax gross x<<-EOF
$(invoice_total "${i#invoices/}")
EOF
- case $taxtype in
- nett) total="${nett} € + VAT";;
- gross) total="${gross} € incl. VAT";;
- *) total="${gross} €";;
- esac
-
- printf '[div .invoice
- [h2
- %s]
- [label From:] %s [label To:] %s [label on] %s
- [label Amount:] %s
- [a href="/invoices/%s" Edit]
- ]' "$(UNSTRING "${number#number=}" |HTML)" \
- "$(UNSTRING "${sender#address=}" |sed q |HTML)" \
- "$(UNSTRING "${client#address=}" |sed q |HTML)" "$(HTML "$date")" \
- "$total" \
- "$(HTML ${i#invoices/})"
- done
+ case $taxtype in
+ nett) total="${nett} € + VAT";;
+ gross) total="${gross} € incl. VAT";;
+ *) total="${gross} €";;
+ esac
+
+ case $status in
+ status=sent|status=resent|status=paid|status=cancelled)
+ status="${status#status=}"
+ ;;
+ *) status=open;;
+ esac
+
+ printf '[div .invoice
+ [h2
+ %s]
+ [label From:] %s [label To:] %s [label on] %s
+ [label Amount:] %s
+ [a href="/invoices/%s" Edit]
+ ]' "$(UNSTRING "${number#number=}" |HTML)" \
+ "$(UNSTRING "${sender#address=}" |sed q |HTML)" \
+ "$(UNSTRING "${client#address=}" |sed q |HTML)" "$(HTML "$date")" \
+ "$total" \
+ "$(HTML ${i#invoices/})"
}
edit_invoice(){
local id="$1" sender client date number vat vatrate caddress hourly \
- taxtype nett tax gross
+ taxtype nett tax gross status
if [ -f "invoices/$id" ]; then
- read -r sender client date number vat vatrate hourly x<<-EOF
+ read -r sender client date number vat vatrate hourly status x<<-EOF
$(sed q "invoices/$id")
EOF
fi
+ case $status in
+ status=sent|status=resent|status=paid|status=cancelled)
+ status="${status#status=}"
+ ;;
+ *) status=open;;
+ esac
+
[ "${date#date=}" -ge 0 ] 2>&- \
&& date="$(date -d "@${date#date=}" +%F)" \
|| date="$(date +%F)"
esac)
]]
]
+ [select name=status
+ [option value=open $( [ $status = open ] && printf selected=selected ) Open]
+ [option value=sent $( [ $status = sent ] && printf selected=selected ) Sent]
+ [option value=resent $( [ $status = resent ] && printf selected=selected ) Resent]
+ [option value=paid $( [ $status = paid ] && printf selected=selected ) Paid]
+ [option value=cancelled $( [ $status = cancelled ] && printf selected=selected ) Cancelled]
+ ]
[submit "genpdf" "$tid" Export PDF]
[submit "update" "$tid" Update]
]
[ "$n" -gt "$extra" ] && extra="$n"
done
- { printf 'sender=%s client=%s date=%s number=%s vat=%s vatrate=%s hourly=%s\n' \
+ { printf 'sender=%s client=%s date=%s number=%s vat=%s vatrate=%s hourly=%s status=%s\n' \
"$(POST sender)" "$(POST client)" \
"$(date -d "$(POST date)" +%s)" \
"$(POST number |STRING)" \
"$(POST vat |grep -m1 -xE 'smallbusiness|gross|nett')" \
"$(POST vatrate |grep -m1 -xE '[0-9]+')" \
- "$(POST hourly |grep -m1 -xE '[0-9]+')"
+ "$(POST hourly |grep -m1 -xE '[0-9]+')" \
+ "$(POST status |grep -m1 -xE 'open|sent|resent|paid|cancelled')"
for n in $(seq 1 $extra); do
printf 'time=%s work=%s hours=%s\n' \
"$(POST time $n |STRING)" "$(POST work $n |STRING)" \