Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add validate for revision request when review is failed #314

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -79,10 +79,12 @@ export default function ActionButtons() {
validateAtKey,
data,
);
const updateRequestData = consultationSchema.validateSyncAt(
"update_request",
data,
);

const passed =
decisionData.passedConsultationCheck === RadioOptions.YES.value;
const updateRequestData = passed
? {}
: consultationSchema.validateSyncAt("update_request", data);
const requestBody = {
form_answers: {
...decisionData,
Expand Down Expand Up @@ -114,10 +116,12 @@ export default function ActionButtons() {
"staff",
getValues(),
);
const updateRequestData = consultationSchema.validateSyncAt(
"update_request",
getValues(),
);

const passed =
staffDecision.passedConsultationCheck === RadioOptions.YES.value;
const updateRequestData = passed
? {}
: consultationSchema.validateSyncAt("update_request", getValues());

const requestBody = {
status: SUBMISSION_REVIEW_STATUS.PENDING_MANAGER_REVIEW,
Expand All @@ -141,14 +145,17 @@ export default function ActionButtons() {
const handleCompletingConsultationCheck = async () => {
try {
setIsCompletingConsultationCheck(true);

const managerDecision = consultationSchema.validateSyncAt(
"manager",
getValues(),
);
const updateRequestData = consultationSchema.validateSyncAt(
"update_request",
getValues(),
);
const noDecision =
managerDecision.passedConsultationCheck === RadioOptions.NO.value;
const updateRequestData = noDecision
? consultationSchema.validateSyncAt("update_request", getValues())
: {};

const passed =
managerDecision.passedConsultationCheck === RadioOptions.YES.value;
const requestBody = {
Expand All @@ -161,6 +168,7 @@ export default function ActionButtons() {
},
type: SUBMISSION_REVIEW_ENTRY_TYPE.MANAGER_CONFIRMATION,
};

await saveSubmissionReview(requestBody);
setIsCompletingConsultationCheck(false);
notify.success("Consultation Check was completed");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,37 +1,5 @@
import * as yup from "yup";

export const consultationSchema = yup.object().shape({
staff: yup.object().shape({
passedConsultationCheck: yup
.string()
.required("Staff decision is required"),
}),
manager: yup.object().shape({
passedConsultationCheck: yup
.string()
.required("Manager decision is required"),
}),
update_request: yup
.object()
.when(
["staff.passedConsultationCheck", "manager.passedConsultationCheck"],
(values: string[], schema: yup.AnyObject) => {
const [staff, manager] = values;
return staff === "NO" && manager !== "YES"
? schema.shape({
reason: yup.string().required("Reason is required"),
submission_item_types: yup
.array()
.nullable()
.required("Submission items are required")
.of(yup.number())
.min(1, "Please select at least one item"),
})
: schema;
},
),
});

export const RadioOptions = {
YES: {
label: "Yes, the holder has passed the Consultation Check",
Expand All @@ -42,3 +10,41 @@ export const RadioOptions = {
value: "NO",
},
};

export const consultationSchema = yup.lazy((value) => {
const baseSchema = {
staff: yup.object().shape({
passedConsultationCheck: yup
.string()
.required("Staff decision is required"),
}),
manager: yup.object().shape({
passedConsultationCheck: yup
.string()
.required("Manager decision is required"),
}),
update_request: yup.object().shape({}),
};

const no =
value.staff.passedConsultationCheck === RadioOptions.NO.value ||
value.manager.passedConsultationCheck === RadioOptions.NO.value;

if (no) {
return yup.object().shape({
...baseSchema,
update_request: yup.object().shape({
reason: yup.string().required("Reason is required"),
submission_item_types: yup
.array()
.nullable()
.required("Submission items are required")
.typeError("Submission items are required")
.of(yup.number())
.min(1, "Please select at least one item"),
}),
});
}

return yup.object().shape(baseSchema);
});
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,10 @@ export const ConsultationRecordStaffView = () => {
const {
projectId: accountProjectIdParam,
submissionPackageId,
submissionId: submissionItemId
} =
useParams({
from: "/staff/_staffLayout/projects/$projectId/_projectLayout/submission-packages/$submissionPackageId/_submissionLayout/submissions/$submissionId",
});
submissionId: submissionItemId,
} = useParams({
from: "/staff/_staffLayout/projects/$projectId/_projectLayout/submission-packages/$submissionPackageId/_submissionLayout/submissions/$submissionId",
});
const accountProjectId = Number(accountProjectIdParam);
const submissionId = Number(submissionItemId);
const { data: accountProject } = useGetAccountProjectForStaff({
Expand All @@ -31,7 +30,7 @@ export const ConsultationRecordStaffView = () => {
});

const formSubmission = submissionItem?.submissions?.find(
(submission) => submission.type === SUBMISSION_TYPE.FORM
(submission) => submission.type === SUBMISSION_TYPE.FORM,
);

const formData = useMemo(() => {
Expand Down Expand Up @@ -61,14 +60,15 @@ export const ConsultationRecordStaffView = () => {
);

const partiesList =
submissionPackage?.meta?.main_condition?.condition_attributes
?.parties_required_to_be_consulted?.split(",") || [];
submissionPackage?.meta?.main_condition?.condition_attributes?.parties_required_to_be_consulted?.split(
",",
) || [];

if (!accountProject) return <Navigate to="/error" />;

return (
<SubmissionFormContainer>
<FormFieldSection formData={formData} partiesList={partiesList}/>
<FormFieldSection formData={formData} partiesList={partiesList} />
<InternalDocumentSection />
<ReviewSection />
</SubmissionFormContainer>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,10 +78,10 @@ export default function ActionButtons() {
validateAtKey,
data,
);
const updateRequestData = managementPlanReviewSchema.validateSyncAt(
"update_request",
data,
);
const passed = decisionData.passedReview === RadioOptions.YES.value;
const updateRequestData = passed
? {}
: managementPlanReviewSchema.validateSyncAt("update_request", data);
const requestBody = {
form_answers: {
...decisionData,
Expand Down Expand Up @@ -114,10 +114,14 @@ export default function ActionButtons() {
"staff",
getValues(),
);
const updateRequestData = managementPlanReviewSchema.validateSyncAt(
"update_request",
getValues(),
);

const passed = staffDecision.passedReview === RadioOptions.YES.value;
const updateRequestData = passed
? {}
: managementPlanReviewSchema.validateSyncAt(
"update_request",
getValues(),
);

const requestBody = {
status: SUBMISSION_REVIEW_STATUS.PENDING_MANAGER_REVIEW,
Expand Down Expand Up @@ -146,14 +150,18 @@ export default function ActionButtons() {
"manager",
getValues(),
);
const updateRequestData = managementPlanReviewSchema.validateSyncAt(
"update_request",
getValues(),
);

const passed = [
RadioOptions.YES.value,
RadioOptions.YES_DEFAULT.value,
].includes(managerDecision.passedReview);

const updateRequestData = passed
? {}
: managementPlanReviewSchema.validateSyncAt(
"update_request",
getValues(),
);
const requestBody = {
status: passed
? SUBMISSION_REVIEW_STATUS.APPROVED
Expand All @@ -164,6 +172,7 @@ export default function ActionButtons() {
},
type: SUBMISSION_REVIEW_ENTRY_TYPE.MANAGER_CONFIRMATION,
};

await saveSubmissionReview(requestBody);
setIsCompletingReview(false);
notify.success("Review was completed");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,33 +1,5 @@
import * as yup from "yup";

export const managementPlanReviewSchema = yup.object().shape({
staff: yup.object().shape({
passedReview: yup.string().required("Staff decision is required"),
}),
manager: yup.object().shape({
passedReview: yup.string().required("Manager decision is required"),
}),
update_request: yup
.object()
.when(
["staff.passedReview", "manager.passedReview"],
(values: string[], schema: yup.AnyObject) => {
const [staff, manager] = values;
return staff === "NO" && manager !== "YES"
? schema.shape({
reason: yup.string().required("Reason is required"),
submission_item_types: yup
.array()
.nullable()
.required("Submission items are required")
.of(yup.number())
.min(1, "Please select at least one item"),
})
: schema;
},
),
});

export const RadioOptions = Object.freeze({
YES: {
label: "Yes, the holder passed the Management Plan Review",
Expand All @@ -42,3 +14,37 @@ export const RadioOptions = Object.freeze({
value: "yes_default",
},
});

export const managementPlanReviewSchema = yup.lazy((value) => {
const baseSchema = {
staff: yup.object().shape({
passedReview: yup.string().required("Staff decision is required"),
}),
manager: yup.object().shape({
passedReview: yup.string().required("Manager decision is required"),
}),
update_request: yup.object().shape({}),
};

const no =
value.staff.passedReview === RadioOptions.NO.value ||
value.manager.passedReview === RadioOptions.NO.value;

if (no) {
return yup.object().shape({
...baseSchema,
update_request: yup.object().shape({
reason: yup.string().required("Reason is required"),
submission_item_types: yup
.array()
.nullable()
.required("Submission items are required")
.typeError("Submission items are required")
.of(yup.number())
.min(1, "Please select at least one item"),
}),
});
}

return yup.object().shape(baseSchema);
});
Loading