71 lines
1.4 KiB
Bash
Executable File
71 lines
1.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# What you charge an hour
|
|
RATE=50
|
|
|
|
short_help() {
|
|
echo "$0 <file.csv> <Paying Company Name> [output file]"
|
|
echo "--help for help"
|
|
}
|
|
long_help() {
|
|
short_help
|
|
echo ""
|
|
echo "The csv file should be setup as:"
|
|
echo ""
|
|
echo "Job <string>, Hours <number>"
|
|
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-<num>.pdf"
|
|
}
|
|
|
|
CSV=""
|
|
if [[ -z $1 ]]; then
|
|
short_help
|
|
exit
|
|
elif [[ $1 = "--help" ]]; then
|
|
long_help
|
|
exit
|
|
else
|
|
CSV=$1
|
|
fi
|
|
|
|
COMPANY=""
|
|
if [[ -z $2 ]]; then
|
|
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 $CSV | RATE=$RATE awk -F, '{ sum += $2 }; { print $1 ";" $2 ";" $2 * ENVIRON["RATE"] } END { print "Total" ";" sum ";" sum * ENVIRON["RATE"]}' > $TMP
|
|
|
|
# TOTAL = Last line
|
|
# BODY = Everything but the last line
|
|
TOTAL=$(cat $TMP | tail -n 1) \
|
|
BODY=$(cat $TMP | head -n -1) \
|
|
COMPANY=$COMPANY \
|
|
INVOICE_NUM=$INV_NUM \
|
|
RATE=$RATE \
|
|
envsubst < template.mm | groff -t -mm -T pdf > $OUTPUT
|
|
|
|
rm $TMP
|