diff --git a/app/helpers/admin_budget_investments_helper.rb b/app/helpers/admin_budget_investments_helper.rb index 5c2dc479e..aa33961aa 100644 --- a/app/helpers/admin_budget_investments_helper.rb +++ b/app/helpers/admin_budget_investments_helper.rb @@ -1,7 +1,13 @@ module AdminBudgetInvestmentsHelper def advanced_menu_visibility - (params[:advanced_filters].empty? && params["min_total_supports"].blank?) ? "hide" : "" + if params[:advanced_filters].empty? && + params["min_total_supports"].blank? && + params["max_total_supports"].blank? + "hide" + else + "" + end end def init_advanced_menu diff --git a/app/models/budget/investment.rb b/app/models/budget/investment.rb index f2095c746..4dae6c3ac 100644 --- a/app/models/budget/investment.rb +++ b/app/models/budget/investment.rb @@ -118,6 +118,8 @@ class Budget results = results.where("cached_votes_up + physical_votes >= ?", params[:min_total_supports]) if params[:min_total_supports].present? + results = results.where("cached_votes_up + physical_votes <= ?", + params[:max_total_supports]) if params[:max_total_supports].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? diff --git a/app/views/admin/budget_investments/_search_form.html.erb b/app/views/admin/budget_investments/_search_form.html.erb index 94ae8fc0b..77e177b71 100644 --- a/app/views/admin/budget_investments/_search_form.html.erb +++ b/app/views/admin/budget_investments/_search_form.html.erb @@ -17,8 +17,15 @@ <%= t("admin.budget_investments.index.filters.#{option}") %> <% end %> -
- <%= text_field_tag :min_total_supports, params["min_total_supports"], placeholder: t("admin.budget_investments.index.filters.min_total_supports") %> +
+
+ <%= label_tag :min_total_supports, t("admin.budget_investments.index.filters.min_total_supports") %> + <%= text_field_tag :min_total_supports, params["min_total_supports"] %> +
+
+ <%= label_tag :max_total_supports, t("admin.budget_investments.index.filters.max_total_supports") %> + <%= text_field_tag :max_total_supports, params["max_total_supports"] %> +
diff --git a/app/views/admin/budget_investments/_select_investment.html.erb b/app/views/admin/budget_investments/_select_investment.html.erb index 9ef8825cb..e4c7f5355 100644 --- a/app/views/admin/budget_investments/_select_investment.html.erb +++ b/app/views/admin/budget_investments/_select_investment.html.erb @@ -56,6 +56,7 @@ filter: params[:filter], sort_by: params[:sort_by], min_total_supports: params[:min_total_supports], + max_total_supports: params[:max_total_supports], advanced_filters: params[:advanced_filters], page: params[:page]), method: :patch, @@ -69,6 +70,7 @@ filter: params[:filter], sort_by: params[:sort_by], min_total_supports: params[:min_total_supports], + max_total_supports: params[:max_total_supports], advanced_filters: params[:advanced_filters], page: params[:page]), method: :patch, diff --git a/config/locales/en/admin.yml b/config/locales/en/admin.yml index 2e4149232..78584d535 100644 --- a/config/locales/en/admin.yml +++ b/config/locales/en/admin.yml @@ -193,6 +193,7 @@ en: undecided: Undecided unfeasible: Unfeasible min_total_supports: Minimum supports + max_total_supports: Maximum supports winners: Winners one_filter_html: "Current applied filters: %{filter}" two_filters_html: "Current applied filters: %{filter}, %{advanced_filters}" diff --git a/config/locales/es/admin.yml b/config/locales/es/admin.yml index 90f8a54c6..5cacec041 100644 --- a/config/locales/es/admin.yml +++ b/config/locales/es/admin.yml @@ -193,6 +193,7 @@ es: undecided: Sin decidir unfeasible: Inviables min_total_supports: Apoyos mínimos + max_total_supports: Apoyos máximos winners: Ganadores one_filter_html: "Filtros en uso: %{filter}" two_filters_html: "Filtros en uso: %{filter}, %{advanced_filters}" diff --git a/spec/features/admin/budget_investments_spec.rb b/spec/features/admin/budget_investments_spec.rb index ea3711364..48451e14f 100644 --- a/spec/features/admin/budget_investments_spec.rb +++ b/spec/features/admin/budget_investments_spec.rb @@ -439,6 +439,42 @@ feature "Admin budget investments" do expect(page).not_to have_link("Road 100 supports") end + scenario "Filtering by maximum number of votes", :js do + group_1 = create(:budget_group, budget: budget) + group_2 = create(:budget_group, budget: budget) + parks = create(:budget_heading, group: group_1) + roads = create(:budget_heading, group: group_2) + streets = create(:budget_heading, group: group_2) + + create(:budget_investment, heading: parks, cached_votes_up: 40, title: "Park 40 supports") + create(:budget_investment, heading: parks, cached_votes_up: 99, title: "Park 99 supports") + create(:budget_investment, heading: roads, cached_votes_up: 100, title: "Road 100 supports") + create(:budget_investment, heading: roads, cached_votes_up: 199, title: "Road 199 supports") + create(:budget_investment, heading: streets, cached_votes_up: 200, title: "St. 200 supports") + create(:budget_investment, heading: streets, cached_votes_up: 300, title: "St. 300 supports") + + visit admin_budget_budget_investments_path(budget) + + expect(page).to have_link("Park 40 supports") + expect(page).to have_link("Park 99 supports") + expect(page).to have_link("Road 100 supports") + expect(page).to have_link("Road 199 supports") + expect(page).to have_link("St. 200 supports") + expect(page).to have_link("St. 300 supports") + + click_link "Advanced filters" + fill_in "max_total_supports", with: 180 + click_button "Filter" + + expect(page).to have_content("There are 3 investments") + expect(page).not_to have_link("Road 199 supports") + expect(page).not_to have_link("St. 200 supports") + expect(page).not_to have_link("St. 300 supports") + expect(page).to have_link("Park 40 supports") + expect(page).to have_link("Park 99 supports") + expect(page).to have_link("Road 100 supports") + end + scenario "Combination of checkbox with text search", :js do user = create(:user, username: "Admin 1") administrator = create(:administrator, user: user)