diff --git a/app/controllers/management/budgets/investments_controller.rb b/app/controllers/management/budgets/investments_controller.rb index 0f268e3c8..bfa56df8b 100644 --- a/app/controllers/management/budgets/investments_controller.rb +++ b/app/controllers/management/budgets/investments_controller.rb @@ -6,8 +6,8 @@ class Management::Budgets::InvestmentsController < Management::BaseController before_action :only_verified_users, except: :print def index - @investments = apply_filters_and_search(@investments).order(cached_votes_up: :desc).page(params[:page]).for_render - @investment_ids = @investments.pluck(:id) + @investments = apply_filters_and_search(@investments).page(params[:page]) + set_investment_votes(@investments) end def new @@ -26,10 +26,12 @@ class Management::Budgets::InvestmentsController < Management::BaseController end def show + set_investment_votes(@investment) end def vote - @investment.register_vote(managed_user, 'yes') + @investment.register_selection(managed_user) + set_investment_votes(@investment) end def print @@ -39,6 +41,10 @@ class Management::Budgets::InvestmentsController < Management::BaseController private + def set_investment_votes(investments) + @investment_votes = managed_user ? managed_user.budget_investment_votes(investments) : {} + end + def load_budget @budget = Budget.find(params[:budget_id]) end diff --git a/app/controllers/management/budgets_controller.rb b/app/controllers/management/budgets_controller.rb index 0643cbf94..c5cfdee76 100644 --- a/app/controllers/management/budgets_controller.rb +++ b/app/controllers/management/budgets_controller.rb @@ -10,7 +10,7 @@ class Management::BudgetsController < Management::BaseController end def support_investments - @budgets = Budget.accepting.order(created_at: :desc).page(params[:page]) + @budgets = Budget.selecting.order(created_at: :desc).page(params[:page]) end def print_investments diff --git a/app/helpers/budgets_helper.rb b/app/helpers/budgets_helper.rb index 65f38d257..6c1471c90 100644 --- a/app/helpers/budgets_helper.rb +++ b/app/helpers/budgets_helper.rb @@ -21,6 +21,15 @@ module BudgetsHelper end end + def namespaced_budget_investment_vote_path(investment, options={}) + case namespace + when "management::budgets" + vote_management_budget_investment_path(investment.budget, investment, options) + else + vote_budget_investment_path(investment.budget, investment, options) + end + end + def display_budget_countdown?(budget) budget.balloting? end diff --git a/app/models/budget.rb b/app/models/budget.rb index 755f824da..28b37a896 100644 --- a/app/models/budget.rb +++ b/app/models/budget.rb @@ -14,11 +14,14 @@ class Budget < ActiveRecord::Base has_many :groups, dependent: :destroy has_many :headings, through: :groups - scope :current, -> { where.not(phase: "finished") } - scope :finished, -> { where(phase: "finished") } - scope :valuating, -> { where(valuating: true) } + scope :on_hold, -> { where(phase: "on_hold") } scope :accepting, -> { where(phase: "accepting") } + scope :selecting, -> { where(phase: "selecting") } scope :balloting, -> { where(phase: "balloting") } + scope :finished, -> { where(phase: "finished") } + + scope :current, -> { where.not(phase: "finished") } + scope :valuating, -> { where(valuating: true) } def on_hold? phase == "on_hold" diff --git a/app/models/budget/investment.rb b/app/models/budget/investment.rb index 4a82240cb..aa86888fc 100644 --- a/app/models/budget/investment.rb +++ b/app/models/budget/investment.rb @@ -190,9 +190,7 @@ class Budget end def should_show_aside? - (budget.selecting? && !investment.unfeasible?) || - (budget.balloting? && investment.feasible?) || - budget.on_hold? + (budget.selecting? && !unfeasible?) || (budget.balloting? && feasible?) || budget.on_hold? end def should_show_votes? diff --git a/app/views/budgets/investments/_investment.html.erb b/app/views/budgets/investments/_investment.html.erb index e0ea250e4..330c3b690 100644 --- a/app/views/budgets/investments/_investment.html.erb +++ b/app/views/budgets/investments/_investment.html.erb @@ -51,7 +51,7 @@ <%= render partial: '/budgets/investments/votes', locals: { investment: investment, investment_votes: investment_votes, - vote_url: vote_budget_investment_path(investment.budget, investment, value: 'yes') + vote_url: namespaced_budget_investment_vote_path(investment, value: 'yes') } %> diff --git a/app/views/budgets/investments/_investment_show.html.erb b/app/views/budgets/investments/_investment_show.html.erb index 3af814d7c..d5d371290 100644 --- a/app/views/budgets/investments/_investment_show.html.erb +++ b/app/views/budgets/investments/_investment_show.html.erb @@ -63,7 +63,7 @@ vote_url: vote_budget_investment_path(investment.budget, investment, value: 'yes') } %> - <% elseif investment.sould_show_ballots? %> + <% elsif investment.should_show_ballots? %>
<%= render 'ballot', investment: investment %>
diff --git a/app/views/budgets/investments/vote.js.erb b/app/views/budgets/investments/vote.js.erb index b02cfefee..848b432e0 100644 --- a/app/views/budgets/investments/vote.js.erb +++ b/app/views/budgets/investments/vote.js.erb @@ -1 +1,4 @@ -$("#<%= dom_id(@investment) %>_votes").html('<%= j render("budgets/investments/votes", investment: @investment, vote_url: vote_budget_investment_path(@budget, @investment, value: "yes")) %>'); \ No newline at end of file +$("#<%= dom_id(@investment) %>_votes").html('<%= j render("/budgets/investments/votes", + investment: @investment, + investment_votes: @budget_investment_votes, + vote_url: namespaced_budget_investment_vote_path(@investment, value: 'yes')) %>'); diff --git a/app/views/management/budgets/investments/show.html.erb b/app/views/management/budgets/investments/show.html.erb index 0948da1d5..15c13cd93 100644 --- a/app/views/management/budgets/investments/show.html.erb +++ b/app/views/management/budgets/investments/show.html.erb @@ -2,4 +2,7 @@ <%= render '/shared/print' %> -<%= render partial: '/budgets/investments/investment_show', locals: { investment: @investment, investment_votes: @investment_votes } %> +<%= render partial: '/budgets/investments/investment_show', locals: { + investment: @investment, + investment_votes: @investment_votes +} %> diff --git a/app/views/management/budgets/investments/vote.js.erb b/app/views/management/budgets/investments/vote.js.erb index 74705cf2b..56248ba68 100644 --- a/app/views/management/budgets/investments/vote.js.erb +++ b/app/views/management/budgets/investments/vote.js.erb @@ -1 +1,4 @@ -<%= render template: 'budgets/investments/vote' %> +$("#<%= dom_id(@investment) %>_votes").html('<%= j render("/budgets/investments/votes", + investment: @investment, + investment_votes: @investment_votes, + vote_url: namespaced_budget_investment_vote_path(@investment, value: 'yes')) %>'); diff --git a/spec/features/management/budget_investments_spec.rb b/spec/features/management/budget_investments_spec.rb index eed41216a..216af5d20 100644 --- a/spec/features/management/budget_investments_spec.rb +++ b/spec/features/management/budget_investments_spec.rb @@ -4,12 +4,13 @@ feature 'Budget Investments' do background do login_as_manager - @budget = create(:budget, phase: 'accepting', name: "2016") - group = create(:budget_group, budget: @budget, name: 'Whole city') - @heading = create(:budget_heading, group: group, name: "Health") + @budget = create(:budget, phase: 'selecting', name: "2016") + @group = create(:budget_group, budget: @budget, name: 'Whole city') + @heading = create(:budget_heading, group: @group, name: "Health") end context "Create" do + before { @budget.update(phase: 'accepting') } scenario 'Creating budget investments on behalf of someone, selecting a budget' do user = create(:user, :level_two) @@ -59,6 +60,7 @@ feature 'Budget Investments' do end context "Searching" do + scenario "by title" do budget_investment1 = create(:budget_investment, budget: @budget, title: "Show me what you got") budget_investment2 = create(:budget_investment, budget: @budget, title: "Get Schwifty") @@ -67,6 +69,7 @@ feature 'Budget Investments' do login_managed_user(user) click_link "Support Budget Investments" + expect(page).to have_content(@budget.name) within "#budget_#{@budget.id}" do click_link "Support Budget Investments" end @@ -91,6 +94,7 @@ feature 'Budget Investments' do login_managed_user(user) click_link "Support Budget Investments" + expect(page).to have_content(@budget.name) within "#budget_#{@budget.id}" do click_link "Support Budget Investments" end @@ -116,6 +120,7 @@ feature 'Budget Investments' do login_managed_user(user) click_link "Support Budget Investments" + expect(page).to have_content(@budget.name) within "#budget_#{@budget.id}" do click_link "Support Budget Investments" end @@ -145,11 +150,11 @@ feature 'Budget Investments' do login_managed_user(user) click_link "Support Budget Investments" + expect(page).to have_content(@budget.name) within "#budget_#{@budget.id}" do click_link "Support Budget Investments" end - - save_and_open_page + expect(page).to have_content(budget_investment.title) within("#budget-investments") do find('.js-in-favor a').click @@ -166,6 +171,7 @@ feature 'Budget Investments' do login_managed_user(user) click_link "Support Budget Investments" + expect(page).to have_content(@budget.name) within "#budget_#{@budget.id}" do click_link "Support Budget Investments" end @@ -194,9 +200,10 @@ feature 'Budget Investments' do context "Printing" do scenario 'Printing budget investments' do - 16.times { create(:budget_investment, budget: @budget, geozone_id: nil) } + 16.times { create(:budget_investment, budget: @budget) } click_link "Print budget investments" + expect(page).to have_content(@budget.name) within "#budget_#{@budget.id}" do click_link "Support Budget Investments" end @@ -206,16 +213,17 @@ feature 'Budget Investments' do end scenario "Filtering budget investments by geozone to be printed", :js do - district_9 = create(:geozone, name: "District Nine") - create(:budget_investment, budget: @budget, title: 'Change district 9', geozone: district_9, cached_votes_up: 10) - create(:budget_investment, budget: @budget, title: 'Destroy district 9', geozone: district_9, cached_votes_up: 100) - create(:budget_investment, budget: @budget, title: 'Nuke district 9', geozone: district_9, cached_votes_up: 1) - create(:budget_investment, budget: @budget, title: 'Add new districts to the city', geozone_id: nil) + district_9 = create(:budget_heading, group: @group, name: "District Nine") + create(:budget_investment, budget: @budget, title: 'Change district 9', heading: district_9, cached_votes_up: 10) + create(:budget_investment, budget: @budget, title: 'Destroy district 9', heading: district_9, cached_votes_up: 100) + create(:budget_investment, budget: @budget, title: 'Nuke district 9', heading: district_9, cached_votes_up: 1) + create(:budget_investment, budget: @budget, title: 'Add new districts to the city', heading: @heading) user = create(:user, :level_two) login_managed_user(user) click_link "Print budget investments" + expect(page).to have_content(@budget.name) within "#budget_#{@budget.id}" do click_link "Support Budget Investments" end