diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 3e1b78d31..495a25314 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -114,4 +114,10 @@ class ApplicationController < ActionController::Base
store_location_for(:user, request.path)
end
end
+
+ def set_default_budget_filter
+ if @budget.try(:balloting?)
+ params[:filter] ||= "selected"
+ end
+ end
end
diff --git a/app/controllers/budgets/groups_controller.rb b/app/controllers/budgets/groups_controller.rb
index e55974a6a..d84eb2fdd 100644
--- a/app/controllers/budgets/groups_controller.rb
+++ b/app/controllers/budgets/groups_controller.rb
@@ -3,6 +3,9 @@ module Budgets
load_and_authorize_resource :budget
load_and_authorize_resource :group, class: "Budget::Group"
+ before_action :set_default_budget_filter, only: :show
+ has_filters %w{not_unfeasible feasible unfeasible unselected selected}, only: [:show]
+
def show
end
diff --git a/app/controllers/budgets/investments_controller.rb b/app/controllers/budgets/investments_controller.rb
index 7f9c6e7ee..7eb1b1291 100644
--- a/app/controllers/budgets/investments_controller.rb
+++ b/app/controllers/budgets/investments_controller.rb
@@ -14,18 +14,20 @@ module Budgets
before_action :load_heading, only: [:index, :show]
before_action :set_random_seed, only: :index
before_action :load_categories, only: [:index, :new, :create]
+ before_action :set_default_budget_filter, only: :index
feature_flag :budgets
has_orders %w{most_voted newest oldest}, only: :show
has_orders ->(c) { c.instance_variable_get(:@budget).investments_orders }, only: :index
+ has_filters %w{not_unfeasible feasible unfeasible unselected selected}, only: [:index, :show]
invisible_captcha only: [:create, :update], honeypot: :subtitle, scope: :budget_investment
respond_to :html, :js
def index
- @investments = @investments.apply_filters_and_search(@budget, params).send("sort_by_#{@current_order}").page(params[:page]).per(10).for_render
+ @investments = @investments.apply_filters_and_search(@budget, params, @current_filter).send("sort_by_#{@current_order}").page(params[:page]).per(10).for_render
@investment_ids = @investments.pluck(:id)
load_investment_votes(@investments)
@tag_cloud = tag_cloud
@@ -107,6 +109,7 @@ module Budgets
def tag_cloud
TagCloud.new(Budget::Investment, params[:search])
end
+
end
end
diff --git a/app/controllers/budgets_controller.rb b/app/controllers/budgets_controller.rb
index ee26f3223..2a53c410b 100644
--- a/app/controllers/budgets_controller.rb
+++ b/app/controllers/budgets_controller.rb
@@ -3,6 +3,9 @@ class BudgetsController < ApplicationController
feature_flag :budgets
load_and_authorize_resource
+ before_action :set_default_budget_filter, only: :show
+ has_filters %w{not_unfeasible feasible unfeasible unselected selected}, only: :show
+
respond_to :html, :js
def show
diff --git a/app/models/budget/investment.rb b/app/models/budget/investment.rb
index 0b4470383..64adbaddf 100644
--- a/app/models/budget/investment.rb
+++ b/app/models/budget/investment.rb
@@ -46,8 +46,8 @@ class Budget
scope :not_unfeasible, -> { where.not(feasibility: "unfeasible") }
scope :undecided, -> { where(feasibility: "undecided") }
scope :with_supports, -> { where('cached_votes_up > 0') }
- scope :selected, -> { where(selected: true) }
- scope :unselected, -> { where(selected: false) }
+ scope :selected, -> { feasible.where(selected: true) }
+ scope :unselected, -> { feasible.where(selected: false) }
scope :last_week, -> { where("created_at >= ?", 7.days.ago)}
scope :by_group, -> (group_id) { where(group_id: group_id) }
@@ -234,17 +234,9 @@ class Budget
budget.formatted_amount(price)
end
- def self.apply_filters_and_search(budget, params)
+ def self.apply_filters_and_search(budget, params, current_filter=nil)
investments = all
-
- if budget.balloting? && params[:unfeasible].blank? && params[:unselected].blank?
- investments = investments.selected
- elsif budget.balloting? && params[:unfeasible].blank? && params[:unselected].present?
- investments = investments.feasible.unselected
- else
- investments = params[:unfeasible].present? ? investments.unfeasible : investments.not_unfeasible
- end
-
+ investments = investments.send(current_filter) if current_filter.present?
investments = investments.by_heading(params[:heading_id]) if params[:heading_id].present?
investments = investments.search(params[:search]) if params[:search].present?
investments
@@ -256,5 +248,6 @@ class Budget
self.group_id = self.heading.try(:group_id) if self.heading_id_changed?
self.budget_id ||= self.heading.try(:group).try(:budget_id)
end
+
end
end
diff --git a/app/views/budgets/groups/show.html.erb b/app/views/budgets/groups/show.html.erb
index 8fbe028b3..d2e1c01fc 100644
--- a/app/views/budgets/groups/show.html.erb
+++ b/app/views/budgets/groups/show.html.erb
@@ -7,13 +7,13 @@
-<% if params[:unfeasible] %>
+<% if @current_filter == "unfeasible" %>
<%= t("budgets.groups.show.unfeasible_title") %>
-<% elsif params[:unselected] %>
+<% elsif @current_filter == "unselected" %>
<%= t("budgets.groups.show.unselected_title") %>
@@ -31,8 +31,7 @@
class="<%= css_for_ballot_heading(heading) %>">
<%= link_to heading.name,
budget_investments_path(heading_id: heading.id,
- unfeasible: params[:unfeasible],
- unselected: params[:unselected]),
+ filter: @current_filter),
data: { no_turbolink: true } %>
<% end %>
@@ -46,20 +45,24 @@
-<% if params[:unfeasible].blank? %>
+<% unless @current_filter == "unfeasible" %>
- <%= link_to t("budgets.groups.show.unfeasible"),
- budget_path(@budget, unfeasible: 1) %>
+
+ <%= link_to t("budgets.groups.show.unfeasible"),
+ budget_path(@budget, filter: "unfeasible") %>
+
<% end %>
-<% if params[:unselected].blank? %>
+<% unless @current_filter == "unselected" %>
- <%= link_to t("budgets.groups.show.unselected"),
- budget_path(@budget, unselected: 1) %>
+
+ <%= link_to t("budgets.groups.show.unselected"),
+ budget_path(@budget, filter: "unselected") %>
+
<% end %>
diff --git a/app/views/budgets/investments/index.html.erb b/app/views/budgets/investments/index.html.erb
index 50a2866f9..95b60f55b 100644
--- a/app/views/budgets/investments/index.html.erb
+++ b/app/views/budgets/investments/index.html.erb
@@ -16,7 +16,7 @@
- <% if params[:unfeasible].present? %>
+ <% if @current_filter == "unfeasible" %>
<%= t("budgets.investments.index.unfeasible") %>: <%= @heading.name %>
<%= t("budgets.investments.index.unfeasible_text",
@@ -34,7 +34,7 @@
<% end %>
- <%= render('shared/order_links', i18n_namespace: "budgets.investments.index") unless params[:unfeasible].present? %>
+ <%= render('shared/order_links', i18n_namespace: "budgets.investments.index") unless @current_filter == "unfeasible" %>
<% @investments.each do |investment| %>
<%= render partial: '/budgets/investments/investment', locals: {
diff --git a/app/views/budgets/show.html.erb b/app/views/budgets/show.html.erb
index d6a571b46..f67b3ca9d 100644
--- a/app/views/budgets/show.html.erb
+++ b/app/views/budgets/show.html.erb
@@ -37,9 +37,9 @@
- <% if params[:unfeasible] %>
+ <% if @current_filter == "unfeasible" %>
<%= t("budgets.show.unfeasible_title") %>
- <% elsif params[:unselected] %>
+ <% elsif @current_filter == "unselected" %>
<%= t("budgets.show.unselected_title") %>
<% end %>
@@ -54,14 +54,12 @@
<%= link_to group.name,
budget_investments_path(@budget,
heading_id: group.headings.first.id,
- unfeasible: params[:unfeasible],
- unselected: params[:unselected]),
+ filter: @current_filter),
data: { no_turbolink: true } %>
<% else %>
<%= link_to group.name,
budget_group_path(@budget, group,
- unfeasible: params[:unfeasible],
- unselected: params[:unselected]) %>
+ filter: @current_filter) %>
<% end %>
@@ -72,20 +70,24 @@
-<% unless params[:unfeasible] %>
+<% unless @current_filter == "unfeasible" %>
- <%= link_to t("budgets.show.unfeasible"),
- budget_path(@budget, unfeasible: 1) %>
+
+ <%= link_to t("budgets.show.unfeasible"),
+ budget_path(@budget, filter: "unfeasible") %>
+
<% end %>
-<% unless params[:unselected] %>
+<% unless @current_filter == "unselected" %>
- <%= link_to t("budgets.show.unselected"),
- budget_path(@budget, unselected: 1) %>
+
+ <%= link_to t("budgets.show.unselected"),
+ budget_path(@budget, filter: "unselected") %>
+
<% end %>
diff --git a/spec/factories.rb b/spec/factories.rb
index b295fd60c..f0a4fc5a2 100644
--- a/spec/factories.rb
+++ b/spec/factories.rb
@@ -284,6 +284,12 @@ FactoryGirl.define do
feasibility "feasible"
valuation_finished true
end
+
+ trait :unselected do
+ selected false
+ feasibility "feasible"
+ valuation_finished true
+ end
end
factory :budget_ballot, class: 'Budget::Ballot' do
diff --git a/spec/features/budgets/ballots_spec.rb b/spec/features/budgets/ballots_spec.rb
index 50670079c..7b3f3d1af 100644
--- a/spec/features/budgets/ballots_spec.rb
+++ b/spec/features/budgets/ballots_spec.rb
@@ -447,10 +447,12 @@ feature 'Ballots' do
end
scenario 'Unselected investments' do
- investment = create(:budget_investment, heading: new_york)
+ investment = create(:budget_investment, heading: new_york, title: "WTF asdfasfd")
login_as(user)
- visit budget_investments_path(budget, heading_id: new_york.id, unfeasible: 1)
+ visit budget_path(budget)
+ click_link states.name
+ click_link new_york.name
expect(page).to_not have_css("#budget_investment_#{investment.id}")
end
@@ -459,7 +461,9 @@ feature 'Ballots' do
investment = create(:budget_investment, feasibility: "undecided", heading: new_york)
login_as(user)
- visit budget_investments_path(budget, heading_id: new_york.id)
+ visit budget_path(budget)
+ click_link states.name
+ click_link new_york.name
within("#budget-investments") do
expect(page).to_not have_css("div.ballot")
diff --git a/spec/features/budgets/investments_spec.rb b/spec/features/budgets/investments_spec.rb
index 69d995311..0df280fd3 100644
--- a/spec/features/budgets/investments_spec.rb
+++ b/spec/features/budgets/investments_spec.rb
@@ -8,10 +8,14 @@ feature 'Budget Investments' do
let!(:heading) { create(:budget_heading, name: "More hospitals", group: group) }
scenario 'Index' do
- investments = [create(:budget_investment, heading: heading), create(:budget_investment, heading: heading), create(:budget_investment, :feasible, heading: heading)]
+ investments = [create(:budget_investment, heading: heading),
+ create(:budget_investment, heading: heading),
+ create(:budget_investment, :feasible, heading: heading)]
+
unfeasible_investment = create(:budget_investment, :unfeasible, heading: heading)
- visit budget_investments_path(budget, heading_id: heading.id)
+ visit budget_path(budget)
+ click_link "Health"
expect(page).to have_selector('#budget-investments .budget-investment', count: 3)
investments.each do |investment|
@@ -56,7 +60,7 @@ feature 'Budget Investments' do
investment3 = create(:budget_investment, heading: heading)
investment4 = create(:budget_investment, :feasible, heading: heading)
- visit budget_investments_path(budget_id: budget.id, heading_id: heading.id, unfeasible: 1)
+ visit budget_investments_path(budget_id: budget.id, heading_id: heading.id, filter: "unfeasible")
within("#budget-investments") do
expect(page).to have_css('.budget-investment', count: 1)
@@ -77,7 +81,7 @@ feature 'Budget Investments' do
click_link "All City"
- expected_path = budget_investments_path(budget, heading_id: heading.id, unfeasible: 1)
+ expected_path = budget_investments_path(budget, heading_id: heading.id, filter: "unfeasible")
expect(page).to have_current_path(expected_path)
end
@@ -93,7 +97,7 @@ feature 'Budget Investments' do
click_link 'Districts'
click_link 'Carabanchel'
- expected_path = budget_investments_path(budget, heading_id: heading1.id, unfeasible: 1)
+ expected_path = budget_investments_path(budget, heading_id: heading1.id, filter: "unfeasible")
expect(page).to have_current_path(expected_path)
end
end
@@ -516,8 +520,6 @@ feature 'Budget Investments' do
expect(page).to have_content "€10,000"
end
-
-
scenario "Sidebar in show should display vote text" do
investment = create(:budget_investment, :selected, budget: budget)
visit budget_investment_path(budget, investment)
@@ -537,7 +539,6 @@ feature 'Budget Investments' do
carabanchel_heading = create(:budget_heading, group: group, name: "Carabanchel")
new_york_heading = create(:budget_heading, group: group, name: "New York")
-
sp1 = create(:budget_investment, :selected, price: 1, heading: global_heading)
sp2 = create(:budget_investment, :selected, price: 10, heading: global_heading)
sp3 = create(:budget_investment, :selected, price: 100, heading: global_heading)
@@ -603,12 +604,12 @@ feature 'Budget Investments' do
end
scenario 'Show unselected budget investments' do
- investment1 = create(:budget_investment, :feasible, heading: heading, valuation_finished: true)
- investment2 = create(:budget_investment, :selected, :feasible, heading: heading, valuation_finished: true)
- investment3 = create(:budget_investment, :selected, :feasible, heading: heading, valuation_finished: true)
- investment4 = create(:budget_investment, :selected, :feasible, heading: heading, valuation_finished: true)
+ investment1 = create(:budget_investment, :unselected, :feasible, heading: heading, valuation_finished: true)
+ investment2 = create(:budget_investment, :selected, :feasible, heading: heading, valuation_finished: true)
+ investment3 = create(:budget_investment, :selected, :feasible, heading: heading, valuation_finished: true)
+ investment4 = create(:budget_investment, :selected, :feasible, heading: heading, valuation_finished: true)
- visit budget_investments_path(budget_id: budget.id, heading_id: heading.id, unselected: 1)
+ visit budget_investments_path(budget_id: budget.id, heading_id: heading.id, filter: "unselected")
within("#budget-investments") do
expect(page).to have_css('.budget-investment', count: 1)
@@ -629,7 +630,7 @@ feature 'Budget Investments' do
click_link "All City"
- expected_path = budget_investments_path(budget, heading_id: heading.id, unselected: 1)
+ expected_path = budget_investments_path(budget, heading_id: heading.id, filter: "unselected")
expect(page).to have_current_path(expected_path)
end
@@ -645,7 +646,7 @@ feature 'Budget Investments' do
click_link 'Districts'
click_link 'Carabanchel'
- expected_path = budget_investments_path(budget, heading_id: heading1.id, unselected: 1)
+ expected_path = budget_investments_path(budget, heading_id: heading1.id, filter: "unselected")
expect(page).to have_current_path(expected_path)
end
diff --git a/spec/features/tags/budget_investments_spec.rb b/spec/features/tags/budget_investments_spec.rb
index 28d19333f..4c978c740 100644
--- a/spec/features/tags/budget_investments_spec.rb
+++ b/spec/features/tags/budget_investments_spec.rb
@@ -199,11 +199,12 @@ feature 'Tags' do
if budget.balloting?
[investment1, investment2, investment3].each do |investment|
- investment.update(selected: true)
+ investment.update(selected: true, feasibility: "feasible")
end
end
- visit budget_investments_path(budget, heading_id: heading.id)
+ visit budget_path(budget)
+ click_link group.name
within "#tag-cloud" do
click_link "Medio Ambiente"
@@ -246,11 +247,12 @@ feature 'Tags' do
if budget.balloting?
[investment1, investment2, investment3].each do |investment|
- investment.update(selected: true)
+ investment.update(selected: true, feasibility: "feasible")
end
end
- visit budget_investments_path(budget, heading_id: heading.id, search: 'Economía')
+ visit budget_path(budget)
+ click_link group.name
within "#categories" do
click_link "Medio Ambiente"