diff --git a/app/controllers/admin/spending_proposals_controller.rb b/app/controllers/admin/spending_proposals_controller.rb index d6457ea20..4a910f6d9 100644 --- a/app/controllers/admin/spending_proposals_controller.rb +++ b/app/controllers/admin/spending_proposals_controller.rb @@ -7,7 +7,7 @@ class Admin::SpendingProposalsController < Admin::BaseController load_and_authorize_resource def index - @spending_proposals = geozone_filter(params[:geozone_id].presence).includes(:geozone, administrator: :user, valuators: :user).send(@current_filter).order(created_at: :desc).page(params[:page]) + @spending_proposals = SpendingProposal.search(params, @current_filter).order(created_at: :desc).page(params[:page]) end def show @@ -26,17 +26,5 @@ class Admin::SpendingProposalsController < Admin::BaseController @spending_proposal.update(params.require(:spending_proposal).permit(valuator_ids: [])) end - private - - def geozone_filter(geozone) - case geozone - when nil - @spending_proposals - when 'all' - @spending_proposals.where(geozone_id: nil) - else - @spending_proposals.where(geozone_id: params[:geozone_id].presence) - end - end end diff --git a/app/helpers/admin_helper.rb b/app/helpers/admin_helper.rb index f986eee8d..515a54deb 100644 --- a/app/helpers/admin_helper.rb +++ b/app/helpers/admin_helper.rb @@ -12,6 +12,10 @@ module AdminHelper options end + def admin_select_options + Administrator.all.order('users.username asc').includes(:user).collect { |v| [ v.name, v.id ] } + end + private def namespace diff --git a/app/models/spending_proposal.rb b/app/models/spending_proposal.rb index 221528582..9497dcae3 100644 --- a/app/models/spending_proposal.rb +++ b/app/models/spending_proposal.rb @@ -23,10 +23,36 @@ class SpendingProposal < ActiveRecord::Base scope :valuating, -> { where("valuation_assignments_count > 0 AND valuation_finished = ?", false) } scope :valuation_finished, -> { where(valuation_finished: true) } + scope :for_render, -> { includes(:geozone, administrator: :user, valuators: :user) } + def description super.try :html_safe end + def self.search(params, current_filter) + results = self + results = results.by_geozone(params[:geozone_id]) if params[:geozone_id].present? + results = results.by_administrator(params[:administrator_id]) if params[:administrator_id].present? + results = results.send(current_filter) if current_filter.present? + results = results.for_render + results + end + + def self.by_geozone(geozone) + case geozone + when nil + self + when 'all' + where(geozone_id: nil) + else + where(geozone_id: geozone.presence) + end + end + + def self.by_administrator(administrator) + where(administrator_id: administrator.presence) + end + def feasibility case feasible when true diff --git a/app/views/admin/spending_proposals/index.html.erb b/app/views/admin/spending_proposals/index.html.erb index 8bd95ff74..18be63a1b 100644 --- a/app/views/admin/spending_proposals/index.html.erb +++ b/app/views/admin/spending_proposals/index.html.erb @@ -1,11 +1,21 @@