Skip to content

Commit 6a0acdb

Browse files
authored
Merge pull request #2709 from DFE-Digital/AQTS-876-dev-fi-response-received-1st-and-2nd-accept-reject
[AQTS-876] FI response received UI updates + Accept/Reject per FI item
2 parents 7d09ca8 + a9cb079 commit 6a0acdb

28 files changed

+1145
-246
lines changed

app/controllers/assessor_interface/further_information_requests_controller.rb

Lines changed: 76 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@ class FurtherInformationRequestsController < BaseController
1010
authorize [:assessor_interface, further_information_request]
1111
end
1212

13+
before_action :ensure_can_decline, only: %i[edit_decline update_decline]
1314
before_action :load_application_form_and_assessment, only: %i[new edit]
14-
before_action :load_view_object, only: %i[edit update]
15+
before_action :load_view_object,
16+
only: %i[edit update edit_decline update_decline]
1517

1618
def new
1719
@further_information_request =
@@ -34,19 +36,57 @@ def create
3436

3537
def edit
3638
@form =
37-
RequestableReviewForm.new(
38-
requestable: view_object.further_information_request,
39+
form_class.new(
3940
user: current_staff,
40-
passed: view_object.further_information_request.review_passed,
41-
note: view_object.further_information_request.review_note,
41+
**form_class.initial_attributes(further_information_request),
4242
)
4343
end
4444

4545
def update
4646
@form =
47-
RequestableReviewForm.new(
48-
requestable_review_form_params.merge(
49-
requestable: view_object.further_information_request,
47+
form_class.new(
48+
further_information_request_review_form_params.merge(
49+
further_information_request:,
50+
user: current_staff,
51+
),
52+
)
53+
54+
if @form.save
55+
if @form.all_further_information_request_items_accepted?
56+
redirect_to [
57+
:edit,
58+
:assessor_interface,
59+
view_object.application_form,
60+
view_object.assessment,
61+
]
62+
else
63+
redirect_to [
64+
:decline,
65+
:assessor_interface,
66+
view_object.application_form,
67+
view_object.assessment,
68+
view_object.further_information_request,
69+
]
70+
end
71+
else
72+
render :edit, status: :unprocessable_entity
73+
end
74+
end
75+
76+
def edit_decline
77+
@form =
78+
AssessorInterface::FurtherInformationRequestDeclineForm.new(
79+
further_information_request:,
80+
user: current_staff,
81+
note: further_information_request.review_note,
82+
)
83+
end
84+
85+
def update_decline
86+
@form =
87+
AssessorInterface::FurtherInformationRequestDeclineForm.new(
88+
further_information_request_decline_form_params.merge(
89+
further_information_request:,
5090
user: current_staff,
5191
),
5292
)
@@ -59,12 +99,19 @@ def update
5999
view_object.assessment,
60100
]
61101
else
62-
render :edit, status: :unprocessable_entity
102+
render :edit_decline, status: :unprocessable_entity
63103
end
64104
end
65105

66106
private
67107

108+
def form_class
109+
@form_class ||=
110+
AssessorInterface::FurtherInformationRequestReviewForm.for_further_information_request(
111+
further_information_request,
112+
)
113+
end
114+
68115
def load_application_form_and_assessment
69116
@application_form = application_form
70117
@assessment = assessment
@@ -98,11 +145,26 @@ def view_object
98145
@view_object ||= FurtherInformationRequestViewObject.new(params:)
99146
end
100147

101-
def requestable_review_form_params
102-
params.require(:assessor_interface_requestable_review_form).permit(
103-
:passed,
104-
:note,
105-
)
148+
def further_information_request_review_form_params
149+
unless params[:assessor_interface_further_information_request_review_form]
150+
return {}
151+
end
152+
153+
params.require(
154+
:assessor_interface_further_information_request_review_form,
155+
).permit(*form_class.permittable_parameters(further_information_request))
156+
end
157+
158+
def further_information_request_decline_form_params
159+
params.require(
160+
:assessor_interface_further_information_request_decline_form,
161+
).permit(:note)
162+
end
163+
164+
def ensure_can_decline
165+
return if view_object.can_decline?
166+
167+
redirect_to [:assessor_interface, view_object.application_form]
106168
end
107169
end
108170
end
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# frozen_string_literal: true
2+
3+
class AssessorInterface::FurtherInformationRequestDeclineForm
4+
include ActiveModel::Model
5+
include ActiveModel::Attributes
6+
7+
attr_accessor :further_information_request, :user
8+
validates :further_information_request, :user, presence: true
9+
10+
attribute :note, :string
11+
validates :note, presence: true
12+
13+
def save
14+
return false if invalid?
15+
16+
ReviewRequestable.call(
17+
requestable: further_information_request,
18+
user:,
19+
passed: false,
20+
note:,
21+
)
22+
23+
true
24+
end
25+
end
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# frozen_string_literal: true
2+
3+
class AssessorInterface::FurtherInformationRequestReviewForm
4+
include ActiveModel::Model
5+
include ActiveModel::Attributes
6+
7+
attr_accessor :further_information_request, :user
8+
validates :further_information_request, :user, presence: true
9+
10+
def save
11+
return false if invalid?
12+
13+
ActiveRecord::Base.transaction do
14+
further_information_request.items.each do |item|
15+
review_decision = send("#{item.id}_decision")
16+
17+
item.update!(review_decision:)
18+
end
19+
end
20+
21+
if all_further_information_request_items_accepted?
22+
ReviewRequestable.call(
23+
requestable: further_information_request,
24+
user:,
25+
passed: true,
26+
note: "",
27+
)
28+
end
29+
30+
true
31+
end
32+
33+
def all_further_information_request_items_accepted?
34+
further_information_request.items.all?(&:review_decision_accept?)
35+
end
36+
37+
class << self
38+
def for_further_information_request(further_information_request)
39+
klass =
40+
Class.new(self) do
41+
mattr_accessor :preliminary
42+
43+
def self.name
44+
"AssessorInterface::FurtherInformationRequestReviewForm"
45+
end
46+
end
47+
48+
further_information_request.items.each do |item|
49+
klass.attribute "#{item.id}_decision"
50+
klass.validates "#{item.id}_decision",
51+
inclusion: {
52+
in:
53+
FurtherInformationRequestItem.review_decisions.keys,
54+
message:
55+
"Select how you would like to respond to the applicant’s information",
56+
}
57+
end
58+
59+
klass
60+
end
61+
62+
def initial_attributes(further_information_request)
63+
attributes = { further_information_request: }
64+
65+
further_information_request.items.each do |item|
66+
attributes["#{item.id}_decision"] = item.review_decision
67+
end
68+
69+
attributes
70+
end
71+
72+
def permittable_parameters(further_information_request)
73+
further_information_request.items.map { |item| "#{item.id}_decision" }
74+
end
75+
end
76+
end

app/models/further_information_request_item.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
# failure_reason_key :string default(""), not null
1313
# information_type :string
1414
# response :text
15+
# review_decision :string
16+
# review_decision_note :text
1517
# created_at :datetime not null
1618
# updated_at :datetime not null
1719
# further_information_request_id :bigint
@@ -40,6 +42,8 @@ class FurtherInformationRequestItem < ApplicationRecord
4042
work_history_contact: "work_history_contact",
4143
}
4244

45+
enum :review_decision, { accept: "accept", decline: "decline" }, prefix: true
46+
4347
def status
4448
if completed?
4549
"completed"
@@ -76,4 +80,11 @@ def update_work_history_contact(user:)
7680
email: contact_email,
7781
)
7882
end
83+
84+
def assessment_section
85+
assessment
86+
.sections
87+
.includes(:selected_failure_reasons)
88+
.find_by(selected_failure_reasons: { key: failure_reason_key })
89+
end
7990
end

app/policies/assessor_interface/further_information_request_policy.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,12 @@ def edit?
1414

1515
true
1616
end
17+
18+
def edit_decline?
19+
edit?
20+
end
21+
22+
def update_decline?
23+
update?
24+
end
1725
end

app/view_objects/assessor_interface/application_forms_show_view_object.rb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,14 @@ def further_information_request_task_list_item(further_information_request)
263263
if !further_information_request.received?
264264
:cannot_start
265265
elsif !further_information_request.reviewed?
266-
:not_started
266+
if further_information_request
267+
.items
268+
.pluck(:review_decision)
269+
.all?(&:nil?)
270+
:not_started
271+
else
272+
:in_progress
273+
end
267274
elsif assessment.request_further_information?
268275
:in_progress
269276
else

0 commit comments

Comments
 (0)