Skip to content

Commit

Permalink
added logic for claim history events table
Browse files Browse the repository at this point in the history
  • Loading branch information
almorbah committed Aug 14, 2024
1 parent 06c84aa commit fdaa5cf
Show file tree
Hide file tree
Showing 4 changed files with 932 additions and 18 deletions.
1 change: 1 addition & 0 deletions app/services/claim_change_history/claim_history_event.rb
Original file line number Diff line number Diff line change
Expand Up @@ -734,6 +734,7 @@ def parse_request_issue_modification_attributes(change_data)
@decided_at_date = change_data["decided_at"]
@issue_modification_request_withdrawal_date = change_data["issue_modification_request_withdrawal_date"]
@remove_original_issue = change_data["remove_original_issue"]
@issue_modification_request_status = change_data["issue_modification_request_status"]
@requestor = change_data["requestor"]
@decider = change_data["decider"]
end
Expand Down
281 changes: 271 additions & 10 deletions client/app/nonComp/components/IndividualClaimHistoryTable.jsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
import React from 'react';
import React, { useState } from 'react';
import QueueTable from '../../queue/QueueTable';
import BENEFIT_TYPES from 'constants/BENEFIT_TYPES';
import { formatDateStr } from 'app/util/DateUtil';
import PropTypes from 'prop-types';
import StringUtil from 'app/util/StringUtil';

const { capitalizeFirst } = StringUtil;

