ref: 521aed03530e987473d55abd50dfb263e1473181
dir: /bin/balance/
#!/bin/rc
rfork en
ramfs
datafiles=`{ls invoice/*/data.tsv}
cat $datafiles | awk -F '\t' '
!/^#/ && NF >= 4 {
number = $1
single = $2
vat = $3
cat = $4
cats[cat] = number * single
vats[vat] += cats[cat]
}
END {
for (c in cats) {
printf "%s\t%.2f\n", c, cats[c]
}
for (i in vats) {
if (i == 0)
continue;
printf "##VAT.%d##\t%.2f\n", i, vats[i] * i / 100.
}
}
' > /tmp/invoices
datafiles=`{ls in/*/data.tsv}
cat $datafiles | awk -F '\t' '
!/^#/ && NF >= 4 {
number = $1
total = $2
vat = $3
cat = $4
cats[cat] += total
vats[vat] += total
}
END {
for (c in cats) {
printf "%s\t%.2f\n", c, cats[c]
}
for (v in vats) {
printf "##VAT.%d##\t%.2f\n", v, vats[v] * v / 100.
}
}
' > /tmp/in
datafiles=`{ls out/*/*/data.tsv}
cat $datafiles | awk -F '\t' '
!/^#/ && NF >= 2 {
cat = $1
val = $2
sums[cat] += val
}
END {
for (c in sums) {
printf "%s\t%.2f\n", c, sums[c]
}
}
' > /tmp/out
awk -F '\t' '
{
$2 *= -1
printf "%s\t%.2f\n", $1, $2
}
' /tmp/out > /tmp/outinv
#################
dumpscript='
NF == 2 {
cat = $1
val = $2
cats[cat] += val
}
END {
for (c in cats) {
printf "%s\t%.2f EUR\n", c, cats[c]
total += cats[c]
}
print "_"
printf "##SUM##\t%.2f EUR\n", total
}'
test -r lib/balance_hdr.ms && cat lib/balance_hdr.ms
echo '.TS
expand linesize(5);
l s
l n .
_
\fB##TITLE_IN##\fR
_'
# Einnahmen
awk -F '\t' $"dumpscript /tmp/invoices /tmp/in
echo '.T&
l s
l n .
=
\fB##TITLE_OUT##\fR
_'
# Ausgaben
awk -F '\t' $"dumpscript /tmp/out
echo '.T&
l s
l n .
=
\fB##SUMMARY##\fR
_'
# Ergebnis
cat /tmp/in /tmp/outinv | awk -F '\t' '
{
if ($2 < 0)
totalout += $2
else
totalin += $2
}
END {
printf "##TOTAL_IN##\t%.2f EUR\n", totalin
printf "##TOTAL_OUT##\t%.2f EUR\n", totalout
printf "\\fB##TOTAL_PROFIT_NOTAX##\\fR\t\\fB%.2f EUR\\fR\n", totalin + totalout
}
'
echo '_
.TE'
test -r lib/balance_ftr.ms && cat lib/balance_ftr.ms