diff --git a/app/controllers/admin/budget_investments_controller.rb b/app/controllers/admin/budget_investments_controller.rb index c81ccfcc3..062dc6b2d 100644 --- a/app/controllers/admin/budget_investments_controller.rb +++ b/app/controllers/admin/budget_investments_controller.rb @@ -15,7 +15,7 @@ class Admin::BudgetInvestmentsController < Admin::BaseController def index respond_to do |format| format.html - format.js { render layout: false } + format.js format.csv do send_data Budget::Investment.to_csv(@investments, headers: true), filename: 'budget_investments.csv' @@ -48,6 +48,7 @@ class Admin::BudgetInvestmentsController < Admin::BaseController def toggle_selection @investment.toggle :selected @investment.save + load_investments end private diff --git a/app/models/budget/investment.rb b/app/models/budget/investment.rb index 58674be9b..cb5e47fad 100644 --- a/app/models/budget/investment.rb +++ b/app/models/budget/investment.rb @@ -104,17 +104,21 @@ class Budget results = results.by_heading(params[:heading_id]) if params[:heading_id].present? results = results.by_valuator(params[:valuator_id]) if params[:valuator_id].present? results = results.by_admin(params[:administrator_id]) if params[:administrator_id].present? - - # Advanced filters - results = results.valuation_finished_feasible if params[:second_filter] == 'feasible' - results = results.where(selected: true) if params[:second_filter] == 'selected' - results = results.undecided if params[:second_filter] == 'undecided' - results = results.unfeasible if params[:second_filter] == 'unfeasible' + results = advanced_filters(params, results) if params[:advanced_filters].present? results = results.send(current_filter) if current_filter.present? results.includes(:heading, :group, :budget, administrator: :user, valuators: :user) end + def self.advanced_filters(params, results) + ids = [] + ids += results.valuation_finished_feasible.pluck(:id) if params[:advanced_filters].include?('feasible') + ids += results.where(selected: true).pluck(:id) if params[:advanced_filters].include?('selected') + ids += results.undecided.pluck(:id) if params[:advanced_filters].include?('undecided') + ids += results.unfeasible.pluck(:id) if params[:advanced_filters].include?('unfeasible') + results.where("budget_investments.id IN (?)", ids) + end + def self.limit_results(budget, params, results) max_per_heading = params[:max_per_heading].to_i return results if max_per_heading <= 0 diff --git a/app/views/admin/budget_investments/_advanced_filters.html.erb b/app/views/admin/budget_investments/_advanced_filters.html.erb index 5042bbfc8..b9f5a9e6d 100644 --- a/app/views/admin/budget_investments/_advanced_filters.html.erb +++ b/app/views/admin/budget_investments/_advanced_filters.html.erb @@ -8,27 +8,27 @@ <%= form_tag(admin_budget_budget_investments_path(budget: @budget, filter: params[:filter], sort_by: params[:sort_by], - second_filter: params[:second_filter], max_per_heading: params[:max_per_heading], + advanced_filters: params[:advanced_filters], page: 1), method: :get, remote: true, enforce_utf8: false) do %>