1
0
mirror of https://github.com/aclindsa/moneygo.git synced 2024-09-21 12:20:04 -04:00
moneygo/reports/monthly_expenses.lua

50 lines
1.1 KiB
Lua
Raw Normal View History

function account_series_map(accounts, tabulation)
2017-02-11 09:27:34 -05:00
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] = tabulation:series(acct.name)
2017-02-11 09:27:34 -05:00
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
2017-02-22 08:26:21 -05:00
error("Accounts nested (at least) 100 levels deep")
2017-02-11 09:27:34 -05:00
end
function generate()
year = date.now().year
account_type = account.Expense
accounts = get_accounts()
2017-06-23 06:01:54 -04:00
t = tabulation.new(12)
t:title(year .. " Monthly Expenses")
series_map = account_series_map(accounts, t)
2017-02-11 09:27:34 -05:00
for month=1,12 do
begin_date = date.new(year, month, 1)
end_date = date.new(year, month+1, 1)
2017-06-23 06:01:54 -04:00
t:label(month, tostring(begin_date))
2017-02-11 09:27:34 -05:00
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
2017-06-23 06:01:54 -04:00
return t
2017-02-11 09:27:34 -05:00
end