mirror of
				https://github.com/aclindsa/moneygo.git
				synced 2025-10-31 09:53:27 -04:00 
			
		
		
		
	reports: Add initial monthly_expenses
This commit is contained in:
		
							
								
								
									
										49
									
								
								reports/monthly_expenses.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								reports/monthly_expenses.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||||
| @@ -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 |  | ||||||
		Reference in New Issue
	
	Block a user