complex-bill #1

Merged
Oliver merged 2 commits from complex-bill into master 2026-01-23 01:51:19 +00:00
5 changed files with 99 additions and 12 deletions
Showing only changes of commit 4d1342782d - Show all commits

11
end.mm Normal file
View 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
View File

@@ -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
View 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
View 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
View 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