Skip to content

Commit

Permalink
Merge pull request #388 from USEPA/feature/update-helpdesk-search
Browse files Browse the repository at this point in the history
Feature/update helpdesk search
  • Loading branch information
courtneymyers authored Feb 28, 2024
2 parents 2753e79 + 65e00fb commit 59946eb
Show file tree
Hide file tree
Showing 4 changed files with 160 additions and 153 deletions.
79 changes: 60 additions & 19 deletions app/client/src/config.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -64,35 +64,76 @@ export const messages = {

/**
* Formio status mapping for all form submissions (practically, just capitalizes
* "draft" or "submitted", but follows same format as BAP status maps).
* "draft" or "submitted", but follows same format as BAP status map).
*/
export const formioStatusMap = new Map<string, string>()
.set("draft", "Draft")
.set("submitted", "Submitted");

/**
* BAP internal to external status mapping for FRF submissions.
* BAP internal to external status mapping by year and form type.
*/
export const bapFRFStatusMap = new Map<string, string>()
.set("Needs Clarification", "Needs Clarification")
.set("Withdrawn", "Withdrawn")
.set("Coordinator Denied", "Not Selected")
.set("Accepted", "Selected");
export const bapStatusMap = {
2022: {
frf: new Map<string, string>()
.set("Needs Clarification", "Needs Clarification")
.set("Withdrawn", "Withdrawn")
.set("Coordinator Denied", "Not Selected")
.set("Accepted", "Selected"),
prf: new Map<string, string>()
.set("Needs Clarification", "Needs Clarification")
.set("Withdrawn", "Withdrawn")
.set("Coordinator Denied", "Funding Not Approved")
.set("Accepted", "Funding Approved"),
crf: new Map<string, string>()
.set("Needs Clarification", "Needs Clarification")
.set("Reimbursement Needed", "Reimbursement Needed")
.set("Branch Director Denied", "Close Out Not Approved")
.set("Branch Director Approved", "Close Out Approved"),
},
2023: {
frf: new Map<string, string>()
.set("Needs Clarification", "Needs Clarification")
.set("Withdrawn", "Withdrawn")
.set("Coordinator Denied", "Not Selected")
.set("Accepted", "Selected"),
prf: new Map<string, string>()
.set("Needs Clarification", "Needs Clarification")
.set("Withdrawn", "Withdrawn")
.set("Coordinator Denied", "Funding Denied")
.set("Accepted", "Funding Approved"),
crf: new Map<string, string>(),
},
};

/**
* BAP internal to external status mapping for PRF submissions.
* Formio user name field by year and form type.
*/
export const bapPRFStatusMap = new Map<string, string>()
.set("Needs Clarification", "Needs Clarification")
.set("Withdrawn", "Withdrawn")
.set("Coordinator Denied", "Funding Not Approved")
.set("Accepted", "Funding Approved");
export const formioNameField = {
2022: {
frf: "sam_hidden_applicant_name",
prf: "applicantName",
crf: "signatureName",
},
2023: {
frf: "_bap_applicant_name",
prf: "",
crf: "",
},
};

/**
* BAP internal to external status mapping for CRF submissions.
* Formio user email field by year and form type.
*/
export const bapCRFStatusMap = new Map<string, string>()
.set("Needs Clarification", "Needs Clarification")
.set("Reimbursement Needed", "Reimbursement Needed")
.set("Branch Director Denied", "Close Out Not Approved")
.set("Branch Director Approved", "Close Out Approved");
export const formioEmailField = {
2022: {
frf: "last_updated_by",
prf: "hidden_current_user_email",
crf: "hidden_current_user_email",
},
2023: {
frf: "_user_email",
prf: "",
crf: "",
},
};
66 changes: 19 additions & 47 deletions app/client/src/routes/helpdesk.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ import {
serverUrl,
messages,
formioStatusMap,
bapFRFStatusMap,
bapPRFStatusMap,
bapCRFStatusMap,
bapStatusMap,
formioNameField,
formioEmailField,
} from "@/config";
import {
type FormType,
Expand Down Expand Up @@ -80,49 +80,17 @@ function ResultTableRows(props: {
const bapInternalStatus = bap.status || "";
const formioStatus = formioStatusMap.get(formio.state);

/* TODO: update logic once BAP supports 2023 FRF */

const id =
rebateYear === "2023"
? formio._id
: lastSearchedText.length === 6
? bap.rebateId
: bap.mongoId;

const status =
rebateYear === "2023"
? formioStatus
: submissionNeedsEdits({ formio, bap })
? "Edits Requested"
: formType === "frf"
? bapFRFStatusMap.get(bapInternalStatus) || formioStatus
: formType === "prf"
? bapPRFStatusMap.get(bapInternalStatus) || formioStatus
: formType === "crf"
? bapCRFStatusMap.get(bapInternalStatus) || formioStatus
: "";

const name =
rebateYear === "2023"
? (formio as FormioFRF2023Submission).data._bap_applicant_name
: formType === "frf"
? (formio as FormioFRF2022Submission).data.sam_hidden_applicant_name
: formType === "prf"
? (formio as FormioPRF2022Submission).data.applicantName
: formType === "crf"
? (formio as FormioCRF2022Submission).data.signatureName
: "";

const email =
rebateYear === "2023"
? (formio as FormioFRF2023Submission).data._user_email
: formType === "frf"
? (formio as FormioFRF2022Submission).data.last_updated_by
: formType === "prf"
? (formio as FormioPRF2022Submission).data.hidden_current_user_email
: formType === "crf"
? (formio as FormioCRF2022Submission).data.hidden_current_user_email
: "";
const id = lastSearchedText.length === 6 ? bap.rebateId : bap.mongoId;

const status = submissionNeedsEdits({ formio, bap })
? "Edits Requested"
: bapStatusMap[rebateYear][formType].get(bapInternalStatus) || formioStatus;

const nameField = formioNameField[rebateYear][formType];
const emailField = formioEmailField[rebateYear][formType];

const name = (formio.data[nameField] as string) || "";
const email = (formio.data[emailField] as string) || "";

return (
<>
Expand Down Expand Up @@ -204,7 +172,11 @@ export function Helpdesk() {
"tw-rounded-md tw-border-0 tw-text-sm tw-font-bold tw-leading-4 tw-ring-1 tw-ring-inset tw-ring-gray-300",
)}
name="rebate-year"
onChange={(ev) => setRebateYear(ev.target.value as RebateYear)}
onChange={(ev) => {
setRebateYear(ev.target.value as RebateYear);
setResultDisplayed(false);
queryClient.resetQueries({ queryKey: ["helpdesk"] });
}}
defaultValue={rebateYear}
>
<option>2022</option>
Expand Down
105 changes: 35 additions & 70 deletions app/server/app/routes/help.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,19 +36,32 @@ router.get("/formio/:rebateYear/:formType/:id", (req, res) => {

const formioFormUrl = formUrl[rebateYear][formType];

/**
* TODO: revisit `getBapFormSubmissionData()` to include rebateYear once BAP
* supports 2023 FRF
*/
if (rebateYear === "2023") {
if (rebateId && !mongoId) {
return getBapFormSubmissionData({
rebateYear,
formType,
rebateId,
mongoId,
req,
}).then((bapSubmission) => {
if (!bapSubmission || !formioFormUrl) {
const logId = rebateId || mongoId;
const errorStatus = 500;
const errorMessage = `Error getting 2023 ${formName} submission '${rebateId}'.`;
const errorMessage = `Error getting ${rebateYear} ${formName} submission '${logId}' from the BAP.`;
return res.status(errorStatus).json({ message: errorMessage });
}

const {
UEI_EFTI_Combo_Key__c,
CSB_Form_ID__c,
CSB_Modified_Full_String__c,
CSB_Review_Item_ID__c,
Parent_Rebate_ID__c,
Record_Type_Name__c,
Parent_CSB_Rebate__r,
} = bapSubmission;

return Promise.all([
axiosFormio(req).get(`${formioFormUrl}/submission/${mongoId}`),
axiosFormio(req).get(`${formioFormUrl}/submission/${CSB_Form_ID__c}`),
axiosFormio(req).get(formioFormUrl),
])
.then((responses) => responses.map((axiosRes) => axiosRes.data))
Expand All @@ -57,76 +70,28 @@ router.get("/formio/:rebateYear/:formType/:id", (req, res) => {
formSchema: { url: formioFormUrl, json: schema },
formio: formioSubmission,
bap: {
modified: null,
comboKey: null,
mongoId: null,
rebateId: null,
reviewItemId: null,
status: null,
modified: CSB_Modified_Full_String__c, // ISO 8601 date time string
comboKey: UEI_EFTI_Combo_Key__c, // UEI + EFTI combo key
mongoId: CSB_Form_ID__c, // MongoDB Object ID
rebateId: Parent_Rebate_ID__c, // CSB Rebate ID (6 digits)
reviewItemId: CSB_Review_Item_ID__c, // CSB Rebate ID with form/version ID (9 digits)
status: Record_Type_Name__c.startsWith("CSB Funding Request")
? Parent_CSB_Rebate__r?.CSB_Funding_Request_Status__c
: Record_Type_Name__c.startsWith("CSB Payment Request")
? Parent_CSB_Rebate__r?.CSB_Payment_Request_Status__c
: Record_Type_Name__c.startsWith("CSB Close Out Request")
? Parent_CSB_Rebate__r?.CSB_Closeout_Request_Status__c
: "",
},
});
})
.catch((error) => {
// NOTE: error is logged in axiosFormio response interceptor
const errorStatus = error.response?.status || 500;
const errorMessage = `Error getting ${rebateYear} ${formName} submission '${mongoId}'.`;
const errorMessage = `Error getting ${rebateYear} ${formName} submission '${CSB_Form_ID__c}'.`;
return res.status(errorStatus).json({ message: errorMessage });
});
}

return getBapFormSubmissionData(req, formType, rebateId, mongoId).then(
(bapSubmission) => {
if (!bapSubmission || !formioFormUrl) {
const logId = rebateId || mongoId;
const errorStatus = 500;
const errorMessage = `Error getting ${rebateYear} ${formName} submission '${logId}' from the BAP.`;
return res.status(errorStatus).json({ message: errorMessage });
}

const {
UEI_EFTI_Combo_Key__c,
CSB_Form_ID__c,
CSB_Modified_Full_String__c,
CSB_Review_Item_ID__c,
Parent_Rebate_ID__c,
Record_Type_Name__c,
Parent_CSB_Rebate__r,
} = bapSubmission;

return Promise.all([
axiosFormio(req).get(`${formioFormUrl}/submission/${CSB_Form_ID__c}`),
axiosFormio(req).get(formioFormUrl),
])
.then((responses) => responses.map((axiosRes) => axiosRes.data))
.then(([formioSubmission, schema]) => {
return res.json({
formSchema: { url: formioFormUrl, json: schema },
formio: formioSubmission,
bap: {
modified: CSB_Modified_Full_String__c, // ISO 8601 date time string
comboKey: UEI_EFTI_Combo_Key__c, // UEI + EFTI combo key
mongoId: CSB_Form_ID__c, // MongoDB Object ID
rebateId: Parent_Rebate_ID__c, // CSB Rebate ID (6 digits)
reviewItemId: CSB_Review_Item_ID__c, // CSB Rebate ID with form/version ID (9 digits)
status:
Record_Type_Name__c === "CSB Funding Request"
? Parent_CSB_Rebate__r?.CSB_Funding_Request_Status__c
: Record_Type_Name__c === "CSB Payment Request"
? Parent_CSB_Rebate__r?.CSB_Payment_Request_Status__c
: Record_Type_Name__c === "CSB Close Out Request"
? Parent_CSB_Rebate__r?.CSB_Closeout_Request_Status__c
: "",
},
});
})
.catch((error) => {
// NOTE: error is logged in axiosFormio response interceptor
const errorStatus = error.response?.status || 500;
const errorMessage = `Error getting ${rebateYear} ${formName} submission '${CSB_Form_ID__c}'.`;
return res.status(errorStatus).json({ message: errorMessage });
});
},
);
});
});

module.exports = router;
Loading

0 comments on commit 59946eb

Please sign in to comment.