diff --git a/.gitignore b/.gitignore index 2235288..289730e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ *.bak *.pdf +last_invoice_number diff --git a/gen.sh b/gen.sh index 6d6f0f1..dbb96e5 100755 --- a/gen.sh +++ b/gen.sh @@ -1,24 +1,70 @@ #!/bin/bash +# What you charge an hour +RATE=50 + +short_help() { + echo "$0 [output file]" + echo "--help for help" +} +long_help() { + short_help + echo "" + echo "The csv file should be setup as:" + echo "" + echo "Job , Hours " + echo "" + echo "With no empty line at the end." + echo "Paying company name is any string" + echo "The output argument is optional and will by default output to invoice-.pdf" +} + +CSV="" if [[ -z $1 ]]; then - echo First argument must be a csv containing: jobs,hours + short_help exit +elif [[ $1 = "--help" ]]; then + long_help + exit +else + CSV=$1 fi +COMPANY="" if [[ -z $2 ]]; then - echo Second argument must be the name of who you are billing + short_help exit +else + COMPANY=$2 fi +# Increment a global invoice number +INV_FILE="last_invoice_number" +INV_NUM=0 +if [[ -f $INV_FILE ]]; then + INV_NUM=$(expr $(cat $INV_FILE) + 1) +else + INV_NUM=1 +fi +echo $INV_NUM > $INV_FILE +# 3rd argument is output location (optional) +OUTPUT="invoice-${INV_NUM}.pdf" +if [[ ! -z $3 ]]; then + OUTPUT=$3 +fi + +# Parse the CSV into: Label;Hrs;Cost TMP=$(mktemp) -cat $1 | awk -F, '{ sum += $2 }; { print $1 ";" $2 ";" $2 * 50 } END { print "Total" ";" sum ";" sum * 50}' > $TMP +cat $CSV | RATE=$RATE awk -F, '{ sum += $2 }; { print $1 ";" $2 ";" $2 * ENVIRON["RATE"] } END { print "Total" ";" sum ";" sum * ENVIRON["RATE"]}' > $TMP -# Last line -# Everything but the last line +# TOTAL = Last line +# BODY = Everything but the last line TOTAL=$(cat $TMP | tail -n 1) \ BODY=$(cat $TMP | head -n -1) \ - COMPANY=$2 \ - envsubst < template.mm | groff -t -mm -T pdf > output.pdf + COMPANY=$COMPANY \ + INVOICE_NUM=$INV_NUM \ + RATE=$RATE \ + envsubst < template.mm | groff -t -mm -T pdf > $OUTPUT rm $TMP diff --git a/template.mm b/template.mm index 16792bd..fd6e752 100644 --- a/template.mm +++ b/template.mm @@ -16,7 +16,7 @@ LR. Cooies Unlimited;(123) 456-7890 123 Sesame St.;cookie@example.com Dumpster 1;\*[DT] -Nicevile FL;Invoice ID #001 +Nicevile FL;Invoice ID #${INVOICE_NUM} .TE \# Billing info @@ -36,6 +36,6 @@ ${TOTAL} .TE .PP -If you have any questions please reach out at any of the provided contacts above. +Hours were charged at $${RATE}/hr. If you have any questions please reach out at any of the provided contacts above. Thank you for your business!