Skip to content

Commit

Permalink
Merge branch 'feature/APPEALS-60433' into Ki/APPEALS-54280
Browse files Browse the repository at this point in the history
  • Loading branch information
KiMauVA authored Oct 25, 2024
2 parents 5d17481 + 1042bee commit 0567ed1
Show file tree
Hide file tree
Showing 11 changed files with 502 additions and 85 deletions.
34 changes: 3 additions & 31 deletions app/controllers/appeals_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -193,40 +193,12 @@ def active_evidence_submissions

private

REQUEST_ISSUE_PARAMS = %w[
request_issue_id
rating_issue_reference_id
rating_decision_reference_id
rating_issue_profile_date
notes
ramp_claim_id
vacols_id
vacols_sequence_id
contested_decision_issue_id
vbms_mst_status
vbms_pact_status
rating_issue_diagnostic_code
mst_status_update_reason_notes
pact_status_update_reason_notes
benefit_type
nonrating_issue_category
decision_text
decision_date
ineligible_due_to_id
ineligible_reason
withdrawal_date
is_predocket_needed
mst_status
pact_status
].freeze

def appeals_controller_params
params.permit(
:appeal_id,
:any,
:appeals_id,
:veteran_ids,
request_issues: REQUEST_ISSUE_PARAMS
:veteran_ids
)
end

Expand Down Expand Up @@ -257,7 +229,7 @@ def request_issues_update
@request_issues_update ||= RequestIssuesUpdate.new(
user: current_user,
review: appeal,
request_issues_data: appeals_controller_params[:request_issues]
request_issues_data: params[:request_issues]
)
end

Expand Down Expand Up @@ -325,7 +297,7 @@ def mst_and_pact_edited_issues
pact_removed = 0
# get edited issues from params and reject new issues without id
if !appeal.is_a?(LegacyAppeal)
existing_issues = appeals_controller_params[:request_issues].reject { |iss| iss[:request_issue_id].nil? }
existing_issues = params[:request_issues].reject { |iss| iss[:request_issue_id].nil? }

# get added issues
new_issues = request_issues_update.after_issues - request_issues_update.before_issues
Expand Down
17 changes: 14 additions & 3 deletions app/controllers/correspondence_details_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -129,8 +129,11 @@ def access_redirect

def update_correspondence
if correspondence_intake_processor.update_correspondence(intake_processor_params)
render json: { related_appeals: @correspondence.appeal_ids,
correspondence_appeals: serialized_correspondence_appeals }, status: :created
render json: {
related_appeals: @correspondence.appeal_ids,
correspondence: serialized_correspondence,
correspondence_appeals: serialized_correspondence_appeals
}, status: :created
else
render json: { error: "Failed to update records" }, status: :bad_request
end
Expand Down Expand Up @@ -178,7 +181,15 @@ def intake_processor_params
related_correspondence_uuids: [],
correspondence_relations: [:uuid],
related_appeal_ids: [],
unselected_appeal_ids: []
unselected_appeal_ids: [],
tasks_not_related_to_appeal: [
:klass,
:assigned_to,
:content,
:label,
:assignedOn,
:instructions
]
)
end

Expand Down
47 changes: 32 additions & 15 deletions app/services/correspondence_intake_processor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,11 @@
# :reek:FeatureEnvy
class CorrespondenceIntakeProcessor
def process_intake(intake_params, current_user)
correspondence = Correspondence.find_by(uuid: intake_params[:correspondence_uuid])

fail "Correspondence not found" if correspondence.blank?
correspondence = find_correspondence(intake_params[:correspondence_uuid])

parent_task = CorrespondenceIntakeTask.find_by(appeal_id: correspondence.id)

