We're choosing the default `with_first_argument` style because it's the one we use the most.
83 lines
1.9 KiB
Ruby
83 lines
1.9 KiB
Ruby
class Budget::VotingStyles::Base
|
|
attr_reader :ballot
|
|
|
|
def initialize(ballot)
|
|
@ballot = ballot
|
|
end
|
|
|
|
def name
|
|
self.class.name.split("::").last.underscore
|
|
end
|
|
|
|
def change_vote_info(link:)
|
|
I18n.t(
|
|
"budgets.investments.index.sidebar.change_vote_info.#{name}",
|
|
link: link,
|
|
phase_end_date: I18n.l(budget.current_phase.ends_at.to_date, format: :long)
|
|
)
|
|
end
|
|
|
|
def amount_progress(heading)
|
|
I18n.t(
|
|
"budgets.ballots.show.amount_progress",
|
|
amount_spent: amount_spent_info(heading),
|
|
amount_limit: amount_limit_info(heading)
|
|
)
|
|
end
|
|
|
|
def voted_info(heading)
|
|
I18n.t("budgets.investments.index.sidebar.voted_info.#{name}",
|
|
count: investments(heading).count,
|
|
amount_spent: budget.formatted_amount(investments_price(heading)))
|
|
end
|
|
|
|
def amount_available_info(heading)
|
|
I18n.t("budgets.ballots.show.amount_available.#{name}",
|
|
count: formatted_amount_available(heading))
|
|
end
|
|
|
|
def amount_spent_info(heading)
|
|
I18n.t("budgets.ballots.show.amount_spent.#{name}",
|
|
count: formatted_amount_spent(heading))
|
|
end
|
|
|
|
def amount_limit_info(heading)
|
|
I18n.t("budgets.ballots.show.amount_limit.#{name}",
|
|
count: formatted_amount_limit(heading))
|
|
end
|
|
|
|
def amount_available(heading)
|
|
amount_limit(heading) - amount_spent(heading)
|
|
end
|
|
|
|
def percentage_spent(heading)
|
|
100.0 * amount_spent(heading) / amount_limit(heading)
|
|
end
|
|
|
|
def formatted_amount_available(heading)
|
|
format(amount_available(heading))
|
|
end
|
|
|
|
def formatted_amount_spent(heading)
|
|
format(amount_spent(heading))
|
|
end
|
|
|
|
def formatted_amount_limit(heading)
|
|
format(amount_limit(heading))
|
|
end
|
|
|
|
private
|
|
|
|
def budget
|
|
ballot.budget
|
|
end
|
|
|
|
def investments(heading)
|
|
ballot.investments.by_heading(heading.id)
|
|
end
|
|
|
|
def investments_price(heading)
|
|
investments(heading).sum(:price).to_i
|
|
end
|
|
end
|