diff --git a/reports/monthly_expenses.lua b/reports/monthly_expenses.lua new file mode 100644 index 0000000..0640c9c --- /dev/null +++ b/reports/monthly_expenses.lua @@ -0,0 +1,49 @@ +function account_series_map(accounts, report) + map = {} + + for i=1,100 do -- we're not messing with accounts more than 100 levels deep + all_handled = true + for id, acct in pairs(accounts) do + if not map[id] then + all_handled = false + if not acct.parent then + map[id] = report:series(acct.name) + elseif map[acct.parent.accountid] then + map[id] = map[acct.parent.accountid]:series(acct.name) + end + end + end + if all_handled then + return map + end + end + + error("Accounts nested more than 100 levels deep") +end + +function generate() + year = date.now().year + account_type = account.Expense + + accounts = get_accounts() + r = report.new(12) + series_map = account_series_map(accounts, r) + + for month=1,12 do + balance = nil + begin_date = date.new(year, month, 1) + end_date = date.new(year, month+1, 1) + + r:label(month, tostring(begin_date)) + + for id, acct in pairs(accounts) do + series = series_map[id] + if acct.type == account_type then + balance = acct:balance(begin_date, end_date) + series:value(month, balance.amount) + end + end + end + + return r +end diff --git a/reports/test.lua b/reports/test.lua deleted file mode 100644 index e81d3d6..0000000 --- a/reports/test.lua +++ /dev/null @@ -1,8 +0,0 @@ -accounts = get_accounts() - -for id, account in pairs(accounts) do - print(account, account.security) - a = account:balance(date.new("2015-12-01"), date.new("2017-12-01")) - b = account:balance(date.new("2015-06-01"), date.new("2015-12-01")) - print(a, b, a+b, account:balance()) -end