diff --git a/app/models/budget/ballot/line.rb b/app/models/budget/ballot/line.rb index a3c24b631..0e989c16c 100644 --- a/app/models/budget/ballot/line.rb +++ b/app/models/budget/ballot/line.rb @@ -16,6 +16,7 @@ class Budget scope :by_investment, ->(investment_id) { where(investment_id: investment_id) } before_validation :set_denormalized_ids + after_save :store_user_heading def check_sufficient_funds errors.add(:money, "insufficient funds") if ballot.amount_available(investment.heading) < investment.price.to_i @@ -37,6 +38,10 @@ class Budget self.group_id ||= investment.try(:group_id) self.budget_id ||= investment.try(:budget_id) end + + def store_user_heading + ballot.user.update(balloted_heading_id: heading.id) + end end end end diff --git a/db/migrate/20170514192303_add_balloted_heading_id_to_users.rb b/db/migrate/20170514192303_add_balloted_heading_id_to_users.rb new file mode 100644 index 000000000..d1fcd04cb --- /dev/null +++ b/db/migrate/20170514192303_add_balloted_heading_id_to_users.rb @@ -0,0 +1,5 @@ +class AddBallotedHeadingIdToUsers < ActiveRecord::Migration + def change + add_column :users, :balloted_heading_id, :integer, default: nil + end +end diff --git a/db/schema.rb b/db/schema.rb index d65c89471..09c6a5a64 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -1456,6 +1456,7 @@ ActiveRecord::Schema.define(version: 20190205131722) do t.boolean "created_from_signature", default: false t.integer "failed_email_digests_count", default: 0 t.text "former_users_data_log", default: "" + t.integer "balloted_heading_id" t.boolean "public_interests", default: false t.boolean "recommended_debates", default: true t.boolean "recommended_proposals", default: true diff --git a/spec/models/budget/ballot/line_spec.rb b/spec/models/budget/ballot/line_spec.rb index e91d36416..e73d54046 100644 --- a/spec/models/budget/ballot/line_spec.rb +++ b/spec/models/budget/ballot/line_spec.rb @@ -44,6 +44,19 @@ describe Budget::Ballot::Line do end + describe "#store_user_heading" do + + it "stores the heading where the user has voted" do + user = create(:user, :level_two) + investment = create(:budget_investment, :selected) + ballot = create(:budget_ballot, user: user, budget: investment.budget) + + create(:budget_ballot_line, ballot: ballot, investment: investment) + + expect(user.balloted_heading_id).to eq(investment.heading.id) + end + end + describe "scopes" do describe "by_investment" do