The current tracking section had a few issues: * When browsing as an admin, this section becomes useless since no investments are shown * Browsing investments in the admin section, you're suddenly redirected to the tracking section, making navigation confusing * One test related to the officing dashboard failed due to these changes and had been commented * Several views and controller methods were copied from other sections, leading to duplication and making the code harder to maintain * Tracking routes were defined for proposals and legislation processes, but in the tracking section only investments were shown * Probably many more things, since these issues were detected after only an hour reviewing and testing the code So we're removing this untested section before releasing version 1.1. We might add it back afterwards.
136 lines
3.9 KiB
Ruby
136 lines
3.9 KiB
Ruby
class Admin::BudgetInvestmentsController < Admin::BaseController
|
|
include FeatureFlags
|
|
include CommentableActions
|
|
include DownloadSettingsHelper
|
|
include ChangeLogHelper
|
|
include Translatable
|
|
|
|
feature_flag :budgets
|
|
|
|
has_orders %w[oldest], only: [:show, :edit]
|
|
has_filters %w[all], only: [:index, :toggle_selection]
|
|
|
|
before_action :load_budget, except: :show_investment_log
|
|
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]
|
|
before_action :load_change_log, only: [:show]
|
|
|
|
def index
|
|
load_tags
|
|
respond_to do |format|
|
|
format.html
|
|
format.js
|
|
format.csv do
|
|
send_data to_csv(@investments, Budget::Investment),
|
|
type: "text/csv",
|
|
disposition: "attachment",
|
|
filename: "budget_investments.csv"
|
|
end
|
|
end
|
|
end
|
|
|
|
def show
|
|
load_comments
|
|
end
|
|
|
|
def edit
|
|
load_staff
|
|
load_valuator_groups
|
|
load_tags
|
|
end
|
|
|
|
def update
|
|
authorize! :admin_update, @investment
|
|
if @investment.update(budget_investment_params)
|
|
redirect_to admin_budget_budget_investment_path(@budget,
|
|
@investment,
|
|
Budget::Investment.filter_params(params).to_h),
|
|
notice: t("flash.actions.update.budget_investment")
|
|
else
|
|
load_staff
|
|
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(separator: "_")
|
|
end
|
|
|
|
def load_investments
|
|
@investments = Budget::Investment.scoped_filter(params, @current_filter).order_filter(params)
|
|
@investments = Kaminari.paginate_array(@investments) if @investments.is_a?(Array)
|
|
@investments = @investments.page(params[:page]) unless request.format.csv?
|
|
end
|
|
|
|
def budget_investment_params
|
|
attributes = [:external_url, :heading_id, :administrator_id, :tag_list,
|
|
:valuation_tag_list, :incompatible, :visible_to_valuators, :selected,
|
|
:milestone_tag_list, valuator_ids: [], valuator_group_ids: []]
|
|
params.require(:budget_investment).permit(attributes, translation_params(Budget::Investment))
|
|
end
|
|
|
|
def load_budget
|
|
@budget = Budget.find_by_slug_or_id! params[:budget_id]
|
|
end
|
|
|
|
def load_investment
|
|
@investment = @budget.investments.find(params[:id])
|
|
end
|
|
|
|
def load_staff
|
|
@admins = @budget.administrators.includes(:user)
|
|
@valuators = @budget.valuators.includes(:user).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_tags).order(:name).distinct
|
|
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
|
|
|
|
def load_change_log
|
|
@logs = Budget::Investment::ChangeLog.by_investment(@investment.id)
|
|
end
|
|
end
|