Last active
February 6, 2017 08:36
-
-
Save oskarth/917c96be08768eef72a59fd2b75e3a99 to your computer and use it in GitHub Desktop.
Script to generate Ledger entries that distribute a cost over several days
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# | |
# Generate Ledger entries that distribute a cost over several days. | |
# http://www.ledger-cli.org/ | |
# | |
# Example usage: | |
# ./bin/distribute-cost Expenses:Food:Groceries 500 TWD 2017/02/05 7 | |
# | |
# -- oskarth | |
import sys | |
from datetime import datetime, timedelta | |
if len(sys.argv) != 6: | |
print "Wrong number of arguments" | |
print "Example usage:" | |
print "./distribute-cost Expenses:Misc:Buffer 150 USD 2017/02/05 7" | |
sys.exit(1) | |
category = sys.argv[1] | |
total = float(sys.argv[2]) | |
currency = sys.argv[3] | |
date = datetime.strptime(sys.argv[4], "%Y/%m/%d") | |
days = int(sys.argv[5]) | |
part = (total*100 // days) / 100 | |
rest = (total*100 % days) / 100 | |
d1 = datetime.strftime(date, "%Y/%m/%d") | |
part_str = "{:.2f}".format(part) | |
rest_str ="{:.2f}".format(rest) | |
if not (abs(float(part * days + rest) - total) <= 0.01): | |
print "ERROR: Part and rest don't add up" | |
print float(part * days + rest), "vs", total | |
sys.exit(1) | |
print "".join([" ", category, " ", rest_str, | |
" ", currency, " ; [=", d1, "]"]) | |
for n in range(days): | |
dn = datetime.strftime(date + timedelta(days=n), "%Y/%m/%d") | |
print "".join([" ", category, " ", part_str, | |
" ", currency, " ; [=", dn, "]"]) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
➜ finance git:(master) ✗ ./bin/distribute-cost Expenses:Misc:Buffer 150 USD 2017/02/01 28 | |
Expenses:Misc:Buffer 0.20 USD ; [=2017/02/01] | |
Expenses:Misc:Buffer 5.35 USD ; [=2017/02/01] | |
Expenses:Misc:Buffer 5.35 USD ; [=2017/02/02] | |
Expenses:Misc:Buffer 5.35 USD ; [=2017/02/03] | |
Expenses:Misc:Buffer 5.35 USD ; [=2017/02/04] | |
Expenses:Misc:Buffer 5.35 USD ; [=2017/02/05] | |
Expenses:Misc:Buffer 5.35 USD ; [=2017/02/06] | |
Expenses:Misc:Buffer 5.35 USD ; [=2017/02/07] | |
Expenses:Misc:Buffer 5.35 USD ; [=2017/02/08] | |
Expenses:Misc:Buffer 5.35 USD ; [=2017/02/09] | |
Expenses:Misc:Buffer 5.35 USD ; [=2017/02/10] | |
Expenses:Misc:Buffer 5.35 USD ; [=2017/02/11] | |
Expenses:Misc:Buffer 5.35 USD ; [=2017/02/12] | |
Expenses:Misc:Buffer 5.35 USD ; [=2017/02/13] | |
Expenses:Misc:Buffer 5.35 USD ; [=2017/02/14] | |
Expenses:Misc:Buffer 5.35 USD ; [=2017/02/15] | |
Expenses:Misc:Buffer 5.35 USD ; [=2017/02/16] | |
Expenses:Misc:Buffer 5.35 USD ; [=2017/02/17] | |
Expenses:Misc:Buffer 5.35 USD ; [=2017/02/18] | |
Expenses:Misc:Buffer 5.35 USD ; [=2017/02/19] | |
Expenses:Misc:Buffer 5.35 USD ; [=2017/02/20] | |
Expenses:Misc:Buffer 5.35 USD ; [=2017/02/21] | |
Expenses:Misc:Buffer 5.35 USD ; [=2017/02/22] | |
Expenses:Misc:Buffer 5.35 USD ; [=2017/02/23] | |
Expenses:Misc:Buffer 5.35 USD ; [=2017/02/24] | |
Expenses:Misc:Buffer 5.35 USD ; [=2017/02/25] | |
Expenses:Misc:Buffer 5.35 USD ; [=2017/02/26] | |
Expenses:Misc:Buffer 5.35 USD ; [=2017/02/27] | |
Expenses:Misc:Buffer 5.35 USD ; [=2017/02/28] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment