diff --git a/app/controllers/admin/budget_investments_controller.rb b/app/controllers/admin/budget_investments_controller.rb index 31eb0f24b..63fd316a6 100644 --- a/app/controllers/admin/budget_investments_controller.rb +++ b/app/controllers/admin/budget_investments_controller.rb @@ -32,8 +32,8 @@ class Admin::BudgetInvestmentsController < Admin::BaseController def edit load_admins load_valuators + load_valuator_groups load_tags - @valuator_groups = ValuatorGroup.all end def update @@ -113,6 +113,10 @@ class Admin::BudgetInvestmentsController < Admin::BaseController @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 diff --git a/app/helpers/valuation_helper.rb b/app/helpers/valuation_helper.rb index cc6a8e741..3a7e3dba7 100644 --- a/app/helpers/valuation_helper.rb +++ b/app/helpers/valuation_helper.rb @@ -10,6 +10,16 @@ module ValuationHelper end end + def valuator_group_select_options(group = nil) + if group.present? + ValuatorGroup.where.not(id: group.id).order("name ASC") + .collect { |g| [ g.name, g.id ] } + .prepend([valuator.name, valuator.id]) + else + ValuatorGroup.order("name ASC").collect { |g| [ g.name, g.id ] } + end + end + def assigned_valuators_info(valuators) case valuators.size when 0 diff --git a/app/models/budget/investment.rb b/app/models/budget/investment.rb index 993d7e505..34565a7d4 100644 --- a/app/models/budget/investment.rb +++ b/app/models/budget/investment.rb @@ -79,12 +79,13 @@ class Budget scope :unselected, -> { not_unfeasible.where(selected: false) } scope :last_week, -> { where("created_at >= ?", 7.days.ago)} - scope :by_group, ->(group_id) { where(group_id: group_id) } - scope :by_heading, ->(heading_id) { where(heading_id: heading_id) } - scope :by_admin, ->(admin_id) { where(administrator_id: admin_id) } - scope :by_tag, ->(tag_name) { tagged_with(tag_name) } - scope :by_valuator, ->(valuator_id) { where("budget_valuator_assignments.valuator_id = ?", valuator_id).joins(:valuator_assignments) } - scope :by_budget, ->(budget) { where(budget: budget) } + scope :by_budget, ->(budget) { where(budget: budget) } + scope :by_group, ->(group_id) { where(group_id: group_id) } + scope :by_heading, ->(heading_id) { where(heading_id: heading_id) } + scope :by_admin, ->(admin_id) { where(administrator_id: admin_id) } + scope :by_tag, ->(tag_name) { tagged_with(tag_name) } + scope :by_valuator, ->(valuator_id) { where("budget_valuator_assignments.valuator_id = ?", valuator_id).joins(:valuator_assignments) } + scope :by_valuator_group, ->(valuator_group_id) { where("budget_valuator_group_assignments.valuator_group_id = ?", valuator_group_id).joins(:valuator_group_assignments) } scope :for_render, -> { includes(:heading) } @@ -109,13 +110,14 @@ class Budget budget = Budget.find_by(slug: params[:budget_id]) || Budget.find_by(id: params[:budget_id]) results = Investment.by_budget(budget) - results = limit_results(budget, params, results) if params[:max_per_heading].present? - results = results.where(group_id: params[:group_id]) if params[:group_id].present? - results = results.by_tag(params[:tag_name]) if params[:tag_name].present? - 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? - results = advanced_filters(params, results) if params[:advanced_filters].present? + results = limit_results(budget, params, results) if params[:max_per_heading].present? + results = results.where(group_id: params[:group_id]) if params[:group_id].present? + results = results.by_tag(params[:tag_name]) if params[:tag_name].present? + 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_valuator_group(params[:valuator_group_id]) if params[:valuator_group_id].present? + results = results.by_admin(params[:administrator_id]) if params[:administrator_id].present? + 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) diff --git a/app/views/admin/budget_investments/index.html.erb b/app/views/admin/budget_investments/index.html.erb index 73a06a402..c7417be45 100644 --- a/app/views/admin/budget_investments/index.html.erb +++ b/app/views/admin/budget_investments/index.html.erb @@ -19,6 +19,14 @@ class: "js-submit-on-change" } %> +