mirror of
https://github.com/we-promise/sure.git
synced 2026-04-16 02:24:08 +00:00
* Initial account sharing changes * Update schema.rb * Update schema.rb * Change sharing UI to modal * UX fixes and sharing controls * Scope include in finances better * Update totals.rb * Update totals.rb * Scope reports to finance account scope * Update impersonation_sessions_controller_test.rb * Review fixes * Update schema.rb * Update show.html.erb * FIX db validation * Refine edit permissions * Review items * Review * Review * Add application level helper * Critical review * Address remaining review items * Fix modals * more scoping * linter * small UI fix * Fix: Sync broadcasts push unscoped balance sheet to all users * Update sync_complete_event.rb The fix removes the sidebar broadcasts (which rendered unscoped account groups using family.balance_sheet without user context) along with the now-unused sidebar_targets, account_group, and family_balance_sheet private methods. The sidebar will still update correctly — when the sync completes, Family::SyncCompleteEvent#broadcast fires family.broadcast_refresh, which triggers a morph-based page refresh for each user with their own authenticated session, rendering properly scoped sidebar content.
38 lines
1.1 KiB
Ruby
38 lines
1.1 KiB
Ruby
class InvestmentFlowStatement
|
|
include Monetizable
|
|
|
|
attr_reader :family, :user
|
|
|
|
def initialize(family, user: nil)
|
|
@family = family
|
|
@user = user
|
|
end
|
|
|
|
# Get contribution/withdrawal totals for a period
|
|
def period_totals(period: Period.current_month)
|
|
scope = family.transactions
|
|
.visible
|
|
.excluding_pending
|
|
.where(entries: { date: period.date_range })
|
|
.where(kind: %w[standard investment_contribution])
|
|
.where(investment_activity_label: %w[Contribution Withdrawal])
|
|
|
|
if user
|
|
scope = scope.joins(entry: :account).merge(Account.included_in_finances_for(user))
|
|
end
|
|
|
|
transactions = scope
|
|
|
|
contributions = transactions.where(investment_activity_label: "Contribution").sum("entries.amount").abs
|
|
withdrawals = transactions.where(investment_activity_label: "Withdrawal").sum("entries.amount").abs
|
|
|
|
PeriodTotals.new(
|
|
contributions: Money.new(contributions, family.currency),
|
|
withdrawals: Money.new(withdrawals, family.currency),
|
|
net_flow: Money.new(contributions - withdrawals, family.currency)
|
|
)
|
|
end
|
|
|
|
PeriodTotals = Data.define(:contributions, :withdrawals, :net_flow)
|
|
end
|