When params[:budget_investment][:valuation_tag_list] was not present, which is the case when updating an investment using the "mark as visible to valuators" checkbox, we were removing all valuation tags. Using a virtual attribute to assign the tags only if the parameter is present simplifies the code in the controller and avoids the issue.
132 lines
3.5 KiB
Ruby
132 lines
3.5 KiB
Ruby
class Admin::BudgetInvestmentsController < Admin::BaseController
|
|
include FeatureFlags
|
|
include CommentableActions
|
|
|
|
feature_flag :budgets
|
|
|
|
has_orders %w{oldest}, only: [:show, :edit]
|
|
has_filters(%w{all without_admin without_valuator under_valuation
|
|
valuation_finished winners},
|
|
only: [:index, :toggle_selection])
|
|
|
|
before_action :load_budget
|
|
before_action :load_investment, only: [:show, :edit, :update, :toggle_selection]
|
|
before_action :load_ballot, only: [:show, :index]
|
|
before_action :parse_valuation_filters
|
|
before_action :load_investments, only: [:index, :toggle_selection]
|
|
|
|
def index
|
|
respond_to do |format|
|
|
format.html
|
|
format.js
|
|
format.csv do
|
|
send_data Budget::Investment::Exporter.new(@investments).to_csv,
|
|
filename: 'budget_investments.csv'
|
|
end
|
|
end
|
|
end
|
|
|
|
def show
|
|
load_comments
|
|
end
|
|
|
|
def edit
|
|
load_admins
|
|
load_valuators
|
|
load_valuator_groups
|
|
load_tags
|
|
end
|
|
|
|
def update
|
|
if @investment.update(budget_investment_params)
|
|
redirect_to admin_budget_budget_investment_path(@budget,
|
|
@investment,
|
|
Budget::Investment.filter_params(params)),
|
|
notice: t("flash.actions.update.budget_investment")
|
|
else
|
|
load_admins
|
|
load_valuators
|
|
load_valuator_groups
|
|
load_tags
|
|
render :edit
|
|
end
|
|
end
|
|
|
|
def toggle_selection
|
|
@investment.toggle :selected
|
|
@investment.save
|
|
load_investments
|
|
end
|
|
|
|
private
|
|
|
|
def load_comments
|
|
@commentable = @investment
|
|
@comment_tree = CommentTree.new(@commentable, params[:page], @current_order, valuations: true)
|
|
set_comment_flags(@comment_tree.comments)
|
|
end
|
|
|
|
def resource_model
|
|
Budget::Investment
|
|
end
|
|
|
|
def resource_name
|
|
resource_model.parameterize('_')
|
|
end
|
|
|
|
def load_investments
|
|
@investments = Budget::Investment.scoped_filter(params, @current_filter)
|
|
.order_filter(params)
|
|
|
|
@investments = @investments.page(params[:page]) unless request.format.csv?
|
|
end
|
|
|
|
def budget_investment_params
|
|
params.require(:budget_investment)
|
|
.permit(:title, :description, :external_url, :heading_id, :administrator_id, :tag_list,
|
|
:valuation_tag_list, :incompatible, :visible_to_valuators, :selected,
|
|
valuator_ids: [], valuator_group_ids: [])
|
|
end
|
|
|
|
def load_budget
|
|
@budget = Budget.includes(:groups).find(params[:budget_id])
|
|
end
|
|
|
|
def load_investment
|
|
@investment = Budget::Investment.by_budget(@budget).find(params[:id])
|
|
end
|
|
|
|
def load_admins
|
|
@admins = Administrator.includes(:user).all
|
|
end
|
|
|
|
def load_valuators
|
|
@valuators = Valuator.includes(:user).all.order(description: :asc).order("users.email ASC")
|
|
end
|
|
|
|
def load_valuator_groups
|
|
@valuator_groups = ValuatorGroup.all.order(name: :asc)
|
|
end
|
|
|
|
def load_tags
|
|
@tags = Budget::Investment.tags_on(:valuation).order(:name).uniq
|
|
end
|
|
|
|
def load_ballot
|
|
query = Budget::Ballot.where(user: current_user, budget: @budget)
|
|
@ballot = @budget.balloting? ? query.first_or_create : query.first_or_initialize
|
|
end
|
|
|
|
def parse_valuation_filters
|
|
if params[:valuator_or_group_id]
|
|
model, id = params[:valuator_or_group_id].split("_")
|
|
|
|
if model == "group"
|
|
params[:valuator_group_id] = id
|
|
else
|
|
params[:valuator_id] = id
|
|
end
|
|
end
|
|
end
|
|
end
|