diff --git a/app/models/user.rb b/app/models/user.rb index 136241494ab..6728bb94724 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -152,6 +152,10 @@ def administer_org_users? admin? || granted?("Admin Intake") || roles.include?("Admin Intake") || member_of_organization?(Bva.singleton) end + def can_edit_intake_issues? + BvaIntake.singleton.admins.include?(self) + end + def can_view_overtime_status? (attorney_in_vacols? || judge_in_vacols?) && FeatureToggle.enabled?(:overtime_revamp, user: self) end diff --git a/app/views/appeals/edit.html.erb b/app/views/appeals/edit.html.erb index 04a7e4fc1d3..9c0ac63aa8a 100644 --- a/app/views/appeals/edit.html.erb +++ b/app/views/appeals/edit.html.erb @@ -3,6 +3,7 @@ userDisplayName: current_user.display_name, userCanWithdrawIssues: current_user.can_withdraw_issues?, userCanSplitAppeal: current_user.can_split_appeal?(appeal), + userCanEditIntakeIssues: current_user.can_edit_intake_issues?, appeal: appeal, hearings: appeal.hearings, hearingDayDate: appeal.hearing_day_if_schedueled, diff --git a/app/views/higher_level_reviews/edit.html.erb b/app/views/higher_level_reviews/edit.html.erb index db20b227ae3..5ba9aa303dc 100644 --- a/app/views/higher_level_reviews/edit.html.erb +++ b/app/views/higher_level_reviews/edit.html.erb @@ -2,6 +2,7 @@ <%= react_component("IntakeEdit", props: { userDisplayName: current_user.display_name, userCanWithdrawIssues: current_user.can_withdraw_issues?, + userCanEditIntakeIssues: current_user.can_edit_intake_issues?, dropdownUrls: dropdown_urls, feedbackUrl: feedback_url, buildDate: build_date, diff --git a/app/views/supplemental_claims/edit.html.erb b/app/views/supplemental_claims/edit.html.erb index f8d915babfe..ba8e1e9daf4 100644 --- a/app/views/supplemental_claims/edit.html.erb +++ b/app/views/supplemental_claims/edit.html.erb @@ -2,6 +2,7 @@ <%= react_component("IntakeEdit", props: { userDisplayName: current_user.display_name, userCanWithdrawIssues: current_user.can_withdraw_issues?, + userCanEditIntakeIssues: current_user.can_edit_intake_issues?, dropdownUrls: dropdown_urls, feedbackUrl: feedback_url, buildDate: build_date, diff --git a/client/app/intake/components/IssueList.jsx b/client/app/intake/components/IssueList.jsx index 5aece57479f..2eabf6f8965 100644 --- a/client/app/intake/components/IssueList.jsx +++ b/client/app/intake/components/IssueList.jsx @@ -16,7 +16,7 @@ const nonEditableIssueStyling = css({ }); export default class IssuesList extends React.Component { - generateIssueActionOptions = (issue, userCanWithdrawIssues, isDtaError) => { + generateIssueActionOptions = (issue, userCanWithdrawIssues, userCanEditIntakeIssues, isDtaError) => { let options = []; if (issue.correctionType && issue.endProductCleared) { @@ -27,6 +27,12 @@ export default class IssuesList extends React.Component { { displayText: 'Remove issue', value: 'remove' } ); + if (userCanEditIntakeIssues) { + options.push( + { displayText: 'Edit issue', + value: 'edit' } + ); + } } else if (issue.endProductCleared) { options.push({ displayText: 'Correct issue', value: 'correct' }); @@ -41,6 +47,12 @@ export default class IssuesList extends React.Component { { displayText: 'Remove issue', value: 'remove' } ); + if (userCanEditIntakeIssues) { + options.push( + { displayText: 'Edit issue', + value: 'edit' } + ); + } } return options; @@ -54,6 +66,7 @@ export default class IssuesList extends React.Component { onClickIssueAction, withdrawReview, userCanWithdrawIssues, + userCanEditIntakeIssues, editPage } = this.props; @@ -70,7 +83,7 @@ export default class IssuesList extends React.Component { editableIssueProperties); const issueActionOptions = this.generateIssueActionOptions( - issue, userCanWithdrawIssues, intakeData.isDtaError + issue, userCanWithdrawIssues, userCanEditIntakeIssues, intakeData.isDtaError ); return
@@ -127,5 +140,6 @@ IssuesList.propTypes = { onClickIssueAction: PropTypes.func, withdrawReview: PropTypes.bool, userCanWithdrawIssues: PropTypes.bool, + userCanEditIntakeIssues: PropTypes.bool, editPage: PropTypes.bool }; diff --git a/client/app/intake/pages/addIssues.jsx b/client/app/intake/pages/addIssues.jsx index 8b0bbc681ba..fe81116d548 100644 --- a/client/app/intake/pages/addIssues.jsx +++ b/client/app/intake/pages/addIssues.jsx @@ -208,6 +208,7 @@ class AddIssuesPage extends React.Component { editPage, addingIssue, userCanWithdrawIssues, + userCanEditIntakeIssues, userCanSplitAppeal } = this.props; const intakeData = intakeForms[formType]; @@ -394,6 +395,7 @@ class AddIssuesPage extends React.Component { formType={formType} featureToggles={featureToggles} userCanWithdrawIssues={userCanWithdrawIssues} + userCanEditIntakeIssues={userCanEditIntakeIssues && this.props.featureToggles.mst_pact_identification} editPage={editPage} /> {showPreDocketBanner && } @@ -562,6 +564,7 @@ AddIssuesPage.propTypes = { veteran: PropTypes.object, withdrawIssue: PropTypes.func, userCanWithdrawIssues: PropTypes.bool, + userCanEditIntakeIssues: PropTypes.bool, userCanSplitAppeal: PropTypes.bool }; @@ -611,6 +614,7 @@ export const EditAddIssuesPage = connect( activeIssue: state.activeIssue, addingIssue: state.addingIssue, userCanWithdrawIssues: state.userCanWithdrawIssues, + userCanEditIntakeIssues: state.userCanEditIntakeIssues, userCanSplitAppeal: state.userCanSplitAppeal }), diff --git a/client/app/intakeEdit/reducers/index.js b/client/app/intakeEdit/reducers/index.js index efd87edcb99..de9761a80bb 100644 --- a/client/app/intakeEdit/reducers/index.js +++ b/client/app/intakeEdit/reducers/index.js @@ -7,7 +7,7 @@ import { formatRequestIssues, formatContestableIssues } from '../../intake/util/ import { formatRelationships } from '../../intake/util'; export const mapDataToInitialState = function(props = {}) { - const { serverIntake, claimId, featureToggles, userCanWithdrawIssues, userCanSplitAppeal} = props; + const { serverIntake, claimId, featureToggles, userCanWithdrawIssues, userCanEditIntakeIssues, userCanSplitAppeal} = props; serverIntake.relationships = formatRelationships(serverIntake.relationships); serverIntake.contestableIssues = formatContestableIssues(serverIntake.contestableIssuesByDate); @@ -28,6 +28,7 @@ export const mapDataToInitialState = function(props = {}) { claimId, featureToggles, userCanWithdrawIssues, + userCanEditIntakeIssues, userCanSplitAppeal, addIssuesModalVisible: false, nonRatingRequestIssueModalVisible: false,