const IndividualClaimHistoryTable = (props) => {

Expand Down Expand Up @@ -34,15 +37,37 @@ const IndividualClaimHistoryTable = (props) => {
return <React.Fragment>Claim can be processed.</React.Fragment>;
};

const ClaimPendingFragment = () => {
return <React.Fragment>Claim cannot be processed until VHA admin reviews pending requests.</React.Fragment>;
};

const ClaimIncompleteFragment = () => {
return <React.Fragment>Claim cannot be processed until decision date is entered.</React.Fragment>;
};

const ClaimClosedFragment = (details) => {
return <React.Fragment>
Claim closed.<br />
<b>Claim decision date: </b>{formatDecisionDate(details.dispositionDate)}
</React.Fragment>;

let component = null;

switch (details.eventType) {
case 'cancelled':
component = <React.Fragment>
<b>Claim cancelled.</b>
</React.Fragment>;
break;
default:
component = <React.Fragment>
Claim closed.<br />
<b>Claim decision date: </b>{formatDecisionDate(details.dispositionDate)}
</React.Fragment>;
break;
}

return (
<div>
{component}
</div>
);
};

const AddedIssueFragment = (details) => {
Expand All @@ -53,6 +78,140 @@ const IndividualClaimHistoryTable = (props) => {
</React.Fragment>;
};

const RequestedIssueFragment = (details) => {
return <React.Fragment>
<b>Benefit type: </b>{BENEFIT_TYPES[details.benefitType]}<br />
<b>Issue type: </b>{details.newIssueType}<br />
<b>Issue description: </b>{details.newIssueDescription}<br />
<b>Decision date: </b>{formatDecisionDate(details.newDecisionDate)}<br />
<b>{capitalizeFirst(details.requestType)} request reason: </b>{details.modificationRequestReason}<br />
</React.Fragment>;
};

const CancellationRequestedIssueFragment = (details) => {
let component = null;

switch (details.requestType) {
case 'modification':
component = <RequestedIssueModificationFragment {...details} />;
break;
case 'addition':
component = <RequestedIssueFragment {...details} />;
break;
case 'removal':
component = <RequestedIssueFragment {...details} />;
break;
case 'withdrawal':
component = <WithdrawnRequestedIssueModificationFragment {...details} />;
break;
default:
return null;
}

return (
<div>
{component}
</div>
);
};

const WithdrawalRequestedIssueFormat = (details) => {
return <>
<RequestedIssueFragment {...details} />
<b>Withdrawal request date: </b>{formatDecisionDate(details.issueModificationRequestWithdrawalDate)}<br />
</>;
};

const withdrawalRequestDate = (row) => {
if (['withdrawal'].includes(row.requestType)) {
return <React.Fragment>
<b>Withdrawal request date: </b> {formatDecisionDate(row.issueModificationRequestWithdrawalDate)}<br />
</React.Fragment>;
}
};

const RequestedIssueModificationFragment = (details) => {
return <React.Fragment>
<b>Benefit type: </b>{BENEFIT_TYPES[details.benefitType]}<br />
<b>Current issue type: </b>{details.newIssueType}<br />
<b>Current issue description: </b>{details.newIssueDescription}<br />
<b>Current decision date: </b>{formatDecisionDate(details.newDecisionDate)}<br />
<b>New issue type: </b>{details.newIssueType}<br />
<b>New issue description: </b>{details.newIssueDescription}<br />
<b>New decision date: </b>{formatDecisionDate(details.newDecisionDate)}<br />
<b>{capitalizeFirst(details.requestType)} request reason: </b>{details.modificationRequestReason}<br />
</React.Fragment>;
};

const RemoveOriginalIssueFragment = (details) => {
return <React.Fragment>
<b>Remove original issue: </b>{details.removeOriginalIssue ? 'Yes' : 'No' }<br />
</React.Fragment>;
};

const reasonForRejection = (details) => {
return details.issueModificationRequestStatus === 'denied' ? <React.Fragment>
<b> Reason for rejection: </b> {details.decisionReason} <br />
</React.Fragment> : <></>;
};

const requestDecision = (details) => {
return <React.Fragment>
<b> Request decision: </b> {details.issueModificationRequestStatus === 'denied' ? 'Rejected' : 'Approved'} <br />
</React.Fragment>;
};

const RequestedIssueDecisionFragment = (details) => {
return <React.Fragment>
{requestDecision(details)}
{ details.issueModificationRequestStatus === 'approved' && ['modification'].includes(details.requestType) ?
<RemoveOriginalIssueFragment {...details} /> : null
}
{reasonForRejection(details)}
<b>Request originated by: </b>{details.requestor}<br />
</React.Fragment>;
};

const EditOfRequestIssueModification = (details) => {
let component = null;

switch (details.requestType) {
case 'modification':
component = <React.Fragment>
<b>New issue type: </b>{details.newIssueType}<br />
<b>New issue description: </b>{details.newIssueDescription}<br />
<b>New decision date: </b>{formatDecisionDate(details.newDecisionDate)}<br />
<b>New {details.requestType} request reason: </b>{details.modificationRequestReason}<br />
</React.Fragment>;
break;
case 'addition':
component = <React.Fragment>
<b>New issue type: </b>{details.newIssueType}<br />
<b>New issue description: </b>{details.newIssueDescription}<br />
<b>New decision date: </b>{formatDecisionDate(details.newDecisionDate)}<br />
<b>New {details.requestType} request reason: </b>{details.modificationRequestReason}<br />
</React.Fragment>;
break;
case 'removal':
component = <React.Fragment>
<b>New {details.requestType} request reason: </b>{details.requestor}<br />
</React.Fragment>;
break;
case 'withdrawal':
component = <React.Fragment>
<b>New {details.requestType} request reason: </b>{details.requestor}<br />
<b>New withdrawal request date: </b> {formatDecisionDate(details.issueModificationRequestWithdrawalDate)}<br />
</React.Fragment>;
break;
default:
return null;
}

return <React.Fragment>
{component}
</React.Fragment>;
};

const AddedIssueWithDateFragment = (details) => {
return <React.Fragment>
<AddedIssueFragment {...details} />
Expand Down Expand Up @@ -93,12 +252,78 @@ const IndividualClaimHistoryTable = (props) => {
</React.Fragment>;
};

const WithdrawnRequestedIssueModificationFragment = (details) => {
return <React.Fragment>
<b>Benefit type: </b>{BENEFIT_TYPES[details.benefitType]}<br />
<b>Issue type: </b>{details.newIssueType}<br />
<b>Issue description: </b>{details.newIssueDescription}<br />
<b>Decision date: </b>{formatDecisionDate(details.newDecisionDate)}<br />
<b>{capitalizeFirst(details.requestType)} request reason: </b>{details.modificationRequestReason}<br />
{withdrawalRequestDate(details)}
</React.Fragment>;
};

const OriginalRequestedIssueModificationFragment = (details) => {
let component = null;

switch (details.requestType) {
case 'modification':
component = <RequestedIssueModificationFragment {...details} />;
break;
case 'addition':
component = <RequestedIssueFragment {...details} />;
break;
case 'removal':
component = <RequestedIssueFragment {...details} />;
break;
case 'withdrawal':
component = <WithdrawnRequestedIssueModificationFragment {...details} />;
break;
default:
return null;
}

return (
<div>
{component}
</div>
);
};

const OriginalDetailsFragments = (row) => {
const { details, modificationRequestDetails } = row;

const requestDetails = { ...modificationRequestDetails };
const requestModificationDetails = { ...details, ...requestDetails };

const [isOpen, setIsOpen] = useState(false);

const toggle = () => {
setIsOpen((isOpen) => !isOpen);
};

return (
<div>
<div style={{ marginBottom: '15px' }}>
<a onClick={toggle} style={{ cursor: 'pointer' }}>{`${isOpen ? 'Hide' : 'View' } original request`}</a>
</div>
{isOpen &&
<div>
<OriginalRequestedIssueModificationFragment {...requestModificationDetails} />
</div>}
</div>
);
};

const DetailsFragment = (row) => {

let component = null;
const { readableEventType, details, modificationRequestDetails } = row;

const { readableEventType, details } = row;
const detailsExtended = { ...details, eventDate: row.eventDate, eventType: row.eventType };

const detailsExtended = { ...details, eventDate: row.eventDate };
const requestDetails = { ...modificationRequestDetails };
const RequestIssueModificationDetails = { ...requestDetails, ...detailsExtended };

switch (readableEventType) {
case 'Claim created':
Expand All @@ -110,6 +335,9 @@ const IndividualClaimHistoryTable = (props) => {
case 'Completed disposition':
component = <CompletedDispositionFragment {...detailsExtended} />;
break;
case 'Claim status - Pending':
component = <ClaimPendingFragment />;
break;
case 'Claim status - In progress':
component = <ClaimInProgressFragment />;
break;
Expand All @@ -131,13 +359,46 @@ const IndividualClaimHistoryTable = (props) => {
case 'Removed issue':
component = <RemovedIssueFragment {...detailsExtended} />;
break;
case 'Cancellation of request':
component = <CancellationRequestedIssueFragment {...requestDetails} />;
break;
case 'Requested issue removal':
component = <RequestedIssueFragment {...requestDetails} />;
break;
case 'Requested issue modification':
component = <RequestedIssueModificationFragment {...requestDetails} />;
break;
case 'Requested issue addition':
component = <RequestedIssueFragment {...requestDetails} />;
break;
case 'Requested issue withdrawal':
component = <WithdrawalRequestedIssueFormat {...requestDetails} />;
break;
case `Approval of request - issue ${requestDetails.requestType}`:
component = <RequestedIssueDecisionFragment {...RequestIssueModificationDetails} />;
break;
case `Edit of request - issue ${requestDetails.requestType}`:
component = <EditOfRequestIssueModification {...RequestIssueModificationDetails} />;
break;
case `Rejection of request - issue ${requestDetails.requestType}`:
component = <RequestedIssueDecisionFragment {...RequestIssueModificationDetails} />;
break;
default:
return null;
}

return <p>
{component}
</p>;
const chunk = [
'request_approved',
'request_edited',
'request_denied'
];

return (
<div>
<p>{component}</p>
{ chunk.includes(RequestIssueModificationDetails.eventType) ? <OriginalDetailsFragments {...row} /> : null }
</div>
);
};

const dateSort = (row) => {
Expand Down
1 change: 1 addition & 0 deletions spec/factories/issue_modification_request.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
request_reason { Faker::Lorem.sentence }

benefit_type { "vha" }
nonrating_issue_description { Faker::Lorem.sentence }
nonrating_issue_category { Constants::ISSUE_CATEGORIES["vha"].sample }
status { "assigned" }

Expand Down
Loading

0 comments on commit fdaa5cf

Please sign in to comment.