complex-bill #1
11
end.mm
Normal file
11
end.mm
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
.1C 1
|
||||||
|
.DS C
|
||||||
|
.PP
|
||||||
|
.B
|
||||||
|
Total: $${TOTAL}
|
||||||
|
.R
|
||||||
|
.DE
|
||||||
|
.PP
|
||||||
|
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!
|
||||||
|
|
||||||
47
gen.sh
47
gen.sh
@@ -4,7 +4,7 @@
|
|||||||
RATE=50
|
RATE=50
|
||||||
|
|
||||||
short_help() {
|
short_help() {
|
||||||
echo "$0 <file.csv> <Paying Company Name> [output file]"
|
echo "$0 <hrs.csv> <items.csv> <Paying Company Name> [output file]"
|
||||||
echo "--help for help"
|
echo "--help for help"
|
||||||
}
|
}
|
||||||
long_help() {
|
long_help() {
|
||||||
@@ -30,12 +30,20 @@ else
|
|||||||
CSV=$1
|
CSV=$1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
COMPANY=""
|
CSV2=""
|
||||||
if [[ -z $2 ]]; then
|
if [[ -z $2 ]]; then
|
||||||
short_help
|
short_help
|
||||||
exit
|
exit
|
||||||
else
|
else
|
||||||
COMPANY=$2
|
CSV2=$2
|
||||||
|
fi
|
||||||
|
|
||||||
|
COMPANY=""
|
||||||
|
if [[ -z $3 ]]; then
|
||||||
|
short_help
|
||||||
|
exit
|
||||||
|
else
|
||||||
|
COMPANY=$3
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Increment a global invoice number
|
# Increment a global invoice number
|
||||||
@@ -50,21 +58,38 @@ echo $INV_NUM > $INV_FILE
|
|||||||
|
|
||||||
# 3rd argument is output location (optional)
|
# 3rd argument is output location (optional)
|
||||||
OUTPUT="invoice-${INV_NUM}.pdf"
|
OUTPUT="invoice-${INV_NUM}.pdf"
|
||||||
if [[ ! -z $3 ]]; then
|
if [[ ! -z $4 ]]; then
|
||||||
OUTPUT=$3
|
OUTPUT=$4
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Parse the CSV into: Label;Hrs;Cost
|
# Parse the CSV into: Label;Hrs;Cost
|
||||||
TMP=$(mktemp)
|
HRS_TMP=$(mktemp)
|
||||||
cat $CSV | RATE=$RATE awk -F, '{ sum += $2 }; { print $1 ";" $2 ";" $2 * ENVIRON["RATE"] } END { print "Total" ";" sum ";" sum * ENVIRON["RATE"]}' > $TMP
|
cat $CSV | RATE=$RATE awk -F, '{ sum += $2 }; { print $1 ";" $2 ";" $2 * ENVIRON["RATE"] } END { print "Sub-Total" ";" sum ";" sum * ENVIRON["RATE"]}' > $HRS_TMP
|
||||||
|
|
||||||
|
CONSUME_TMP=$(mktemp)
|
||||||
|
cat $CSV2 | awk -F, '{ sum += $2 }; { print $1 ";" $2 } END { print "Sub-Total" ";" sum }' > $CONSUME_TMP
|
||||||
|
|
||||||
|
HRS_COST=$(cat $HRS_TMP | tail -n 1 | awk -F";" '{ print $3 }')
|
||||||
|
CONSUME_COST=$(cat $CONSUME_TMP | tail -n 1 | awk -F";" '{ print $2 }')
|
||||||
|
|
||||||
|
TOTAL_COST=$(A=$HRS_COST B=$CONSUME_COST awk 'BEGIN{ print ENVIRON["A"] + ENVIRON["B"] }')
|
||||||
|
|
||||||
# TOTAL = Last line
|
# TOTAL = Last line
|
||||||
# BODY = Everything but the last line
|
# BODY = Everything but the last line
|
||||||
TOTAL=$(cat $TMP | tail -n 1) \
|
|
||||||
BODY=$(cat $TMP | head -n -1) \
|
|
||||||
COMPANY=$COMPANY \
|
COMPANY=$COMPANY \
|
||||||
INVOICE_NUM=$INV_NUM \
|
INVOICE_NUM=$INV_NUM \
|
||||||
|
envsubst < start.mm > 1.tmp
|
||||||
|
HRS_TOTAL=$(cat $HRS_TMP | tail -n 1) \
|
||||||
|
HRS_BODY=$(cat $HRS_TMP | head -n -1) \
|
||||||
|
envsubst < hours.tbl > 2.tmp
|
||||||
|
ITEM_TOTAL=$(cat $CONSUME_TMP | tail -n 1) \
|
||||||
|
ITEM_BODY=$(cat $CONSUME_TMP | head -n -1) \
|
||||||
|
envsubst < item.tbl > 3.tmp
|
||||||
|
TOTAL=$TOTAL_COST \
|
||||||
RATE=$RATE \
|
RATE=$RATE \
|
||||||
envsubst < template.mm | groff -t -mm -T pdf > $OUTPUT
|
envsubst < end.mm > 4.tmp
|
||||||
|
|
||||||
rm $TMP
|
cat 1.tmp 2.tmp 3.tmp 4.tmp | groff -t -mm -T pdf > $OUTPUT
|
||||||
|
|
||||||
|
rm $HRS_TMP
|
||||||
|
rm $CONSUME_TMP
|
||||||
|
|||||||
14
hours.tbl
Normal file
14
hours.tbl
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
.TS
|
||||||
|
nospaces center tab(;);
|
||||||
|
CbSS
|
||||||
|
CiCi|Ci
|
||||||
|
RN|N.
|
||||||
|
Work Performed
|
||||||
|
Job;Hours;Cost
|
||||||
|
_
|
||||||
|
${HRS_BODY}
|
||||||
|
_
|
||||||
|
.T&
|
||||||
|
RiNi|Ni.
|
||||||
|
${HRS_TOTAL}
|
||||||
|
.TE
|
||||||
15
item.tbl
Normal file
15
item.tbl
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
.NCOL
|
||||||
|
.TS
|
||||||
|
nospaces center tab(;);
|
||||||
|
CbS
|
||||||
|
Ci|Ci
|
||||||
|
R|N.
|
||||||
|
Other
|
||||||
|
Item;Cost
|
||||||
|
_
|
||||||
|
${ITEM_BODY}
|
||||||
|
_
|
||||||
|
.T&
|
||||||
|
Ri|Ni.
|
||||||
|
${ITEM_TOTAL}
|
||||||
|
.TE
|
||||||
22
start.mm
Normal file
22
start.mm
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
\# Make headers bold
|
||||||
|
.ds HF 3 3
|
||||||
|
\# Make lvl 1 headers 20pt, lvl 2 18pt
|
||||||
|
.ds HP 20 18
|
||||||
|
.S 12
|
||||||
|
\# Disable page header
|
||||||
|
.PH ''''
|
||||||
|
\# Centered block
|
||||||
|
.DS C
|
||||||
|
.HU "${COMPANY}'s Bill"
|
||||||
|
.DE
|
||||||
|
\# Contact info
|
||||||
|
.TS
|
||||||
|
nospaces center tab(;);
|
||||||
|
LR.
|
||||||
|
Cooies Unlimited;(123) 456-7890
|
||||||
|
123 Sesame St.;cookie@example.com
|
||||||
|
Dumpster 1;\*[DT]
|
||||||
|
Nicevile FL;Invoice ID #${INVOICE_NUM}
|
||||||
|
.TE
|
||||||
|
|
||||||
|
.2C
|
||||||
Reference in New Issue
Block a user