Having links in the middle of a form distracts users from the task of filling in the form, and following a link before submitting the form will mean whatever has been filled in is lost. And the budgets form is already very long and hard to fill in. Having the phases table in the middle of it made it even harder. And, since we're planning to add the option to manage groups and headings from the same page, it's better to have a dedicated page for the form.
76 lines
2.2 KiB
Ruby
76 lines
2.2 KiB
Ruby
class Admin::BudgetsController < Admin::BaseController
|
|
include Translatable
|
|
include ReportAttributes
|
|
include ImageAttributes
|
|
include FeatureFlags
|
|
feature_flag :budgets
|
|
|
|
has_filters %w[all open finished], only: :index
|
|
|
|
before_action :load_budget, except: [:index]
|
|
load_and_authorize_resource
|
|
|
|
def index
|
|
@budgets = Budget.send(@current_filter).order(created_at: :desc).page(params[:page])
|
|
end
|
|
|
|
def show
|
|
end
|
|
|
|
def edit
|
|
end
|
|
|
|
def publish
|
|
@budget.publish!
|
|
redirect_to admin_budget_path(@budget), notice: t("admin.budgets.publish.notice")
|
|
end
|
|
|
|
def calculate_winners
|
|
return unless @budget.balloting_process?
|
|
|
|
@budget.headings.each { |heading| Budget::Result.new(@budget, heading).delay.calculate_winners }
|
|
redirect_to admin_budget_budget_investments_path(
|
|
budget_id: @budget.id,
|
|
advanced_filters: ["winners"]),
|
|
notice: I18n.t("admin.budgets.winners.calculated")
|
|
end
|
|
|
|
def update
|
|
if @budget.update(budget_params)
|
|
redirect_to admin_budget_path(@budget), notice: t("admin.budgets.update.notice")
|
|
else
|
|
render :edit
|
|
end
|
|
end
|
|
|
|
def destroy
|
|
if @budget.investments.any?
|
|
redirect_to admin_budgets_path, alert: t("admin.budgets.destroy.unable_notice")
|
|
elsif @budget.poll.present?
|
|
redirect_to admin_budgets_path, alert: t("admin.budgets.destroy.unable_notice_polls")
|
|
else
|
|
@budget.destroy!
|
|
redirect_to admin_budgets_path, notice: t("admin.budgets.destroy.success_notice")
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def budget_params
|
|
descriptions = Budget::Phase::PHASE_KINDS.map { |p| "description_#{p}" }.map(&:to_sym)
|
|
valid_attributes = [:phase,
|
|
:currency_symbol,
|
|
:voting_style,
|
|
:main_link_url,
|
|
administrator_ids: [],
|
|
valuator_ids: [],
|
|
image_attributes: image_attributes
|
|
] + descriptions
|
|
params.require(:budget).permit(*valid_attributes, *report_attributes, translation_params(Budget))
|
|
end
|
|
|
|
def load_budget
|
|
@budget = Budget.find_by_slug_or_id! params[:id]
|
|
end
|
|
end
|