From 0d08d96509852f8eaca3fa2cc88b077299f7f3ef Mon Sep 17 00:00:00 2001 From: christopherlam Date: Thu, 9 Feb 2017 20:37:34 +0800 Subject: initial commit --- reports/multicolumn.py | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 reports/multicolumn.py diff --git a/reports/multicolumn.py b/reports/multicolumn.py new file mode 100644 index 0000000..b8e016b --- /dev/null +++ b/reports/multicolumn.py @@ -0,0 +1,51 @@ +""" +report.py +Generate a multicolumn report for an account +""" + +import sys +import datetime + +from gnucashxml import from_filename + +def multisplit(book, account, date1, date2): + mybook = from_filename(book) + account = mybook.find_account(account) + + if account is None: + raise "Cannot find account "+account + + splits = [j for j in account.splits if date1 <= j.transaction.date.date() <= date2] + + otheraccountlist = [] + for split in splits: # For every transaction in this account + for multisplits in split.transaction.splits: # Round up its list of accounts + if multisplits.account not in otheraccountlist: # Compare with list of known accounts + otheraccountlist.append(multisplits.account) # Add it to list if not known + + print("Date",end=",") + for i in otheraccountlist: + print(i.fullname(), end=",") + print('Description') + + totals = {} + for split in sorted(splits): + print(split.transaction.date.date(),end=",") + for j in otheraccountlist: + value = 0 + value = sum([i.value for i in split.transaction.splits if j==i.account]) + totals[j] = totals.setdefault(j, 0) + value + print(value,end=",") + + print(split.transaction.description) + + print("",end=",") + for i in otheraccountlist: + print(totals[i], end=",") + print("Total") + +if __name__ == "__main__": + date1=datetime.date(2000,1,1) + date2=datetime.date(2017,1,1)) + + multisplit("test.gnucash", "Salary", date1, date2) -- cgit v1.2.3