#!/bin/bash # What you charge an hour export RATE=50 export COMPANY_NAME="Cookies Unlimited, LLC" export ADDR_LN_1="123 Sesasme St" export ADDR_LN_2="Dumpster 1" export ADDR_LN_3="12345, Nicevile, FL" export PHONE="(123) 456-7890" export EMAIL="cookie@exapmle.com" print_help() { echo "$0 -1 [output file]" echo "$0 -2 [output file]" echo "" echo "CSV files should be ,." echo "CSV files should have 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" } get_invoice_num() { # 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 echo $INV_NUM } read_hrs_csv() { TMP=$(mktemp) # Parse the CSV into: Label;Hrs;Cost cat $1 | RATE=$RATE awk -F, '{ sum += $2 }; { print $1 ";" $2 ";" $2 * ENVIRON["RATE"] } END { print sum ";" sum * ENVIRON["RATE"] }' > $TMP echo $TMP } read_items_csv() { TMP=$(mktemp) cat $1 | awk -F, '{ sum += $2 }; { print $1 ";" $2 } END { print sum }' > $TMP echo $TMP } if [[ -z $1 ]]; then print_help exit fi export INVOICE_NUM=$(get_invoice_num) OUTPUT="invoice-${INVOICE_NUM}.pdf" HRS_TMP=$(read_hrs_csv $2) export HRS_TOTAL=$(cat $HRS_TMP | tail -n 1) export HRS_BODY=$(cat $HRS_TMP | head -n -1) if [[ $1 = "-1" ]]; then if [[ ! -z $4 ]]; then OUTPUT=$4 fi export COMPANY=$3 envsubst < 1col.template.mm | groff -t -mm -T pdf > $OUTPUT elif [[ $1 = "-2" ]]; then if [[ ! -z $5 ]]; then OUTPUT=$5 fi HRS_COST=$(cat $HRS_TMP | tail -n 1 | awk -F";" '{ print $2 }') CONSUME_TMP=$(read_items_csv $3) CONSUME_COST=$(cat $CONSUME_TMP | tail -n 1 | awk -F";" '{ print $2 }') export ITEM_TOTAL=$(cat $CONSUME_TMP | tail -n 1) export ITEM_BODY=$(cat $CONSUME_TMP | head -n -1) export TOTAL=$(A=$HRS_COST B=$ITEM_TOTAL awk 'BEGIN{ print ENVIRON["A"] + ENVIRON["B"] }') export COMPANY=$4 envsubst < 2col.template.mm | groff -t -mm -T pdf > $OUTPUT else echo First arg should be either -1 or -2 fi