126 lines
3.6 KiB
Ruby
126 lines
3.6 KiB
Ruby
module BudgetsHelper
|
|
def show_links_to_budget_investments(budget)
|
|
["balloting", "reviewing_ballots", "finished"].include? budget.phase
|
|
end
|
|
|
|
def heading_name_and_price_html(heading, budget)
|
|
content_tag :div do
|
|
concat(heading.name + " ")
|
|
concat(content_tag(:span, budget.formatted_heading_price(heading)))
|
|
end
|
|
end
|
|
|
|
def csv_params
|
|
csv_params = params.clone.merge(format: :csv)
|
|
csv_params = csv_params.to_unsafe_h.map { |k, v| [k.to_sym, v] }.to_h
|
|
csv_params.delete(:page)
|
|
csv_params
|
|
end
|
|
|
|
def budget_phases_select_options
|
|
Budget::Phase::PHASE_KINDS.map { |ph| [t("budgets.phase.#{ph}"), ph] }
|
|
end
|
|
|
|
def budget_currency_symbol_select_options
|
|
Budget::CURRENCY_SYMBOLS.map { |cs| [cs, cs] }
|
|
end
|
|
|
|
def namespaced_budget_investment_path(investment, options = {})
|
|
case namespace
|
|
when "management"
|
|
management_budget_investment_path(investment.budget, investment, options)
|
|
else
|
|
budget_investment_path(investment.budget, investment, options)
|
|
end
|
|
end
|
|
|
|
def namespaced_budget_investment_vote_path(investment, options = {})
|
|
case namespace
|
|
when "management"
|
|
vote_management_budget_investment_path(investment.budget, investment, options)
|
|
else
|
|
vote_budget_investment_path(investment.budget, investment, options)
|
|
end
|
|
end
|
|
|
|
def css_for_ballot_heading(heading)
|
|
return "" if current_ballot.blank? || @current_filter == "unfeasible"
|
|
|
|
current_ballot.has_lines_in_heading?(heading) ? "is-active" : ""
|
|
end
|
|
|
|
def current_ballot
|
|
Budget::Ballot.where(user: current_user, budget: @budget).first
|
|
end
|
|
|
|
def investment_tags_select_options(budget, context)
|
|
tags = budget.investments.tags_on(context).order(:name).pluck(:name)
|
|
tags = tags.concat budget.tag_list_on(context)
|
|
tags.uniq
|
|
end
|
|
|
|
def unfeasible_or_unselected_filter
|
|
["unselected", "unfeasible"].include?(@current_filter)
|
|
end
|
|
|
|
def budget_published?(budget)
|
|
!budget.drafting? || current_user&.administrator?
|
|
end
|
|
|
|
def current_budget_map_locations
|
|
return unless current_budget.present?
|
|
|
|
if current_budget.publishing_prices_or_later? && current_budget.investments.selected.any?
|
|
investments = current_budget.investments.selected
|
|
else
|
|
investments = current_budget.investments
|
|
end
|
|
|
|
MapLocation.where(investment_id: investments).map(&:json_data)
|
|
end
|
|
|
|
def display_calculate_winners_button?(budget)
|
|
budget.balloting_or_later?
|
|
end
|
|
|
|
def calculate_winner_button_text(budget)
|
|
if budget.investments.winners.empty?
|
|
t("admin.budgets.winners.calculate")
|
|
else
|
|
t("admin.budgets.winners.recalculate")
|
|
end
|
|
end
|
|
|
|
def display_support_alert?(investment)
|
|
current_user &&
|
|
!current_user.voted_in_group?(investment.group) &&
|
|
investment.group.headings.count > 1
|
|
end
|
|
|
|
def link_to_create_budget_poll(budget)
|
|
balloting_phase = budget.phases.where(kind: "balloting").first
|
|
|
|
link_to t("admin.budgets.index.admin_ballots"),
|
|
admin_polls_path(poll: {
|
|
name: budget.name,
|
|
budget_id: budget.id,
|
|
starts_at: balloting_phase.starts_at,
|
|
ends_at: balloting_phase.ends_at }),
|
|
method: :post
|
|
end
|
|
|
|
def budget_subnav_items_for(budget)
|
|
{
|
|
results: t("budgets.results.link"),
|
|
stats: t("stats.budgets.link"),
|
|
executions: t("budgets.executions.link")
|
|
}.select { |section, _| can?(:"read_#{section}", budget) }.map do |section, text|
|
|
{
|
|
text: text,
|
|
url: send("budget_#{section}_path", budget),
|
|
active: controller_name == section.to_s
|
|
}
|
|
end
|
|
end
|
|
end
|