shithub: rech

ref: 996ae644683888ebb0e23d6173f6f5239f72175b
dir: /bin/balance/

View raw version
#!/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 "USt.%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 "USt.%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 "Summe\t%.2f EUR\n", total
}'

echo '.TS
expand linesize(5);
l s
l n .
_
\fBBetriebseinnahmen\fR
_'


# Einnahmen
awk -F '\t' $"dumpscript /tmp/invoices /tmp/in

echo '.T&
l s
l n .
=
\fBBetriebsausgaben\fR
_'

# Ausgaben
awk -F '\t' $"dumpscript /tmp/out

echo '.T&
l s
l n .
=
\fBErgebnis\fR
_'

# Ergebnis
cat /tmp/in /tmp/outinv | awk -F '\t' '
{
	if ($2 < 0)
		totalout += $2
	else
		totalin += $2
}
END {
	printf "Gesamteinnahmen\t%.2f EUR\n", totalin
	printf "Gesamtausgaben\t%.2f EUR\n", totalout
	printf "\\fBGewinn vor Steuern\\fR\t\\fB%.2f EUR\\fR\n", totalin + totalout
}
'

echo '_
.TE'