diff --git a/app/models/spending_proposal.rb b/app/models/spending_proposal.rb index f51ef9fd5..6339fd545 100644 --- a/app/models/spending_proposal.rb +++ b/app/models/spending_proposal.rb @@ -6,6 +6,9 @@ class SpendingProposal < ActiveRecord::Base belongs_to :author, -> { with_hidden }, class_name: 'User', foreign_key: 'author_id' belongs_to :geozone + belongs_to :administrator + has_many :valuation_assignments, dependent: :destroy + has_many :valuators, through: :valuation_assignments validates :title, presence: true validates :author, presence: true diff --git a/app/models/valuation_assignment.rb b/app/models/valuation_assignment.rb new file mode 100644 index 000000000..c26b7087f --- /dev/null +++ b/app/models/valuation_assignment.rb @@ -0,0 +1,4 @@ +class ValuationAssignment < ActiveRecord::Base + belongs_to :valuator + belongs_to :spending_proposal +end diff --git a/app/models/valuator.rb b/app/models/valuator.rb index c513e997e..9e18d2cca 100644 --- a/app/models/valuator.rb +++ b/app/models/valuator.rb @@ -2,5 +2,8 @@ class Valuator < ActiveRecord::Base belongs_to :user, touch: true delegate :name, :email, to: :user + has_many :valuation_assignments, dependent: :destroy + has_many :spending_proposals, through: :valuation_assignments + validates :user_id, presence: true, uniqueness: true end diff --git a/db/migrate/20160224101038_change_spending_proposals_fields.rb b/db/migrate/20160224101038_change_spending_proposals_fields.rb new file mode 100644 index 000000000..22a7270cb --- /dev/null +++ b/db/migrate/20160224101038_change_spending_proposals_fields.rb @@ -0,0 +1,16 @@ +class ChangeSpendingProposalsFields < ActiveRecord::Migration + def change + remove_index :spending_proposals, column: :resolution + + remove_column :spending_proposals, :legal, :boolean + remove_column :spending_proposals, :resolution, :string + remove_column :spending_proposals, :explanation, :text + + add_column :spending_proposals, :price_explanation, :text + add_column :spending_proposals, :feasible_explanation, :text + add_column :spending_proposals, :internal_comments, :text + add_column :spending_proposals, :valuation_finished, :boolean, default: false + add_column :spending_proposals, :explanations_log, :text + add_column :spending_proposals, :administrator_id, :integer + end +end diff --git a/db/migrate/20160224123110_create_valuation_assignments.rb b/db/migrate/20160224123110_create_valuation_assignments.rb new file mode 100644 index 000000000..7ec9a9df4 --- /dev/null +++ b/db/migrate/20160224123110_create_valuation_assignments.rb @@ -0,0 +1,9 @@ +class CreateValuationAssignments < ActiveRecord::Migration + def change + create_table :valuation_assignments do |t| + t.belongs_to :valuator + t.belongs_to :spending_proposal + t.timestamps null: false + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 2c948febc..fd1e0e484 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20160222145100) do +ActiveRecord::Schema.define(version: 20160224123110) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -108,10 +108,10 @@ ActiveRecord::Schema.define(version: 20160222145100) do t.string "visit_id" t.datetime "hidden_at" t.integer "flags_count", default: 0 - t.datetime "ignored_flag_at" t.integer "cached_votes_total", default: 0 t.integer "cached_votes_up", default: 0 t.integer "cached_votes_down", default: 0 + t.datetime "ignored_flag_at" t.integer "comments_count", default: 0 t.datetime "confirmed_hide_at" t.integer "cached_anonymous_votes_total", default: 0 @@ -129,6 +129,7 @@ ActiveRecord::Schema.define(version: 20160222145100) do add_index "debates", ["cached_votes_total"], name: "index_debates_on_cached_votes_total", using: :btree add_index "debates", ["cached_votes_up"], name: "index_debates_on_cached_votes_up", using: :btree add_index "debates", ["confidence_score"], name: "index_debates_on_confidence_score", using: :btree + add_index "debates", ["description"], name: "index_debates_on_description", using: :btree add_index "debates", ["geozone_id"], name: "index_debates_on_geozone_id", using: :btree add_index "debates", ["hidden_at"], name: "index_debates_on_hidden_at", using: :btree add_index "debates", ["hot_score"], name: "index_debates_on_hot_score", using: :btree @@ -205,7 +206,7 @@ ActiveRecord::Schema.define(version: 20160222145100) do create_table "locks", force: :cascade do |t| t.integer "user_id" t.integer "tries", default: 0 - t.datetime "locked_until", default: '2000-01-01 07:01:01', null: false + t.datetime "locked_until", default: '2000-01-01 00:01:01', null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false end @@ -265,6 +266,7 @@ ActiveRecord::Schema.define(version: 20160222145100) do add_index "proposals", ["author_id"], name: "index_proposals_on_author_id", using: :btree add_index "proposals", ["cached_votes_up"], name: "index_proposals_on_cached_votes_up", using: :btree add_index "proposals", ["confidence_score"], name: "index_proposals_on_confidence_score", using: :btree + add_index "proposals", ["description"], name: "index_proposals_on_description", using: :btree add_index "proposals", ["geozone_id"], name: "index_proposals_on_geozone_id", using: :btree add_index "proposals", ["hidden_at"], name: "index_proposals_on_hidden_at", using: :btree add_index "proposals", ["hot_score"], name: "index_proposals_on_hot_score", using: :btree @@ -294,20 +296,22 @@ ActiveRecord::Schema.define(version: 20160222145100) do t.text "description" t.integer "author_id" t.string "external_url" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false t.integer "geozone_id" - t.string "resolution" t.float "price" - t.boolean "legal" t.boolean "feasible" - t.text "explanation" t.string "association_name" + t.text "price_explanation" + t.text "feasible_explanation" + t.text "internal_comments" + t.boolean "valuation_finished", default: false + t.text "explanations_log" + t.integer "administrator_id" end add_index "spending_proposals", ["author_id"], name: "index_spending_proposals_on_author_id", using: :btree add_index "spending_proposals", ["geozone_id"], name: "index_spending_proposals_on_geozone_id", using: :btree - add_index "spending_proposals", ["resolution"], name: "index_spending_proposals_on_resolution", using: :btree create_table "taggings", force: :cascade do |t| t.integer "tag_id" @@ -328,8 +332,8 @@ ActiveRecord::Schema.define(version: 20160222145100) do t.boolean "featured", default: false t.integer "debates_count", default: 0 t.integer "proposals_count", default: 0 - t.string "kind" t.integer "spending_proposals_count", default: 0 + t.string "kind" end add_index "tags", ["debates_count"], name: "index_tags_on_debates_count", using: :btree @@ -405,8 +409,8 @@ ActiveRecord::Schema.define(version: 20160222145100) do t.boolean "public_activity", default: true t.boolean "newsletter", default: false t.integer "notifications_count", default: 0 - t.string "locale" t.boolean "registering_with_oauth", default: false + t.string "locale" t.string "oauth_email" t.integer "geozone_id" t.string "redeemable_code" @@ -418,6 +422,13 @@ ActiveRecord::Schema.define(version: 20160222145100) do add_index "users", ["hidden_at"], name: "index_users_on_hidden_at", using: :btree add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree + create_table "valuation_assignments", force: :cascade do |t| + t.integer "valuator_id" + t.integer "spending_proposal_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + create_table "valuators", force: :cascade do |t| t.integer "user_id" end diff --git a/spec/factories.rb b/spec/factories.rb index 0e5831556..6cfe2779b 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -1,4 +1,5 @@ FactoryGirl.define do + sequence(:document_number) { |n| "#{n.to_s.rjust(8, '0')}X" } factory :user do diff --git a/spec/features/admin/spending_proposals_spec.rb b/spec/features/admin/spending_proposals_spec.rb index 5f2527fe4..de1906a76 100644 --- a/spec/features/admin/spending_proposals_spec.rb +++ b/spec/features/admin/spending_proposals_spec.rb @@ -25,6 +25,7 @@ feature 'Admin spending proposals' do association_name: 'People of the neighbourhood', price: 1234.56, feasible: false, + feasible_explanation: "It's impossible") visit admin_spending_proposals_path click_link spending_proposal.title