Files
bill-generator/gen.sh
2026-01-22 18:18:08 -07:00

77 lines
2.1 KiB
Bash
Executable File

#!/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 <hrs.csv> <Paying Company Name> [output file]"
echo "$0 -2 <hrs.csv> <items.csv> <Paying Company Name> [output file]"
echo ""
echo "CSV files should be <name>,<value>."
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-<num>.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