module Admin::BudgetHeadingsActions extend ActiveSupport::Concern included do include Translatable include FeatureFlags feature_flag :budgets before_action :load_budget before_action :load_group before_action :load_heading, only: [:edit, :update, :destroy] end def edit end def create @heading = @group.headings.new(budget_heading_params) if @heading.save redirect_to headings_index, notice: t("admin.budget_headings.create.notice") else render new_action end end def update if @heading.update(budget_heading_params) redirect_to headings_index, notice: t("admin.budget_headings.update.notice") else render :edit end end def destroy if @heading.can_be_deleted? @heading.destroy! redirect_to headings_index, notice: t("admin.budget_headings.destroy.success_notice") else redirect_to headings_index, alert: t("admin.budget_headings.destroy.unable_notice") end end private def load_budget @budget = Budget.find_by_slug_or_id! params[:budget_id] end def load_group @group = @budget.groups.find_by_slug_or_id! params[:group_id] end def load_heading @heading = @group.headings.find_by_slug_or_id! params[:id] end def budget_heading_params params.require(:budget_heading).permit(allowed_params) end def allowed_params valid_attributes = [:price, :population, :allow_custom_content, :latitude, :longitude, :max_ballot_lines, :geozone_id] [*valid_attributes, translation_params(Budget::Heading)] end end