mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-07-19 13:19:39 +02:00
* Budgeting V1 * Basic UI template * Fully scaffolded budgeting v1 * Basic working budget * Finalize donut chart for budgets * Allow categorization of loan payments for budget * Include loan payments in incomes_and_expenses scope * Add budget allocations progress * Empty states * Clean up budget methods * Category aggregation queries * Handle overage scenarios in form * Finalize budget donut chart controller * Passing tests * Fix allocation naming * Add income category migration * Native support for uncategorized budget category * Formatting * Fix subcategory sort order, padding * Fix calculation for category rollups in budget
29 lines
738 B
Ruby
29 lines
738 B
Ruby
class BudgetingStats
|
|
attr_reader :family
|
|
|
|
def initialize(family)
|
|
@family = family
|
|
end
|
|
|
|
def avg_monthly_income
|
|
income_expense_totals_query(Account::Entry.incomes)
|
|
end
|
|
|
|
def avg_monthly_expenses
|
|
income_expense_totals_query(Account::Entry.expenses)
|
|
end
|
|
|
|
private
|
|
def income_expense_totals_query(type_scope)
|
|
monthly_totals = family.entries
|
|
.merge(type_scope)
|
|
.select("SUM(account_entries.amount) as total")
|
|
.group(Arel.sql("date_trunc('month', account_entries.date)"))
|
|
|
|
result = Family.select("AVG(mt.total)")
|
|
.from(monthly_totals, :mt)
|
|
.pick("AVG(mt.total)")
|
|
|
|
result
|
|
end
|
|
end
|