74 lines
2.1 KiB
Bash
Executable File
74 lines
2.1 KiB
Bash
Executable File
#!/bin/bash
|
|
DATA_HOME="$XDG_DATA_HOME/bill-generator"
|
|
source "$XDG_CONFIG_HOME/bill-generator/ident"
|
|
# Need to be set to the installed location
|
|
TEMPLATE_1COL="$DATA_HOME/1col.template.mm"
|
|
TEMPLATE_2COL="$DATA_HOME/2col.template.mm"
|
|
INV_FILE="$DATA_HOME/last_invoice_number"
|
|
|
|
print_help() {
|
|
echo "$(basename $0) -1 <hrs.csv> <Paying Company Name> [output file]"
|
|
echo "$(basename $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_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 < $TEMPLATE_1COL | 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 < $TEMPLATE_2COL | groff -t -mm -T pdf > $OUTPUT
|
|
else
|
|
echo First arg should be either -1 or -2
|
|
fi
|