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/controllers/admin/valuators_controller.rb b/app/controllers/admin/valuators_controller.rb new file mode 100644 index 000000000..35c449299 --- /dev/null +++ b/app/controllers/admin/valuators_controller.rb @@ -0,0 +1,27 @@ +class Admin::ValuatorsController < Admin::BaseController + load_and_authorize_resource + + def index + @valuators = @valuators.page(params[:page]) + end + + def search + @user = User.find_by(email: params[:email]) + + respond_to do |format| + if @user + @valuator = Valuator.find_or_initialize_by(user: @user) + format.js + else + format.js { render "user_not_found" } + end + end + end + + def create + @valuator.user_id = params[:user_id] + @valuator.save + + redirect_to admin_valuators_path + 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/abilities/administrator.rb b/app/models/abilities/administrator.rb index 6ba99e4fa..6bf2b0b53 100644 --- a/app/models/abilities/administrator.rb +++ b/app/models/abilities/administrator.rb @@ -32,6 +32,7 @@ module Abilities can :comment_as_administrator, [Debate, Comment, Proposal] can [:search, :create, :index, :destroy], ::Moderator + can [:search, :create, :index], ::Valuator can :manage, Annotation diff --git a/app/models/spending_proposal.rb b/app/models/spending_proposal.rb index 221528582..ba8ef7e78 100644 --- a/app/models/spending_proposal.rb +++ b/app/models/spending_proposal.rb @@ -23,10 +23,32 @@ 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.for_render + end + + def self.by_geozone(geozone) + if geozone == '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/_menu.html.erb b/app/views/admin/_menu.html.erb index 00bfc279b..49bd6957d 100644 --- a/app/views/admin/_menu.html.erb +++ b/app/views/admin/_menu.html.erb @@ -78,6 +78,13 @@ <% end %> +