diff --git a/app/models/decision_issue.rb b/app/models/decision_issue.rb index 89621cbdd06..447a8c26382 100644 --- a/app/models/decision_issue.rb +++ b/app/models/decision_issue.rb @@ -1,4 +1,5 @@ class DecisionIssue < ApplicationRecord validates :disposition, inclusion: { in: Constants::ISSUE_DISPOSITIONS_BY_ID.keys.map(&:to_s) }, allow_nil: true + # TODO: has_many :request_issues, through: :request_decision_issues belongs_to :source_request_issue, class_name: "RequestIssue" end diff --git a/app/models/rating_issue.rb b/app/models/rating_issue.rb index b8784cfab05..89c9bd83f5d 100644 --- a/app/models/rating_issue.rb +++ b/app/models/rating_issue.rb @@ -47,14 +47,22 @@ def save_decision_issue # if a DecisionIssue already exists then do not touch it. These should be immutable. return if decision_issue - DecisionIssue.create!( - source_request_issue: source_request_issue, - rating_issue_reference_id: reference_id, - participant_id: participant_id, - promulgation_date: promulgation_date, - decision_text: decision_text, - profile_date: profile_date - ) + ActiveRecord::Base.transaction do + created_decision_issue = DecisionIssue.create!( + source_request_issue: source_request_issue, + rating_issue_reference_id: reference_id, + participant_id: participant_id, + promulgation_date: promulgation_date, + decision_text: decision_text, + profile_date: profile_date + ) + + RequestDecisionIssue.create!( + request_issue: source_request_issue, + decision_issue: created_decision_issue + ) + created_decision_issue + end end # If you change this method, you will need to clear cache in prod for your changes to diff --git a/app/models/request_decision_issue.rb b/app/models/request_decision_issue.rb new file mode 100644 index 00000000000..9c87ce1524c --- /dev/null +++ b/app/models/request_decision_issue.rb @@ -0,0 +1,4 @@ +class RequestDecisionIssue < ApplicationRecord + belongs_to :request_issue + belongs_to :decision_issue +end diff --git a/app/models/request_issue.rb b/app/models/request_issue.rb index 3e06d55ccd3..ebec052ae98 100644 --- a/app/models/request_issue.rb +++ b/app/models/request_issue.rb @@ -3,6 +3,7 @@ class RequestIssue < ApplicationRecord belongs_to :review_request, polymorphic: true belongs_to :end_product_establishment + # TODO: has_many :decision_issues, through: :request_decision_issues has_many :decision_issues, foreign_key: "source_request_issue_id" has_many :remand_reasons has_many :duplicate_but_ineligible, class_name: "RequestIssue", foreign_key: "ineligible_due_to_id" diff --git a/db/migrate/20181116155733_create_request_decision_issues.rb b/db/migrate/20181116155733_create_request_decision_issues.rb new file mode 100644 index 00000000000..6f7c8619ed5 --- /dev/null +++ b/db/migrate/20181116155733_create_request_decision_issues.rb @@ -0,0 +1,9 @@ +class CreateRequestDecisionIssues < ActiveRecord::Migration[5.1] + def change + create_table :request_decision_issues do |t| + t.integer :request_issue_id + t.integer :decision_issue_id + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index da39b73949b..76ed248521b 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20181114142531) do +ActiveRecord::Schema.define(version: 20181116155733) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -635,6 +635,13 @@ t.index ["request_issue_id"], name: "index_remand_reasons_on_request_issue_id" end + create_table "request_decision_issues", force: :cascade do |t| + t.integer "request_issue_id" + t.integer "decision_issue_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + create_table "request_issues", force: :cascade do |t| t.string "review_request_type" t.bigint "review_request_id" @@ -654,12 +661,12 @@ t.bigint "ineligible_due_to_id" t.boolean "untimely_exemption" t.text "untimely_exemption_notes" + t.string "ineligible_reason" t.string "ramp_claim_id" t.datetime "decision_sync_submitted_at" t.datetime "decision_sync_attempted_at" t.datetime "decision_sync_processed_at" t.string "decision_sync_error" - t.string "ineligible_reason" t.index ["contention_reference_id", "removed_at"], name: "index_request_issues_on_contention_reference_id_and_removed_at", unique: true t.index ["end_product_establishment_id"], name: "index_request_issues_on_end_product_establishment_id" t.index ["ineligible_due_to_id"], name: "index_request_issues_on_ineligible_due_to_id" diff --git a/spec/models/rating_issue_spec.rb b/spec/models/rating_issue_spec.rb index 55c19b6ce6a..016be50e431 100644 --- a/spec/models/rating_issue_spec.rb +++ b/spec/models/rating_issue_spec.rb @@ -214,6 +214,7 @@ expect(subject.decision_issue).to be_a(DecisionIssue) expect(subject.decision_issue.rating_issue_reference_id).to eq(reference_id) expect(subject.decision_issue.source_request_issue).to eq(request_issue) + expect(RequestDecisionIssue.where(decision_issue: subject.decision_issue).first).to_not be_nil end it "does not save duplicates" do