#!/usr/bin/env bash # shellcheck disable=SC2016 # Create invoices with hledger and pandoc. # cf hledger/examples/invoicing, https://hledger.org/invoicing.html, https://martinbetz.eu/articles/pandoc-invoices set -e #PROG=$(basename "$0") function usage() { cat <0' -N --layout=bare | tail -1 | awk '{print $1}') fi # on mac, use homebrew-installed GNU date if [ "$(builtin type -p gdate)" ]; then export date=gdate; else export date=date; fi YEAR=$($date +%Y) MONTH=$($date +%B) MON=$($date +%b) MM=$($date +%m) DD=$($date +%d) DAY=$($date +%-d) LM=$($date +%b --date "$DATECMDPERIOD") LMM=$($date +%m --date "$DATECMDPERIOD") # shellcheck disable=SC2001 INVOICEBASE=$(basename "$TEMPLATE" | sed -e 's/\..*//') INVOICEDATED=$INVOICEBASE$YEAR$LMM INVOICEMD=$INVOICEDATED".md" INVOICEPDF=$INVOICEDATED".pdf" CSS=$INVOICEBASE".css" HRS="${HRS:-0}" HRS=$(printf %4s "$HRS") EXP=$(printf %5.0f "$EXP") AMT=$(python3 -c "print(round( $HRS * $RATE ))") AMT=$(printf %5s "$AMT") REV=$(python3 -c "print(sum([ $FIXEDEXPS, $AMT ]))") REV=$(printf %5s "$REV") TOT=$(python3 -c "print(sum([ $FIXEDEXPS, $AMT, $EXP ]))") TOT=$(printf %5s "$TOT") export YEAR MONTH DAY LMM LM HRS AMT REV EXP TOT if [[ $MD != 1 && $PDF != 1 ]]; then # print markdown invoice envsubst '$YEAR:$MONTH:$DAY:$LMM:$LM:$HRS:$EXP:$AMT:$TOT' <"$TEMPLATE" else if [[ $MD = 1 ]]; then # save markdown invoice envsubst '$YEAR:$MONTH:$DAY:$LMM:$LM:$HRS:$EXP:$AMT:$TOT' <"$TEMPLATE" >"$INVOICEMD" echo "wrote $INVOICEMD" fi if [[ $PDF = 1 ]]; then # save pdf invoice envsubst '$YEAR:$MONTH:$DAY:$LMM:$LM:$HRS:$EXP:$AMT:$TOT' <"$TEMPLATE" \ | pandoc -t html5 --metadata title=" " --css "$CSS" -o "$INVOICEPDF" echo "wrote $INVOICEPDF" fi fi if [[ $TXN = 1 ]]; then # generate sample journal entries printf "\n--------------------------------------------------------------------------------\n\n" USTAXRATE=0.28 STTAXRATE=0.08 CLIENT=$INVOICEBASE USTAX=$(python3 -c "print(round( $REV * $USTAXRATE))") #USTAX=$(printf %5s "$USTAX") STTAX=$(python3 -c "print(round( $REV * $STTAXRATE))") #STTAX=$(printf %5s "$STTAX") TOTTAX=$(python3 -c "print($USTAX + $STTAX)") #TOTTAX=$(printf %5s "$TOTTAX") PTINC=$(python3 -c "print($REV - $TOTTAX)") #PTINC=$(printf %5s "$PTINC") envsubst '$CLIENT:$YEAR:$MM:$DD:$MON:$LMM:$LM:$REV:$EXP:$TOT:$USTAX:$STTAX:$TOTTAX:$PTINC' <