shithub: rech

ref: 521aed03530e987473d55abd50dfb263e1473181
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 "##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