return false if !correspondence_documents_efolder_uploader.upload_documents_to_claim_evidence(
return false unless correspondence_documents_efolder_uploader.upload_documents_to_claim_evidence(
correspondence,
current_user,
parent_task
Expand All @@ -21,21 +19,17 @@ def process_intake(intake_params, current_user)

def update_correspondence(intake_params)
# Fetch the correspondence using the UUID from the intake params
correspondence = Correspondence.find_by(uuid: intake_params[:correspondence_uuid])

# Fail if correspondence is not found
fail "Correspondence not found" if correspondence.blank?
correspondence = find_correspondence(intake_params[:correspondence_uuid])

ActiveRecord::Base.transaction do
create_correspondence_relations(intake_params, correspondence.id, true)
link_appeals_to_correspondence(intake_params, correspondence.id)
unlink_appeals_to_correspondence(intake_params, correspondence)
# Ensure relations removal logic is in place
remove_correspondence_relations(intake_params, correspondence)

# Additional logic to update correspondence fields if necessary (optional)
# Method to add a task unrelated to appeals
add_task_not_related_to_appeals(intake_params, correspondence)
end

# Return success after successful update
true
rescue StandardError => error
Expand All @@ -44,15 +38,18 @@ def update_correspondence(intake_params)
end

def create_letter(params, _current_user)
correspondence = Correspondence.find_by(uuid: params[:correspondence_uuid])

fail "Correspondence not found" if correspondence.blank?

correspondence = find_correspondence(params[:correspondence_uuid])
create_response_letter(params, correspondence.id)
end

private

def find_correspondence(uuid)
correspondence = Correspondence.find_by(uuid: uuid)
fail "Correspondence not found" if correspondence.blank?
correspondence
end

# :reek:LongParameterList
def do_upload_success_actions(parent_task, intake_params, correspondence, current_user)
ActiveRecord::Base.transaction do
Expand Down Expand Up @@ -196,6 +193,26 @@ def create_tasks_not_related_to_appeals(intake_params, correspondence, current_u
end
end

# Add a task not related to appeals
def add_task_not_related_to_appeals(intake_params, correspondence)
unrelated_task_data = intake_params[:tasks_not_related_to_appeal]

# Ensure the task data is present
return if unrelated_task_data.blank? || unrelated_task_data.empty?

unrelated_task_data.each do |data|
# Create the task using provided parameters
task_class_for_task_unrelated(data).create_from_params(
{
parent_id: correspondence.root_task.id,
assigned_to: class_for_assigned_to(data[:assigned_to]).singleton,
instructions: data[:content]
},
RequestStore.store[:current_user] || User.system_user
)
end
end

def create_mail_tasks(intake_params, correspondence, current_user)
mail_task_data = intake_params[:mail_tasks]

Expand Down
13 changes: 7 additions & 6 deletions client/app/queue/correspondence/CorrespondenceTaskRows.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,6 @@ class CorrespondenceTaskRows extends React.PureComponent {
index,
timeline,
correspondence

} = templateConfig;

const timelineTitle = isCancelled(task) ? `${task.type} cancelled` : task.timelineTitle;
Expand All @@ -205,8 +204,8 @@ class CorrespondenceTaskRows extends React.PureComponent {
<td className={tdClassNamesforCorrespondence(timeline, task)}>
{isCancelled(task) ? <CancelIcon /> : closedAtIcon(task, timeline)}

{((index < sortedTimelineEvents?.length && timeline) ||
(index < this.state.activeTasks?.length - 1 && !timeline)) && (
{/* Render grey line between tasks */}
{index < sortedTimelineEvents.length - 1 && (
<div className={['grayLineStyling', cancelGrayTimeLineStyle(timeline)].join(' ')} />
)}
</td>
Expand All @@ -218,9 +217,11 @@ class CorrespondenceTaskRows extends React.PureComponent {
{this.showTimelineDescriptionItems(task)}
</CaseDetailsDescriptionList>
</td>
{!timeline && <td className="taskContainerStyling taskActionsContainerStyling">
{this.showActionsListItem(task, correspondence)}
</td>}
{!timeline && (
<td className="taskContainerStyling taskActionsContainerStyling">
{this.showActionsListItem(task, correspondence)}
</td>
)}
</tr>
);
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -325,15 +325,78 @@ export const setTasksUnrelatedToAppealEmpty = (tasksUnrelatedToAppealEmpty) => (
});
};

export const updateCorrespondenceInfo = (correspondence) => (dispatch) => {
dispatch({
type: ACTIONS.CORRESPONDENCE_INFO,
payload: {
correspondence
}
});
// Add task not related to appeal
export const addTaskNotRelatedToAppeal = (correspondence, taskData) => (dispatch) => {
const patchData = {
tasks_not_related_to_appeal: [{
klass: taskData.klass,
assigned_to: taskData.assigned_to,
content: taskData.content,
label: taskData.label,
assignedOn: taskData.assignedOn,
instructions: taskData.instructions
}]
};

// Return a promise so that the caller can await the result
return ApiUtil.patch(`/queue/correspondence/${correspondence.uuid}/update_correspondence`, { data: patchData }).
then((response) => {
// Fetch the updated correspondence information from the response
const updatedCorrespondence = response.body.correspondence;

// Dispatch action to update correspondence info in the Redux store
dispatch({
type: ACTIONS.CORRESPONDENCE_INFO,
payload: {
correspondence: updatedCorrespondence
}
});

dispatch({
type: ACTIONS.SET_CORRESPONDENCE_TASK_NOT_RELATED_TO_APPEAL_BANNER,
payload: {
bannerAlert: {
title: CORRESPONDENCE_DETAILS_BANNERS.completeTaskNotRelatedBanner.title,
message: sprintf(CORRESPONDENCE_DETAILS_BANNERS.completeTaskNotRelatedBanner.message, taskData.label),
type: CORRESPONDENCE_DETAILS_BANNERS.completeTaskNotRelatedBanner.type
}
}
});

// Return the response for any further handling
return response;
}).
catch((error) => {
const errorMessage = error?.response?.body?.message ?
error.response.body.message.replace(/^Error:\s*/, '') :
error.message;

dispatch({
type: ACTIONS.SET_CORRESPONDENCE_TASK_NOT_RELATED_TO_APPEAL_BANNER,
payload: {
bannerAlert: {
title: CORRESPONDENCE_DETAILS_BANNERS.taskActionFailBanner.title,
message: sprintf(CORRESPONDENCE_DETAILS_BANNERS.taskActionFailBanner.message, errorMessage),
type: CORRESPONDENCE_DETAILS_BANNERS.taskActionFailBanner.type
}
}
});

// Reject the promise to handle the error in the component
return Promise.reject(error);
});
};

export const updateCorrespondenceInfo = (correspondence) =>
(dispatch) => {
dispatch({
type: ACTIONS.CORRESPONDENCE_INFO,
payload: {
correspondence
}
});
};

export const editCorrespondenceGeneralInformation = (payload, uuid) => (dispatch) => {
return ApiUtil.patch(`/queue/correspondence/${uuid}/edit_general_information`, payload).
then((response) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,7 @@ export const ACTIONS = {
CORRESPONDENCE_INFO: 'CORRESPONDENCE_INFO',
CANCEL_TASK_NOT_RELATED_TO_APPEAL: 'CANCEL_TASK_NOT_RELATED_TO_APPEAL',
TASKS_UNRELATED_TO_APPEAL_EMPTY: 'TASKS_UNRELATED_TO_APPEAL_EMPTY',
UNRELATED_TASK_LIST: 'UNRELATED_TASK_LIST',
EVIDENCE_SUBMISSION_BANNER: 'EVIDENCE_SUBMISSION_BANNER',
EXPANDED_LINKED_APPEALS: 'EXPANDED_LINKED_APPEALS'
};
Loading

0 comments on commit 0567ed1

Please sign in to comment.